|
reference, declaration → definition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
|
Declarations
include/llvm/CodeGen/AsmPrinter.h 54 class MachineInstr;
include/llvm/CodeGen/AsmPrinterHandler.h 24 class MachineInstr;
include/llvm/CodeGen/DFAPacketizer.h 43 class MachineInstr;
include/llvm/CodeGen/DbgEntityHistoryCalculator.h 22 class MachineInstr;
include/llvm/CodeGen/DebugHandlerBase.h 27 class MachineInstr;
include/llvm/CodeGen/ExecutionDomainFix.h 34 class MachineInstr;
include/llvm/CodeGen/FastISel.h 47 class MachineInstr;
include/llvm/CodeGen/FunctionLoweringInfo.h 43 class MachineInstr;
include/llvm/CodeGen/GlobalISel/CombinerHelper.h 28 class MachineInstr;
include/llvm/CodeGen/GlobalISel/CombinerInfo.h 21 class MachineInstr;
include/llvm/CodeGen/GlobalISel/GISelChangeObserver.h 20 class MachineInstr;
include/llvm/CodeGen/GlobalISel/GISelWorkList.h 20 class MachineInstr;
include/llvm/CodeGen/GlobalISel/IRTranslator.h 45 class MachineInstr;
include/llvm/CodeGen/GlobalISel/InstructionSelector.h 35 class MachineInstr;
include/llvm/CodeGen/GlobalISel/LegalizerInfo.h 37 class MachineInstr;
include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h 31 class MachineInstr;
include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h 29 class MachineInstr;
include/llvm/CodeGen/GlobalISel/Utils.h 26 class MachineInstr;
include/llvm/CodeGen/LexicalScopes.h 32 class MachineInstr;
include/llvm/CodeGen/LiveIntervals.h 48 class MachineInstr;
include/llvm/CodeGen/LivePhysRegs.h 41 class MachineInstr;
include/llvm/CodeGen/LiveRangeEdit.h 38 class MachineInstr;
include/llvm/CodeGen/LiveRegUnits.h 26 class MachineInstr;
include/llvm/CodeGen/MachineOperand.h 31 class MachineInstr;
include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h 24 class MachineInstr;
include/llvm/CodeGen/MachineSSAUpdater.h 20 class MachineInstr;
include/llvm/CodeGen/MachineScheduler.h 108 class MachineInstr;
include/llvm/CodeGen/MachineTraceMetrics.h 62 class MachineInstr;
include/llvm/CodeGen/MacroFusion.h 22 class MachineInstr;
include/llvm/CodeGen/ModuloSchedule.h 73 class MachineInstr;
include/llvm/CodeGen/ReachingDefAnalysis.h 32 class MachineInstr;
include/llvm/CodeGen/RegisterPressure.h 35 class MachineInstr;
include/llvm/CodeGen/RegisterScavenging.h 29 class MachineInstr;
include/llvm/CodeGen/ScheduleDAGInstrs.h 41 class MachineInstr;
include/llvm/CodeGen/ScheduleHazardRecognizer.h 19 class MachineInstr;
include/llvm/CodeGen/SelectionDAGISel.h 32 class MachineInstr;
include/llvm/CodeGen/SwiftErrorValueTracking.h 32 class MachineInstr;
include/llvm/CodeGen/TailDuplicator.h 30 class MachineInstr;
include/llvm/CodeGen/TargetLowering.h 82 class MachineInstr;
include/llvm/CodeGen/TargetRegisterInfo.h 39 class MachineInstr;
include/llvm/CodeGen/TargetSchedule.h 27 class MachineInstr;
include/llvm/CodeGen/TargetSubtargetInfo.h 36 class MachineInstr;
lib/CodeGen/AggressiveAntiDepBreaker.h 31 class MachineInstr;
lib/CodeGen/AsmPrinter/DebugLocStream.h 21 class MachineInstr;
lib/CodeGen/AsmPrinter/EHStreamer.h 24 class MachineInstr;
lib/CodeGen/CriticalAntiDepBreaker.h 28 class MachineInstr;
lib/CodeGen/RegAllocBase.h 47 class MachineInstr;
lib/CodeGen/RegisterCoalescer.h 19 class MachineInstr;
lib/Target/AArch64/AArch64MCInstLower.h 22 class MachineInstr;
lib/Target/AArch64/AArch64MachineFunctionInfo.h 28 class MachineInstr;
lib/Target/AMDGPU/AMDGPUInstrInfo.h 26 class MachineInstr;
lib/Target/AMDGPU/AMDGPUInstructionSelector.h 37 class MachineInstr;
lib/Target/AMDGPU/GCNHazardRecognizer.h 25 class MachineInstr;
lib/Target/AMDGPU/GCNIterativeScheduler.h 23 class MachineInstr;
lib/Target/AMDGPU/R600InstrInfo.h 35 class MachineInstr;
lib/Target/ARC/ARCMCInstLower.h 20 class MachineInstr;
lib/Target/ARM/ARM.h 34 class MachineInstr;
lib/Target/ARM/ARMHazardRecognizer.h 23 class MachineInstr;
lib/Target/ARM/ARMISelLowering.h 45 class MachineInstr;
lib/Target/AVR/AVRMCInstLower.h 17 class MachineInstr;
lib/Target/BPF/BPFMCInstLower.h 20 class MachineInstr;
lib/Target/Hexagon/HexagonAsmPrinter.h 24 class MachineInstr;
lib/Target/Hexagon/HexagonBitTracker.h 22 class MachineInstr;
lib/Target/Hexagon/HexagonBlockRanges.h 24 class MachineInstr;
lib/Target/Hexagon/HexagonFrameLowering.h 26 class MachineInstr;
lib/Target/Hexagon/HexagonInstrInfo.h 34 class MachineInstr;
lib/Target/Hexagon/HexagonSubtarget.h 36 class MachineInstr;
lib/Target/Hexagon/HexagonVLIWPacketizer.h 23 class MachineInstr;
lib/Target/Hexagon/RDFCopy.h 23 class MachineInstr;
lib/Target/Hexagon/RDFGraph.h 252 class MachineInstr;
lib/Target/Lanai/LanaiMCInstLower.h 20 class MachineInstr;
lib/Target/MSP430/MSP430MCInstLower.h 20 class MachineInstr;
lib/Target/Mips/MipsAsmPrinter.h 34 class MachineInstr;
lib/Target/Mips/MipsISelLowering.h 49 class MachineInstr;
lib/Target/Mips/MipsInstrInfo.h 35 class MachineInstr;
lib/Target/Mips/MipsMCInstLower.h 19 class MachineInstr;
lib/Target/Mips/MipsSEISelLowering.h 23 class MachineInstr;
lib/Target/PowerPC/PPC.h 26 class MachineInstr;
lib/Target/RISCV/RISCV.h 29 class MachineInstr;
lib/Target/Sparc/Sparc.h 27 class MachineInstr;
lib/Target/SystemZ/SystemZAsmPrinter.h 21 class MachineInstr;
lib/Target/SystemZ/SystemZMCInstLower.h 19 class MachineInstr;
lib/Target/WebAssembly/WebAssemblyDebugValueManager.h 22 class MachineInstr;
lib/Target/WebAssembly/WebAssemblyMCInstLower.h 26 class MachineInstr;
lib/Target/XCore/XCoreMCInstLower.h 18 class MachineInstr;
References
gen/lib/Target/AArch64/AArch64GenGICombiner.inc 27 MachineInstr &MI,
98 MachineInstr &MI,
gen/lib/Target/AArch64/AArch64GenGlobalISel.inc 25 bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI) const override;
883 bool AArch64InstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI) const {
1019 bool AArch64InstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const {
gen/lib/Target/AArch64/AArch64GenInstrInfo.inc17985 static bool isExynosArithFast(const MachineInstr &MI);
17986 static bool isExynosCheapAsMove(const MachineInstr &MI);
17987 static bool isExynosLogicExFast(const MachineInstr &MI);
17988 static bool isExynosLogicFast(const MachineInstr &MI);
17989 static bool isExynosResetFast(const MachineInstr &MI);
17990 static bool isExynosScaledAddr(const MachineInstr &MI);
17991 static bool isCopyIdiom(const MachineInstr &MI);
17992 static bool isZeroFPIdiom(const MachineInstr &MI);
17993 static bool isZeroIdiom(const MachineInstr &MI);
17994 static bool hasExtendedReg(const MachineInstr &MI);
17995 static bool hasShiftedReg(const MachineInstr &MI);
17996 static bool isScaledAddr(const MachineInstr &MI);
18003 bool AArch64InstrInfo::isExynosArithFast(const MachineInstr &MI) {
18064 bool AArch64InstrInfo::isExynosCheapAsMove(const MachineInstr &MI) {
18090 bool AArch64InstrInfo::isExynosLogicExFast(const MachineInstr &MI) {
18147 bool AArch64InstrInfo::isExynosLogicFast(const MachineInstr &MI) {
18198 bool AArch64InstrInfo::isExynosResetFast(const MachineInstr &MI) {
18224 bool AArch64InstrInfo::isExynosScaledAddr(const MachineInstr &MI) {
18280 bool AArch64InstrInfo::isCopyIdiom(const MachineInstr &MI) {
18311 bool AArch64InstrInfo::isZeroFPIdiom(const MachineInstr &MI) {
18331 bool AArch64InstrInfo::isZeroIdiom(const MachineInstr &MI) {
18348 bool AArch64InstrInfo::hasExtendedReg(const MachineInstr &MI) {
18368 bool AArch64InstrInfo::hasShiftedReg(const MachineInstr &MI) {
18400 bool AArch64InstrInfo::isScaledAddr(const MachineInstr &MI) {
gen/lib/Target/AArch64/AArch64GenMCPseudoLowering.inc 11 const MachineInstr *MI) {
gen/lib/Target/AArch64/AArch64GenSubtargetInfo.inc17972 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
17998 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/AMDGPU/AMDGPUGenGlobalISel.inc 25 bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI) const override;
376 bool AMDGPUInstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI) const {
438 bool AMDGPUInstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const {
gen/lib/Target/AMDGPU/AMDGPUGenMCPseudoLowering.inc 11 const MachineInstr *MI) {
gen/lib/Target/AMDGPU/AMDGPUGenSubtargetInfo.inc 786 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
812 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/AMDGPU/R600GenSubtargetInfo.inc 310 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
339 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/ARC/ARCGenSubtargetInfo.inc 136 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
162 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/ARM/ARMGenGlobalISel.inc 25 bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI) const override;
745 bool ARMInstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI) const {
807 bool ARMInstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const {
gen/lib/Target/ARM/ARMGenMCPseudoLowering.inc 11 const MachineInstr *MI) {
gen/lib/Target/ARM/ARMGenSubtargetInfo.inc19572 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
19601 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/AVR/AVRGenSubtargetInfo.inc 537 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
563 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/BPF/BPFGenSubtargetInfo.inc 159 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
185 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/Hexagon/HexagonGenSubtargetInfo.inc 4683 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
4713 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/Lanai/LanaiGenSubtargetInfo.inc 217 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
246 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/MSP430/MSP430GenSubtargetInfo.inc 160 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
186 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/Mips/MipsGenGlobalISel.inc 25 bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI) const override;
610 bool MipsInstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI) const {
632 bool MipsInstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const {
gen/lib/Target/Mips/MipsGenMCPseudoLowering.inc 11 const MachineInstr *MI) {
gen/lib/Target/Mips/MipsGenSubtargetInfo.inc 3863 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
3889 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/NVPTX/NVPTXGenSubtargetInfo.inc 235 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
261 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/PowerPC/PPCGenSubtargetInfo.inc 8212 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
8241 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/RISCV/RISCVGenGlobalISel.inc 25 bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI) const override;
256 bool RISCVInstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI) const {
278 bool RISCVInstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const {
gen/lib/Target/RISCV/RISCVGenMCPseudoLowering.inc 11 const MachineInstr *MI) {
gen/lib/Target/RISCV/RISCVGenSubtargetInfo.inc 273 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
300 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/Sparc/SparcGenSubtargetInfo.inc 529 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
558 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/SystemZ/SystemZGenSubtargetInfo.inc 5174 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
5200 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/WebAssembly/WebAssemblyGenSubtargetInfo.inc 178 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
204 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
gen/lib/Target/X86/X86GenGlobalISel.inc 25 bool testMIPredicate_MI(unsigned PredicateID, const MachineInstr &MI) const override;
749 bool X86InstructionSelector::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI) const {
771 bool X86InstructionSelector::selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const {
gen/lib/Target/X86/X86GenInstrInfo.inc49336 static bool isThreeOperandsLEA(const MachineInstr &MI);
49343 bool X86InstrInfo::isThreeOperandsLEA(const MachineInstr &MI) {
gen/lib/Target/X86/X86GenSubtargetInfo.inc21497 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
21500 bool isZeroIdiom(const MachineInstr *MI, APInt &Mask) const override;
21501 bool isDependencyBreaking(const MachineInstr *MI, APInt &Mask) const override;
21502 bool isOptimizableRegisterMove(const MachineInstr *MI) const override;
21526 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
22917 bool X86GenSubtargetInfo::isZeroIdiom(const MachineInstr *MI, APInt &Mask) const {
23005 bool X86GenSubtargetInfo::isDependencyBreaking(const MachineInstr *MI, APInt &Mask) const {
23050 bool X86GenSubtargetInfo::isOptimizableRegisterMove(const MachineInstr *MI) const {
gen/lib/Target/XCore/XCoreGenSubtargetInfo.inc 137 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
163 ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
include/llvm/ADT/ArrayRef.h 108 const ArrayRef<U *> &A,
110 std::is_convertible<U *const *, T const *>::value>::type * = nullptr)
118 const SmallVectorTemplateCommon<U *, DummyT> &Vec,
120 std::is_convertible<U *const *, T const *>::value>::type * = nullptr)
127 ArrayRef(const std::vector<U *, A> &Vec,
129 std::is_convertible<U *const *, T const *>::value>::type* = 0)
include/llvm/ADT/DenseMapInfo.h 39 static inline T* getEmptyKey() {
41 Val <<= PointerLikeTypeTraits<T*>::NumLowBitsAvailable;
45 static inline T* getTombstoneKey() {
47 Val <<= PointerLikeTypeTraits<T*>::NumLowBitsAvailable;
51 static unsigned getHashValue(const T *PtrVal) {
56 static bool isEqual(const T *LHS, const T *RHS) { return LHS == RHS; }
56 static bool isEqual(const T *LHS, const T *RHS) { return LHS == RHS; }
include/llvm/ADT/SmallSet.h 249 class SmallSet<PointeeType*, N> : public SmallPtrSet<PointeeType*, N> {};
include/llvm/ADT/ilist.h 96 template <class T> T &make();
106 static Yes &test(U *I, decltype(I->getNext(&make<NodeT>())) * = 0);
136 static Yes &test(U *I, decltype(I->createNode(make<NodeT>())) * = 0);
144 static const bool value = HasGetNext<TraitsT, NodeT>::value ||
146 HasCreateNode<TraitsT, NodeT>::value;
389 : public iplist_impl<simple_ilist<T, Options...>, ilist_traits<T>> {
include/llvm/ADT/ilist_node.h 150 typename ilist_detail::compute_node_options<T, Options...>::type> {
256 class ilist_node_with_parent : public ilist_node<NodeTy, Options...> {
274 NodeTy *getPrevNode() {
283 const NodeTy *getPrevNode() const {
288 NodeTy *getNextNode() {
297 const NodeTy *getNextNode() const {
include/llvm/ADT/ilist_node_options.h 108 typedef T value_type;
109 typedef T *pointer;
110 typedef T &reference;
111 typedef const T *const_pointer;
112 typedef const T &const_reference;
122 typedef node_options<T, extract_sentinel_tracking<Options...>::value,
include/llvm/ADT/iterator_range.h 38 iterator_range(Container &&c)
include/llvm/ADT/simple_ilist.h 79 : ilist_detail::compute_node_options<T, Options...>::type::list_base_type,
81 typename ilist_detail::compute_node_options<T, Options...>::type> {
85 typename ilist_detail::compute_node_options<T, Options...>::type;
include/llvm/Analysis/LoopInfo.h 131 template <class InstT> bool contains(const InstT *Inst) const {
include/llvm/CodeGen/AsmPrinter.h 278 void recordSled(MCSymbol *Sled, const MachineInstr &MI, SledKind Kind,
317 void emitCFIInstruction(const MachineInstr &MI);
319 void emitFrameAlloc(const MachineInstr &MI);
413 virtual void EmitInstruction(const MachineInstr *) {
442 virtual void emitImplicitDef(const MachineInstr *MI) const;
604 virtual void PrintSpecial(const MachineInstr *MI, raw_ostream &OS,
614 virtual bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
621 virtual bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
653 mutable const MachineInstr *LastMI = nullptr;
669 void EmitInlineAsm(const MachineInstr *MI) const;
include/llvm/CodeGen/AsmPrinterHandler.h 66 virtual void beginInstruction(const MachineInstr *MI) = 0;
include/llvm/CodeGen/DFAPacketizer.h 118 bool canReserveResources(MachineInstr &MI);
122 void reserveResources(MachineInstr &MI);
152 std::vector<MachineInstr*> CurrentPacketMIs;
156 std::map<MachineInstr*, SUnit*> MIToSUnit;
191 virtual bool ignorePseudoInstruction(const MachineInstr &I,
198 virtual bool isSoloInstruction(const MachineInstr &MI) { return true; }
206 virtual bool shouldAddToPacket(const MachineInstr &MI) { return true; }
221 bool alias(const MachineInstr &MI1, const MachineInstr &MI2,
221 bool alias(const MachineInstr &MI1, const MachineInstr &MI2,
include/llvm/CodeGen/DbgEntityHistoryCalculator.h 57 Entry(const MachineInstr *Instr, EntryKind Kind)
60 const MachineInstr *getInstr() const { return Instr.getPointer(); }
71 PointerIntPair<const MachineInstr *, 1, EntryKind> Instr;
82 bool startDbgValue(InlinedEntity Var, const MachineInstr &MI,
84 EntryIndex startClobber(InlinedEntity Var, const MachineInstr &MI);
107 using InstrMap = MapVector<InlinedEntity, const MachineInstr *>;
113 void addInstr(InlinedEntity Label, const MachineInstr &MI);
include/llvm/CodeGen/DebugHandlerBase.h 48 extractFromMachineInstruction(const MachineInstr &Instruction);
76 const MachineInstr *CurMI = nullptr;
90 DenseMap<const MachineInstr *, MCSymbol *> LabelsBeforeInsn;
93 DenseMap<const MachineInstr *, MCSymbol *> LabelsAfterInsn;
100 void requestLabelBeforeInsn(const MachineInstr *MI) {
105 void requestLabelAfterInsn(const MachineInstr *MI) {
115 void beginInstruction(const MachineInstr *MI) override;
122 MCSymbol *getLabelBeforeInsn(const MachineInstr *MI);
125 MCSymbol *getLabelAfterInsn(const MachineInstr *MI);
129 const MCExpr *getFunctionLocalOffsetAfterInsn(const MachineInstr *MI);
include/llvm/CodeGen/ExecutionDomainFix.h 67 SmallVector<MachineInstr *, 8> Instrs;
196 bool visitInstr(MachineInstr *);
200 void processDefs(MachineInstr *, bool Kill);
203 void visitSoftInstr(MachineInstr *, unsigned mask);
207 void visitHardInstr(MachineInstr *, unsigned domain);
include/llvm/CodeGen/FastISel.h 90 MachineInstr *Call = nullptr;
221 MachineInstr *LastLocalValue;
226 MachineInstr *EmitStartPt;
237 MachineInstr *getLastLocalValue() { return LastLocalValue; }
241 void setLastLocalValue(MachineInstr *I) {
304 virtual bool tryToFoldLoadIntoMI(MachineInstr * /*MI*/, unsigned /*OpNo*/,
568 void removeDeadLocalValueCode(MachineInstr *SavedLastLocalValue);
571 DenseMap<MachineInstr *, unsigned> Orders;
572 MachineInstr *FirstTerminator = nullptr;
581 void sinkLocalValueMaterialization(MachineInstr &LocalMI, unsigned DefReg,
include/llvm/CodeGen/FunctionLoweringInfo.h 135 SmallVector<MachineInstr*, 8> ArgDbgValues;
178 std::vector<std::pair<MachineInstr*, unsigned> > PHINodesToUpdate;
include/llvm/CodeGen/GlobalISel/CSEInfo.h 33 const MachineInstr *MI;
34 explicit UniqueMachineInstr(const MachineInstr *MI) : MI(MI) {}
84 DenseMap<const MachineInstr *, UniqueMachineInstr *> InstrMapping;
102 UniqueMachineInstr *getUniqueInstrForMI(const MachineInstr *MI);
108 MachineInstr *getMachineInstrIfExists(FoldingSetNodeID &ID,
114 void insertInstr(MachineInstr *MI, void *InsertPos = nullptr);
128 void recordNewInstruction(MachineInstr *MI);
131 void handleRecordedInst(MachineInstr *MI);
140 void handleRemoveInst(MachineInstr *MI);
157 void erasingInstr(MachineInstr &MI) override;
158 void createdInstr(MachineInstr &MI) override;
159 void changingInstr(MachineInstr &MI) override;
160 void changedInstr(MachineInstr &MI) override;
193 const GISelInstProfileBuilder &addNodeID(const MachineInstr *MI) const;
include/llvm/CodeGen/GlobalISel/CombinerHelper.h 36 MachineInstr *MI;
62 bool tryCombineCopy(MachineInstr &MI);
63 bool matchCombineCopy(MachineInstr &MI);
64 void applyCombineCopy(MachineInstr &MI);
68 bool isPredecessor(MachineInstr &DefMI, MachineInstr &UseMI);
68 bool isPredecessor(MachineInstr &DefMI, MachineInstr &UseMI);
76 bool dominates(MachineInstr &DefMI, MachineInstr &UseMI);
76 bool dominates(MachineInstr &DefMI, MachineInstr &UseMI);
80 bool tryCombineExtendingLoads(MachineInstr &MI);
81 bool matchCombineExtendingLoads(MachineInstr &MI, PreferredTuple &MatchInfo);
82 void applyCombineExtendingLoads(MachineInstr &MI, PreferredTuple &MatchInfo);
86 bool tryCombineIndexedLoadStore(MachineInstr &MI);
88 bool matchElideBrByInvertingCond(MachineInstr &MI);
89 void applyElideBrByInvertingCond(MachineInstr &MI);
90 bool tryElideBrByInvertingCond(MachineInstr &MI);
100 bool tryCombineConcatVectors(MachineInstr &MI);
108 bool matchCombineConcatVectors(MachineInstr &MI, bool &IsUndef,
112 void applyCombineConcatVectors(MachineInstr &MI, bool IsUndef,
119 bool tryCombineShuffleVector(MachineInstr &MI);
126 bool matchCombineShuffleVector(MachineInstr &MI,
129 void applyCombineShuffleVector(MachineInstr &MI,
162 bool tryCombineMemCpyFamily(MachineInstr &MI, unsigned MaxLen = 0);
166 bool tryCombine(MachineInstr &MI);
170 bool optimizeMemcpy(MachineInstr &MI, Register Dst, Register Src,
173 bool optimizeMemmove(MachineInstr &MI, Register Dst, Register Src,
176 bool optimizeMemset(MachineInstr &MI, Register Dst, Register Val,
183 bool findPostIndexCandidate(MachineInstr &MI, Register &Addr, Register &Base,
190 bool findPreIndexCandidate(MachineInstr &MI, Register &Addr, Register &Base,
include/llvm/CodeGen/GlobalISel/CombinerInfo.h 67 virtual bool combine(GISelChangeObserver &Observer, MachineInstr &MI,
include/llvm/CodeGen/GlobalISel/GISelChangeObserver.h 29 SmallPtrSet<MachineInstr *, 4> ChangingAllUsesOfReg;
35 virtual void erasingInstr(MachineInstr &MI) = 0;
42 virtual void createdInstr(MachineInstr &MI) = 0;
45 virtual void changingInstr(MachineInstr &MI) = 0;
48 virtual void changedInstr(MachineInstr &MI) = 0;
83 void erasingInstr(MachineInstr &MI) override {
87 void createdInstr(MachineInstr &MI) override {
91 void changingInstr(MachineInstr &MI) override {
95 void changedInstr(MachineInstr &MI) override {
100 void MF_HandleInsertion(MachineInstr &MI) override { createdInstr(MI); }
101 void MF_HandleRemoval(MachineInstr &MI) override { erasingInstr(MI); }
include/llvm/CodeGen/GlobalISel/GISelKnownBits.h 46 KnownBits getKnownBits(MachineInstr &MI);
72 static MaybeAlign inferPtrAlignment(const MachineInstr &MI);
75 void erasingInstr(MachineInstr &MI) override{};
76 void createdInstr(MachineInstr &MI) override{};
77 void changingInstr(MachineInstr &MI) override{};
78 void changedInstr(MachineInstr &MI) override{};
include/llvm/CodeGen/GlobalISel/GISelWorkList.h 32 SmallVector<MachineInstr *, N> Worklist;
33 DenseMap<MachineInstr *, unsigned> WorklistMap;
54 void deferred_insert(MachineInstr *I) {
78 void insert(MachineInstr *I) {
85 void remove(const MachineInstr *I) {
102 MachineInstr *pop_back_val() {
104 MachineInstr *I;
include/llvm/CodeGen/GlobalISel/IRTranslator.h 162 SmallVector<std::pair<const PHINode *, SmallVector<MachineInstr *, 1>>, 4>
include/llvm/CodeGen/GlobalISel/InstructionSelector.h 387 virtual bool select(MachineInstr &I) = 0;
405 using RecordedMIVector = SmallVector<MachineInstr *, 4>;
472 virtual bool testMIPredicate_MI(unsigned, const MachineInstr &) const {
481 bool constrainOperandRegToRegClass(MachineInstr &I, unsigned OpIdx,
499 bool isObviouslySafeToFold(MachineInstr &MI, MachineInstr &IntoMI) const;
499 bool isObviouslySafeToFold(MachineInstr &MI, MachineInstr &IntoMI) const;
include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h 109 MachineInstr *NewMI = MRI.getVRegDef(MO.getReg());
include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h 48 bool tryCombineAnyExt(MachineInstr &MI,
49 SmallVectorImpl<MachineInstr *> &DeadInsts) {
67 MachineInstr *ExtMI;
79 auto *SrcMI = MRI.getVRegDef(SrcReg);
93 bool tryCombineZExt(MachineInstr &MI,
94 SmallVectorImpl<MachineInstr *> &DeadInsts) {
120 auto *SrcMI = MRI.getVRegDef(SrcReg);
134 bool tryCombineSExt(MachineInstr &MI,
135 SmallVectorImpl<MachineInstr *> &DeadInsts) {
160 bool tryCombineTrunc(MachineInstr &MI,
161 SmallVectorImpl<MachineInstr *> &DeadInsts) {
170 auto *SrcMI = MRI.getVRegDef(SrcReg);
187 bool tryFoldImplicitDef(MachineInstr &MI,
188 SmallVectorImpl<MachineInstr *> &DeadInsts) {
193 if (MachineInstr *DefMI = getOpcodeDef(TargetOpcode::G_IMPLICIT_DEF,
249 bool tryCombineMerges(MachineInstr &MI,
250 SmallVectorImpl<MachineInstr *> &DeadInsts) {
254 MachineInstr *SrcDef =
261 MachineInstr *MergeI = SrcDef;
375 bool tryCombineExtract(MachineInstr &MI,
376 SmallVectorImpl<MachineInstr *> &DeadInsts) {
392 MachineInstr *MergeI = MRI.getVRegDef(Src);
427 bool tryCombineInstruction(MachineInstr &MI,
428 SmallVectorImpl<MachineInstr *> &DeadInsts,
453 for (auto &Use : MRI.use_instructions(MI.getOperand(0).getReg()))
462 static unsigned getArtifactSrcReg(const MachineInstr &MI) {
483 void markInstAndDefDead(MachineInstr &MI, MachineInstr &DefMI,
483 void markInstAndDefDead(MachineInstr &MI, MachineInstr &DefMI,
484 SmallVectorImpl<MachineInstr *> &DeadInsts) {
496 MachineInstr *PrevMI = &MI;
500 MachineInstr *TmpDef = MRI.getVRegDef(PrevRegSrc);
523 void deleteMarkedDeadInsts(SmallVectorImpl<MachineInstr *> &DeadInsts,
525 for (auto *DeadMI : DeadInsts) {
include/llvm/CodeGen/GlobalISel/Legalizer.h 62 bool combineExtracts(MachineInstr &MI, MachineRegisterInfo &MRI,
include/llvm/CodeGen/GlobalISel/LegalizerHelper.h 63 LegalizeResult legalizeInstrStep(MachineInstr &MI);
66 LegalizeResult libcall(MachineInstr &MI);
70 LegalizeResult narrowScalar(MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy);
75 LegalizeResult widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy);
79 LegalizeResult lower(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
83 LegalizeResult fewerElementsVector(MachineInstr &MI, unsigned TypeIdx,
88 LegalizeResult moreElementsVector(MachineInstr &MI, unsigned TypeIdx,
103 void widenScalarSrc(MachineInstr &MI, LLT WideTy, unsigned OpIdx,
109 void narrowScalarSrc(MachineInstr &MI, LLT NarrowTy, unsigned OpIdx);
114 void widenScalarDst(MachineInstr &MI, LLT WideTy, unsigned OpIdx = 0,
120 void narrowScalarDst(MachineInstr &MI, LLT NarrowTy, unsigned OpIdx,
125 void moreElementsVectorDst(MachineInstr &MI, LLT MoreTy, unsigned OpIdx);
130 void moreElementsVectorSrc(MachineInstr &MI, LLT MoreTy, unsigned OpIdx);
133 widenScalarMergeValues(MachineInstr &MI, unsigned TypeIdx, LLT WideTy);
135 widenScalarUnmergeValues(MachineInstr &MI, unsigned TypeIdx, LLT WideTy);
137 widenScalarExtract(MachineInstr &MI, unsigned TypeIdx, LLT WideTy);
139 widenScalarInsert(MachineInstr &MI, unsigned TypeIdx, LLT WideTy);
174 LegalizeResult fewerElementsVectorImplicitDef(MachineInstr &MI,
179 LegalizeResult fewerElementsVectorBasic(MachineInstr &MI, unsigned TypeIdx,
185 LegalizeResult fewerElementsVectorMultiEltType(MachineInstr &MI,
188 LegalizeResult fewerElementsVectorCasts(MachineInstr &MI, unsigned TypeIdx,
192 fewerElementsVectorCmp(MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy);
195 fewerElementsVectorSelect(MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy);
197 LegalizeResult fewerElementsVectorPhi(MachineInstr &MI,
200 LegalizeResult moreElementsVectorPhi(MachineInstr &MI, unsigned TypeIdx,
203 LegalizeResult fewerElementsVectorUnmergeValues(MachineInstr &MI,
206 LegalizeResult fewerElementsVectorBuildVector(MachineInstr &MI,
211 reduceLoadStoreWidth(MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy);
213 LegalizeResult narrowScalarShiftByConstant(MachineInstr &MI, const APInt &Amt,
216 LegalizeResult narrowScalarShift(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
217 LegalizeResult narrowScalarMul(MachineInstr &MI, LLT Ty);
218 LegalizeResult narrowScalarExtract(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
219 LegalizeResult narrowScalarInsert(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
221 LegalizeResult narrowScalarBasic(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
222 LegalizeResult narrowScalarSelect(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
224 LegalizeResult lowerBitCount(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
226 LegalizeResult lowerU64ToF32BitOps(MachineInstr &MI);
227 LegalizeResult lowerUITOFP(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
228 LegalizeResult lowerSITOFP(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
229 LegalizeResult lowerFPTOUI(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
230 LegalizeResult lowerMinMax(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
231 LegalizeResult lowerFCopySign(MachineInstr &MI, unsigned TypeIdx, LLT Ty);
232 LegalizeResult lowerFMinNumMaxNum(MachineInstr &MI);
233 LegalizeResult lowerFMad(MachineInstr &MI);
234 LegalizeResult lowerUnmergeValues(MachineInstr &MI);
235 LegalizeResult lowerShuffleVector(MachineInstr &MI);
236 LegalizeResult lowerDynStackAlloc(MachineInstr &MI);
237 LegalizeResult lowerExtract(MachineInstr &MI);
238 LegalizeResult lowerInsert(MachineInstr &MI);
239 LegalizeResult lowerSADDO_SSUBO(MachineInstr &MI);
257 MachineInstr &MI);
include/llvm/CodeGen/GlobalISel/LegalizerInfo.h 1140 LegalizeActionStep getAction(const MachineInstr &MI,
1146 bool isLegal(const MachineInstr &MI, const MachineRegisterInfo &MRI) const;
1147 bool isLegalOrCustom(const MachineInstr &MI,
1150 virtual bool legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI,
1156 virtual bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
1350 const MachineInstr *machineFunctionIsIllegal(const MachineFunction &MF);
include/llvm/CodeGen/GlobalISel/Localizer.h 52 bool shouldLocalize(const MachineInstr &MI);
58 static bool isLocalUse(MachineOperand &MOUse, const MachineInstr &Def,
64 typedef SmallSetVector<MachineInstr *, 32> LocalizedSetVecT;
include/llvm/CodeGen/GlobalISel/MIPatternMatch.h 125 static bool bind(const MachineRegisterInfo &MRI, MachineInstr *&MI,
164 inline bind_ty<MachineInstr *> m_MInstr(MachineInstr *&MI) { return MI; }
164 inline bind_ty<MachineInstr *> m_MInstr(MachineInstr *&MI) { return MI; }
180 MachineInstr *TmpMI;
248 MachineInstr *TmpMI;
include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h 233 void recordInsertion(MachineInstr *MI) const;
239 MachineIRBuilder(MachineInstr &MI) : MachineIRBuilder(*MI.getMF()) {
313 void setInstr(MachineInstr &MI);
include/llvm/CodeGen/GlobalISel/RegBankSelect.h 206 MachineInstr &Instr;
226 InstrInsertPoint(MachineInstr &Instr, bool Before = true);
355 RepairingPlacement(MachineInstr &MI, unsigned OpIdx,
372 void addInsertPoint(MachineInstr &MI, bool Before);
517 bool assignInstr(MachineInstr &MI);
580 findBestMapping(MachineInstr &MI,
592 computeMapping(MachineInstr &MI,
613 bool applyMapping(MachineInstr &MI,
include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h 262 bool verify(const MachineInstr &MI) const;
291 MachineInstr &MI;
321 OperandsMapper(MachineInstr &MI, const InstructionMapping &InstrMapping,
327 MachineInstr &getMI() const { return MI; }
457 const InstructionMapping &getInstrMappingImpl(const MachineInstr &MI) const;
544 getRegBankFromConstraints(const MachineInstr &MI, unsigned OpIdx,
680 getInstrMapping(const MachineInstr &MI) const;
685 getInstrAlternativeMappings(const MachineInstr &MI) const;
703 InstructionMappings getInstrPossibleMappings(const MachineInstr &MI) const;
include/llvm/CodeGen/GlobalISel/Utils.h 62 MachineInstr &InsertPt,
80 MachineInstr &InsertPt, const MCInstrDesc &II,
92 bool constrainSelectedInstRegOperands(MachineInstr &I,
98 bool isTriviallyDead(const MachineInstr &MI, const MachineRegisterInfo &MRI);
109 const MachineInstr &MI);
138 MachineInstr *getOpcodeDef(unsigned Opcode, Register Reg,
144 MachineInstr *getDefIgnoringCopies(Register Reg,
include/llvm/CodeGen/LexicalScopes.h 39 using InsnRange = std::pair<const MachineInstr *, const MachineInstr *>;
39 using InsnRange = std::pair<const MachineInstr *, const MachineInstr *>;
72 void openInsnRange(const MachineInstr *MI) {
82 void extendInsnRange(const MachineInstr *MI) {
131 const MachineInstr *LastInsn = nullptr; // Last instruction of this scope.
132 const MachineInstr *FirstInsn = nullptr; // First instruction of this scope.
223 DenseMap<const MachineInstr *, LexicalScope *> &M);
227 DenseMap<const MachineInstr *, LexicalScope *> &M);
include/llvm/CodeGen/LiveIntervals.h 107 const MachineInstr &MI);
153 MachineInstr &startInst);
162 SmallVectorImpl<MachineInstr*> *dead = nullptr);
221 bool isNotInMIMap(const MachineInstr &Instr) const {
226 SlotIndex getInstructionIndex(const MachineInstr &Instr) const {
231 MachineInstr* getInstructionFromIndex(SlotIndex index) const {
266 SlotIndex InsertMachineInstrInMaps(MachineInstr &MI) {
276 void RemoveMachineInstrFromMaps(MachineInstr &MI) {
280 SlotIndex ReplaceMachineInstrInMaps(MachineInstr &MI, MachineInstr &NewMI) {
280 SlotIndex ReplaceMachineInstrInMaps(MachineInstr &MI, MachineInstr &NewMI) {
311 void handleMove(MachineInstr &MI, bool UpdateFlags = false);
321 void handleMoveIntoBundle(MachineInstr &MI, MachineInstr &BundleStart,
321 void handleMoveIntoBundle(MachineInstr &MI, MachineInstr &BundleStart,
463 SmallVectorImpl<MachineInstr*> *dead);
include/llvm/CodeGen/LivePhysRegs.h 112 void removeDefs(const MachineInstr &MI);
115 void addUses(const MachineInstr &MI);
120 void stepBackward(const MachineInstr &MI);
128 void stepForward(const MachineInstr &MI,
include/llvm/CodeGen/LiveRangeEdit.h 55 virtual void LRE_WillEraseInstruction(MachineInstr *MI) {}
86 SmallPtrSet<MachineInstr *, 32> *DeadRemats;
101 bool allUsesAvailableAt(const MachineInstr *OrigMI, SlotIndex OrigIdx,
106 bool foldAsLoad(LiveInterval *LI, SmallVectorImpl<MachineInstr *> &Dead);
112 void eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink,
141 SmallPtrSet<MachineInstr *, 32> *deadRemats = nullptr)
197 bool checkRematerializable(VNInfo *VNI, const MachineInstr *DefMI,
203 MachineInstr *OrigMI = nullptr; // Instruction defining OrigVNI. It contains
245 void eliminateDeadDefs(SmallVectorImpl<MachineInstr *> &Dead,
include/llvm/CodeGen/LiveRegUnits.h 47 static void accumulateUsedDefed(const MachineInstr &MI,
128 void stepBackward(const MachineInstr &MI);
133 void accumulate(const MachineInstr &MI);
include/llvm/CodeGen/LiveVariables.h 88 std::vector<MachineInstr*> Kills;
93 bool removeKill(MachineInstr &MI) {
94 std::vector<MachineInstr *>::iterator I = find(Kills, &MI);
102 MachineInstr *findKill(const MachineBasicBlock *MBB) const;
135 std::vector<MachineInstr *> PhysRegDef;
140 std::vector<MachineInstr *> PhysRegUse;
146 DenseMap<MachineInstr*, unsigned> DistanceMap;
151 bool HandlePhysRegKill(unsigned Reg, MachineInstr *MI);
156 void HandlePhysRegUse(unsigned Reg, MachineInstr &MI);
157 void HandlePhysRegDef(unsigned Reg, MachineInstr *MI,
159 void UpdatePhysRegDefs(MachineInstr &MI, SmallVectorImpl<unsigned> &Defs);
163 MachineInstr *FindLastRefOrPartRef(unsigned Reg);
168 MachineInstr *FindLastPartialDef(unsigned Reg,
177 void runOnInstr(MachineInstr &MI, SmallVectorImpl<unsigned> &Defs);
186 bool RegisterDefIsDead(MachineInstr &MI, unsigned Reg) const;
193 void replaceKillInstruction(unsigned Reg, MachineInstr &OldMI,
194 MachineInstr &NewMI);
200 void addVirtualRegisterKilled(unsigned IncomingReg, MachineInstr &MI,
210 bool removeVirtualRegisterKilled(unsigned reg, MachineInstr &MI) {
231 void removeVirtualRegistersKilled(MachineInstr &MI);
236 void addVirtualRegisterDead(unsigned IncomingReg, MachineInstr &MI,
246 bool removeVirtualRegisterDead(unsigned reg, MachineInstr &MI) {
279 void HandleVirtRegDef(unsigned reg, MachineInstr &MI);
280 void HandleVirtRegUse(unsigned reg, MachineBasicBlock *MBB, MachineInstr &MI);
include/llvm/CodeGen/MachineBasicBlock.h 55 simple_ilist<MachineInstr, ilist_sentinel_tracking<true>>::iterator;
58 void addNodeToList(MachineInstr *N);
59 void removeNodeFromList(MachineInstr *N);
62 void deleteNode(MachineInstr *MI);
81 using Instructions = ilist<MachineInstr, ilist_sentinel_tracking<true>>;
181 using iterator = MachineInstrBundleIterator<MachineInstr>;
182 using const_iterator = MachineInstrBundleIterator<const MachineInstr>;
183 using reverse_iterator = MachineInstrBundleIterator<MachineInstr, true>;
185 MachineInstrBundleIterator<const MachineInstr, true>;
190 MachineInstr &instr_front() { return Insts.front(); }
191 MachineInstr &instr_back() { return Insts.back(); }
192 const MachineInstr &instr_front() const { return Insts.front(); }
193 const MachineInstr &instr_back() const { return Insts.back(); }
195 MachineInstr &front() { return Insts.front(); }
196 MachineInstr &back() { return *--end(); }
197 const MachineInstr &front() const { return Insts.front(); }
198 const MachineInstr &back() const { return *--end(); }
601 void push_back(MachineInstr *MI) { Insts.push_back(MI); }
620 iterator insert(iterator I, MachineInstr *MI) {
629 iterator insertAfter(iterator I, MachineInstr *MI) {
679 iterator erase(MachineInstr *I) {
688 MachineInstr *remove(MachineInstr *I) {
688 MachineInstr *remove(MachineInstr *I) {
698 MachineInstr *remove_instr(MachineInstr *I);
698 MachineInstr *remove_instr(MachineInstr *I);
include/llvm/CodeGen/MachineDominators.h 132 bool dominates(const MachineInstr *A, const MachineInstr *B) const {
132 bool dominates(const MachineInstr *A, const MachineInstr *B) const {
include/llvm/CodeGen/MachineFunction.h 263 Recycler<MachineInstr> InstructionRecycler;
377 virtual void MF_HandleInsertion(MachineInstr &MI) = 0;
379 virtual void MF_HandleRemoval(MachineInstr &MI) = 0;
400 using CallSiteInfoMap = DenseMap<const MachineInstr *, CallSiteInfo>;
416 void handleInsertion(MachineInstr &MI);
417 void handleRemoval(MachineInstr &MI);
721 MachineInstr *CreateMachineInstr(const MCInstrDesc &MCID, const DebugLoc &DL,
731 MachineInstr *CloneMachineInstr(const MachineInstr *Orig);
731 MachineInstr *CloneMachineInstr(const MachineInstr *Orig);
738 MachineInstr &CloneMachineInstrBundle(MachineBasicBlock &MBB,
739 MachineBasicBlock::iterator InsertBefore, const MachineInstr &Orig);
742 void DeleteMachineInstr(MachineInstr *MI);
803 MachineInstr::ExtraInfo *createMIExtraInfo(
984 void addCallArgsForwardingRegs(const MachineInstr *CallI,
1000 void moveCallSiteInfo(const MachineInstr *Old,
1001 const MachineInstr *New);
1005 void eraseCallSiteInfo(const MachineInstr *MI);
1010 void copyCallSiteInfo(const MachineInstr *Old,
1011 const MachineInstr *New);
include/llvm/CodeGen/MachineInstr.h 64 : public ilist_node_with_parent<MachineInstr, MachineBasicBlock,
254 MachineInstr(MachineFunction &, const MachineInstr &);
266 MachineInstr(const MachineInstr &) = delete;
267 MachineInstr &operator=(const MachineInstr &) = delete;
267 MachineInstr &operator=(const MachineInstr &) = delete;
891 getFlag(MachineInstr::MIFlag::FPExcept);
1003 bool isIdenticalTo(const MachineInstr &Other,
1011 MachineInstr *removeFromParent();
1018 MachineInstr *removeFromBundle();
1452 bool mayAlias(AAResults *AA, const MachineInstr &Other, bool UseTBAA) const;
1503 void copyImplicitOps(MachineFunction &MF, const MachineInstr &MI);
1596 void cloneMemRefs(MachineFunction &MF, const MachineInstr &MI);
1606 ArrayRef<const MachineInstr *> MIs);
1624 void cloneInstrSymbols(MachineFunction &MF, const MachineInstr &MI);
1635 uint16_t mergeFlagsWith(const MachineInstr& Other) const;
1655 void collectDebugValues(SmallVectorImpl<MachineInstr *> &DbgValues);
1704 struct MachineInstrExpressionTrait : DenseMapInfo<MachineInstr*> {
1705 static inline MachineInstr *getEmptyKey() {
1709 static inline MachineInstr *getTombstoneKey() {
1713 static unsigned getHashValue(const MachineInstr* const &MI);
1715 static bool isEqual(const MachineInstr* const &LHS,
1716 const MachineInstr* const &RHS) {
1720 return LHS->isIdenticalTo(*RHS, MachineInstr::IgnoreVRegDefs);
1727 inline raw_ostream& operator<<(raw_ostream &OS, const MachineInstr &MI) {
include/llvm/CodeGen/MachineInstrBuilder.h 62 MachineInstr *MI = nullptr;
69 MachineInstrBuilder(MachineFunction &F, MachineInstr *I) : MF(&F), MI(I) {}
74 operator MachineInstr*() const { return MI; }
75 MachineInstr *operator->() const { return MI; }
80 MachineInstr *getInstr() const { return MI; }
204 const MachineInstrBuilder &cloneMemRefs(const MachineInstr &OtherMI) const {
210 cloneMergedMemRefs(ArrayRef<const MachineInstr *> OtherMIs) const {
269 const MachineInstrBuilder &setMIFlag(MachineInstr::MIFlag Flag) const {
303 copyImplicitOps(const MachineInstr &OtherMI) const {
337 MachineInstr *MI = MF.CreateMachineInstr(MCID, DL);
353 MachineInstr *MI = MF.CreateMachineInstr(MCID, DL);
358 inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB, MachineInstr &I,
368 inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB, MachineInstr *I,
382 MachineInstr *MI = MF.CreateMachineInstr(MCID, DL);
392 MachineInstr *MI = MF.CreateMachineInstr(MCID, DL);
397 inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB, MachineInstr &I,
407 inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB, MachineInstr *I,
462 MachineInstr *buildDbgValueForSpill(MachineBasicBlock &BB,
464 const MachineInstr &Orig, int FrameIndex);
468 void updateDbgValueForSpill(MachineInstr &Orig, int FrameIndex);
530 MachineInstr &MI = *B;
538 explicit MIBundleBuilder(MachineInstr *MI)
572 MI->setFlag(MachineInstr::BundledPred);
573 MI->setFlag(MachineInstr::BundledSucc);
579 MIBundleBuilder &prepend(MachineInstr *MI) {
585 MIBundleBuilder &append(MachineInstr *MI) {
include/llvm/CodeGen/MachineInstrBundle.h 95 MachineInstr::mop_iterator OpI, OpE;
116 explicit MachineOperandIteratorBase(MachineInstr &MI, bool WholeBundle) {
209 SmallVectorImpl<std::pair<MachineInstr*, unsigned> > *Ops = nullptr);
224 MIOperands(MachineInstr &MI) : MachineOperandIteratorBase(MI, false) {}
233 ConstMIOperands(const MachineInstr &MI)
244 MIBundleOperands(MachineInstr &MI) : MachineOperandIteratorBase(MI, true) {}
254 ConstMIBundleOperands(const MachineInstr &MI)
include/llvm/CodeGen/MachineInstrBundleIterator.h 26 using list_type = simple_ilist<T, ilist_sentinel_tracking<true>>;
32 using list_type = simple_ilist<T, ilist_sentinel_tracking<true>>;
38 using list_type = simple_ilist<T, ilist_sentinel_tracking<true>>;
44 using list_type = simple_ilist<T, ilist_sentinel_tracking<true>>;
109 using Traits = MachineInstrBundleIteratorTraits<Ty, IsReverse>;
129 using reverse_iterator = MachineInstrBundleIterator<Ty, !IsReverse>;
154 const MachineInstrBundleIterator<OtherTy, IsReverse> &I,
155 typename std::enable_if<std::is_convertible<OtherTy *, Ty *>::value,
155 typename std::enable_if<std::is_convertible<OtherTy *, Ty *>::value,
170 const MachineInstrBundleIterator<Ty, !IsReverse> &I)
include/llvm/CodeGen/MachineOperand.h 163 MachineInstr *ParentMI;
235 MachineInstr *getParent() { return ParentMI; }
236 const MachineInstr *getParent() const { return ParentMI; }
include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h 41 MachineArgument(StringRef Key, const MachineInstr &MI);
include/llvm/CodeGen/MachinePipeliner.h 79 MachineInstr *LoopInductionVar = nullptr;
80 MachineInstr *LoopCompare = nullptr;
146 using InstrMapTy = DenseMap<MachineInstr *, MachineInstr *>;
146 using InstrMapTy = DenseMap<MachineInstr *, MachineInstr *>;
153 DenseMap<MachineInstr*, MachineInstr *> NewMIs;
153 DenseMap<MachineInstr*, MachineInstr *> NewMIs;
263 void applyInstrChange(MachineInstr *MI, SMSchedule &Schedule);
302 bool computeDelta(MachineInstr &MI, unsigned &Delta);
303 MachineInstr *findDefInLoop(unsigned Reg);
304 bool canUseLastOffsetValue(MachineInstr *MI, unsigned &BasePos,
463 bool canReserveResources(const MachineInstr &MI) const;
467 void reserveResources(const MachineInstr &MI);
582 bool isLoopCarried(SwingSchedulerDAG *SSD, MachineInstr &Phi);
583 bool isLoopCarriedDefOfUse(SwingSchedulerDAG *SSD, MachineInstr *Def,
include/llvm/CodeGen/MachineRegionInfo.h 40 using InstT = MachineInstr;
include/llvm/CodeGen/MachineRegisterInfo.h 596 MachineInstr *getVRegDef(unsigned Reg) const;
601 MachineInstr *getUniqueVRegDef(unsigned Reg) const;
824 ArrayRef<MachineInstr*> Users) const {
825 for (MachineInstr *MI : Users) {
971 : public std::iterator<std::forward_iterator_tag, MachineInstr, ptrdiff_t> {
1009 MachineInstr, ptrdiff_t>::reference;
1011 MachineInstr, ptrdiff_t>::pointer;
1031 MachineInstr *P = Op->getParent();
1077 : public std::iterator<std::forward_iterator_tag, MachineInstr, ptrdiff_t> {
1115 MachineInstr, ptrdiff_t>::reference;
1117 MachineInstr, ptrdiff_t>::pointer;
1137 MachineInstr *P = Op->getParent();
1156 MachineInstr &operator*() const {
1163 MachineInstr *operator->() const { return &operator*(); }
include/llvm/CodeGen/MachineSSAUpdater.h 49 SmallVectorImpl<MachineInstr*> *InsertedPHIs;
58 SmallVectorImpl<MachineInstr*> *NewPHI = nullptr);
include/llvm/CodeGen/MachineScheduler.h 339 void moveInstruction(MachineInstr *MI, MachineBasicBlock::iterator InsertPos);
include/llvm/CodeGen/MachineTraceMetrics.h 78 const MachineInstr *MI = nullptr;
298 InstrCycles getInstrCycles(const MachineInstr &MI) const {
305 unsigned getInstrSlack(const MachineInstr &MI) const;
309 unsigned getPHIDepth(const MachineInstr &PHI) const;
314 bool isDepInTrace(const MachineInstr &DefMI,
315 const MachineInstr &UseMI) const;
325 DenseMap<const MachineInstr*, InstrCycles> Cycles;
335 void addLiveIns(const MachineInstr *DefMI, unsigned DefOp,
364 void updateDepth(TraceBlockInfo &TBI, const MachineInstr&,
366 void updateDepth(const MachineBasicBlock *, const MachineInstr&,
include/llvm/CodeGen/MacroFusion.h 32 const MachineInstr *FirstMI,
33 const MachineInstr &SecondMI)>;
include/llvm/CodeGen/ModuloSchedule.h 86 std::vector<MachineInstr *> ScheduledInstrs;
89 DenseMap<MachineInstr *, int> Cycle;
92 DenseMap<MachineInstr *, int> Stage;
106 std::vector<MachineInstr *> ScheduledInstrs,
107 DenseMap<MachineInstr *, int> Cycle,
108 DenseMap<MachineInstr *, int> Stage)
133 int getStage(MachineInstr *MI) {
139 int getCycle(MachineInstr *MI) {
145 ArrayRef<MachineInstr *> getInstructions() { return ScheduledInstrs; }
155 using InstrChangesTy = DenseMap<MachineInstr *, std::pair<unsigned, int64_t>>;
160 using InstrMapTy = DenseMap<MachineInstr *, MachineInstr *>;
160 using InstrMapTy = DenseMap<MachineInstr *, MachineInstr *>;
204 bool computeDelta(MachineInstr &MI, unsigned &Delta);
205 void updateMemOperands(MachineInstr &NewMI, MachineInstr &OldMI,
205 void updateMemOperands(MachineInstr &NewMI, MachineInstr &OldMI,
207 MachineInstr *cloneInstr(MachineInstr *OldMI, unsigned CurStageNum,
207 MachineInstr *cloneInstr(MachineInstr *OldMI, unsigned CurStageNum,
209 MachineInstr *cloneAndChangeInstr(MachineInstr *OldMI, unsigned CurStageNum,
209 MachineInstr *cloneAndChangeInstr(MachineInstr *OldMI, unsigned CurStageNum,
211 void updateInstruction(MachineInstr *NewMI, bool LastDef,
214 MachineInstr *findDefInLoop(unsigned Reg);
222 MachineInstr *Phi, unsigned OldReg,
224 bool isLoopCarried(MachineInstr &Phi);
296 DenseMap<MachineInstr *, MachineInstr *> CanonicalMIs;
296 DenseMap<MachineInstr *, MachineInstr *> CanonicalMIs;
297 DenseMap<std::pair<MachineBasicBlock *, MachineInstr *>, MachineInstr *>
297 DenseMap<std::pair<MachineBasicBlock *, MachineInstr *>, MachineInstr *>
332 void rewriteUsesOf(MachineInstr *MI);
340 unsigned getStage(MachineInstr *MI) {
include/llvm/CodeGen/ReachingDefAnalysis.h 59 DenseMap<MachineInstr *, int> InstIds;
94 int getReachingDef(MachineInstr *MI, int PhysReg);
98 int getClearance(MachineInstr *MI, MCPhysReg PhysReg);
112 void processDefs(MachineInstr *);
include/llvm/CodeGen/RegisterPressure.h 180 void collect(const MachineInstr &MI, const TargetRegisterInfo &TRI,
186 void detectDeadDefs(const MachineInstr &MI, const LiveIntervals &LIS);
194 MachineInstr *AddFlagsMI = nullptr);
478 void getMaxUpwardPressureDelta(const MachineInstr *MI,
484 void getUpwardPressureDelta(const MachineInstr *MI,
494 void getMaxDownwardPressureDelta(const MachineInstr *MI,
502 void getMaxPressureDelta(const MachineInstr *MI,
516 void getUpwardPressure(const MachineInstr *MI,
521 void getDownwardPressure(const MachineInstr *MI,
525 void getPressureAfterInst(const MachineInstr *MI,
558 void bumpUpwardPressure(const MachineInstr *MI);
559 void bumpDownwardPressure(const MachineInstr *MI);
include/llvm/CodeGen/RegisterScavenging.h 57 const MachineInstr *Restore = nullptr;
include/llvm/CodeGen/ScheduleDAG.h 247 MachineInstr *Instr = nullptr; ///< Alternatively, a MachineInstr.
319 SUnit(MachineInstr *instr, unsigned nodenum)
366 void setInstr(MachineInstr *MI) {
373 MachineInstr *getInstr() const {
include/llvm/CodeGen/ScheduleDAGInstrs.h 158 DenseMap<MachineInstr*, SUnit*> MISUnitMap;
244 std::vector<std::pair<MachineInstr *, MachineInstr *>>;
244 std::vector<std::pair<MachineInstr *, MachineInstr *>>;
249 MachineInstr *FirstDbgValue = nullptr;
278 SUnit *newSUnit(MachineInstr *MI);
281 SUnit *getSUnit(MachineInstr *MI) const;
373 void toggleKillFlag(MachineInstr &MI, MachineOperand &MO);
384 inline SUnit *ScheduleDAGInstrs::newSUnit(MachineInstr *MI) {
395 inline SUnit *ScheduleDAGInstrs::getSUnit(MachineInstr *MI) const {
396 DenseMap<MachineInstr*, SUnit*>::const_iterator I = MISUnitMap.find(MI);
include/llvm/CodeGen/ScheduleHazardRecognizer.h 75 virtual void EmitInstruction(MachineInstr *) {}
88 virtual unsigned PreEmitNoops(MachineInstr *) {
include/llvm/CodeGen/SlotIndexes.h 47 MachineInstr *mi;
51 IndexListEntry(MachineInstr *mi, unsigned index) : mi(mi), index(index) {}
53 MachineInstr* getInstr() const { return mi; }
54 void setInstr(MachineInstr *mi) {
324 using Mi2IndexMap = DenseMap<const MachineInstr *, SlotIndex>;
334 IndexListEntry* createEntry(MachineInstr *mi, unsigned index) {
385 bool hasIndex(const MachineInstr &instr) const {
390 SlotIndex getInstructionIndex(const MachineInstr &MI) const {
395 const MachineInstr &BundleNonDebug =
406 MachineInstr* getInstructionFromIndex(SlotIndex index) const {
425 SlotIndex getIndexBefore(const MachineInstr &MI) const {
442 SlotIndex getIndexAfter(const MachineInstr &MI) const {
518 if (MachineInstr *MI = getInstructionFromIndex(index))
538 SlotIndex insertMachineInstrInMaps(MachineInstr &MI, bool Late = false) {
581 void removeMachineInstrFromMaps(MachineInstr &MI);
586 void removeSingleMachineInstrFromMaps(MachineInstr &MI);
591 SlotIndex replaceMachineInstrInMaps(MachineInstr &MI, MachineInstr &NewMI) {
591 SlotIndex replaceMachineInstrInMaps(MachineInstr &MI, MachineInstr &NewMI) {
include/llvm/CodeGen/StackMaps.h 41 const MachineInstr* MI;
44 explicit StackMapOpers(const MachineInstr *MI);
82 const MachineInstr *MI;
95 explicit PatchPointOpers(const MachineInstr *MI);
168 explicit StatepointOpers(const MachineInstr *MI) : MI(MI) {}
190 const MachineInstr *MI;
269 void recordStackMap(const MachineInstr &MI);
272 void recordPatchPoint(const MachineInstr &MI);
275 void recordStatepoint(const MachineInstr &MI);
296 MachineInstr::const_mop_iterator
297 parseOperand(MachineInstr::const_mop_iterator MOI,
298 MachineInstr::const_mop_iterator MOE, LocationVec &Locs,
314 void recordStackMapOpers(const MachineInstr &MI, uint64_t ID,
315 MachineInstr::const_mop_iterator MOI,
316 MachineInstr::const_mop_iterator MOE,
include/llvm/CodeGen/TailDuplicator.h 94 void processPHI(MachineInstr *MI, MachineBasicBlock *TailBB,
99 void duplicateInstruction(MachineInstr *MI, MachineBasicBlock *TailBB,
110 SmallVectorImpl<MachineInstr *> &Copies);
115 SmallVectorImpl<MachineInstr *> &Copies);
118 SmallVectorImpl<MachineInstr *> &Copies);
include/llvm/CodeGen/TargetInstrInfo.h 98 bool isTriviallyReMaterializable(const MachineInstr &MI,
114 virtual bool isReallyTriviallyReMaterializable(const MachineInstr &MI,
134 virtual MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
134 virtual MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
157 bool isReallyTriviallyReMaterializableGeneric(const MachineInstr &MI,
170 bool isFrameInstr(const MachineInstr &I) const {
176 bool isFrameSetup(const MachineInstr &I) const {
188 int64_t getFrameSize(const MachineInstr &I) const {
197 int64_t getFrameTotalSize(const MachineInstr &I) const {
213 virtual int getSPAdjust(const MachineInstr &MI) const;
220 virtual bool isCoalescableExtInstr(const MachineInstr &MI, unsigned &SrcReg,
230 virtual unsigned isLoadFromStackSlot(const MachineInstr &MI,
239 virtual unsigned isLoadFromStackSlot(const MachineInstr &MI,
248 virtual unsigned isLoadFromStackSlotPostFE(const MachineInstr &MI,
260 const MachineInstr &MI,
268 virtual unsigned isStoreToStackSlot(const MachineInstr &MI,
277 virtual unsigned isStoreToStackSlot(const MachineInstr &MI,
286 virtual unsigned isStoreToStackSlotPostFE(const MachineInstr &MI,
298 const MachineInstr &MI,
304 virtual bool isStackSlotCopy(const MachineInstr &MI, int &DestFrameIndex,
328 virtual unsigned getInstSizeInBytes(const MachineInstr &MI) const {
336 virtual bool isAsCheapAsAMove(const MachineInstr &MI) const {
345 virtual bool shouldSink(const MachineInstr &MI) const { return true; }
362 virtual MachineInstr &duplicate(MachineBasicBlock &MBB,
376 virtual MachineInstr *convertToThreeAddress(MachineFunction::iterator &MFI,
404 MachineInstr *
405 commuteInstruction(MachineInstr &MI, bool NewMI = false,
426 virtual bool findCommutedOpIndices(const MachineInstr &MI,
477 getRegSequenceInputs(const MachineInstr &MI, unsigned DefIdx,
495 bool getExtractSubregInputs(const MachineInstr &MI, unsigned DefIdx,
515 bool getInsertSubregInputs(const MachineInstr &MI, unsigned DefIdx,
524 virtual bool produceSameValue(const MachineInstr &MI0,
525 const MachineInstr &MI1,
536 virtual MachineBasicBlock *getBranchDestBlock(const MachineInstr &MI) const {
605 MachineInstr *ConditionDef = nullptr;
676 virtual bool shouldIgnoreForPipelining(const MachineInstr *MI) const = 0;
714 virtual bool analyzeLoop(MachineLoop &L, MachineInstr *&IndVarInst,
715 MachineInstr *&CmpInst) const {
725 MachineInstr *IndVar, MachineInstr &Cmp,
725 MachineInstr *IndVar, MachineInstr &Cmp,
727 SmallVectorImpl<MachineInstr *> &PrevInsts,
791 virtual unsigned predictBranchSizeForIfCvt(MachineInstr &MI) const {
875 virtual bool analyzeSelect(const MachineInstr &MI,
898 virtual MachineInstr *optimizeSelect(MachineInstr &MI,
898 virtual MachineInstr *optimizeSelect(MachineInstr &MI,
899 SmallPtrSetImpl<MachineInstr *> &NewMIs,
925 virtual bool isCopyInstrImpl(const MachineInstr &MI,
937 bool isCopyInstr(const MachineInstr &MI, const MachineOperand *&Source,
978 virtual bool expandPostRAPseudo(MachineInstr &MI) const { return false; }
1002 MachineInstr *foldMemoryOperand(MachineInstr &MI, ArrayRef<unsigned> Ops,
1002 MachineInstr *foldMemoryOperand(MachineInstr &MI, ArrayRef<unsigned> Ops,
1009 MachineInstr *foldMemoryOperand(MachineInstr &MI, ArrayRef<unsigned> Ops,
1009 MachineInstr *foldMemoryOperand(MachineInstr &MI, ArrayRef<unsigned> Ops,
1010 MachineInstr &LoadMI,
1021 MachineInstr &Root,
1034 bool isReassociationCandidate(const MachineInstr &Inst, bool &Commuted) const;
1037 virtual bool isAssociativeAndCommutative(const MachineInstr &Inst) const {
1042 virtual bool hasReassociableOperands(const MachineInstr &Inst,
1046 bool hasReassociableSibling(const MachineInstr &Inst, bool &Commuted) const;
1059 MachineInstr &Root, MachineCombinerPattern Pattern,
1060 SmallVectorImpl<MachineInstr *> &InsInstrs,
1061 SmallVectorImpl<MachineInstr *> &DelInstrs,
1066 void reassociateOps(MachineInstr &Root, MachineInstr &Prev,
1066 void reassociateOps(MachineInstr &Root, MachineInstr &Prev,
1068 SmallVectorImpl<MachineInstr *> &InsInstrs,
1069 SmallVectorImpl<MachineInstr *> &DelInstrs,
1074 virtual void setSpecialOperandAttr(MachineInstr &OldMI1, MachineInstr &OldMI2,
1074 virtual void setSpecialOperandAttr(MachineInstr &OldMI1, MachineInstr &OldMI2,
1075 MachineInstr &NewMI1,
1076 MachineInstr &NewMI2) const {}
1091 virtual MachineInstr *
1092 foldMemoryOperandImpl(MachineFunction &MF, MachineInstr &MI,
1105 virtual MachineInstr *foldMemoryOperandImpl(
1106 MachineFunction &MF, MachineInstr &MI, ArrayRef<unsigned> Ops,
1121 const MachineInstr &MI, unsigned DefIdx,
1134 virtual bool getExtractSubregLikeInputs(const MachineInstr &MI,
1149 getInsertSubregLikeInputs(const MachineInstr &MI, unsigned DefIdx,
1167 unfoldMemoryOperand(MachineFunction &MF, MachineInstr &MI, unsigned Reg,
1169 SmallVectorImpl<MachineInstr *> &NewMIs) const {
1216 virtual bool getMemOperandWithOffset(const MachineInstr &MI,
1226 virtual bool getBaseAndOffsetPosition(const MachineInstr &MI,
1233 virtual bool getIncrementValue(const MachineInstr &MI, int &Value) const {
1264 virtual bool isPostIncrement(const MachineInstr &MI) const { return false; }
1267 virtual bool isPredicated(const MachineInstr &MI) const { return false; }
1271 virtual bool isUnpredicatedTerminator(const MachineInstr &MI) const;
1274 virtual bool isUnconditionalTailCall(const MachineInstr &MI) const {
1280 const MachineInstr &TailCall) const {
1287 const MachineInstr &TailCall) const {
1293 virtual bool PredicateInstruction(MachineInstr &MI,
1306 virtual bool DefinesPredicate(MachineInstr &MI,
1314 virtual bool isPredicable(const MachineInstr &MI) const {
1326 virtual bool isSchedulingBoundary(const MachineInstr &MI,
1369 virtual bool analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
1377 virtual bool optimizeCompareInstr(MachineInstr &CmpInstr, unsigned SrcReg,
1382 virtual bool optimizeCondBranch(MachineInstr &MI) const { return false; }
1391 virtual MachineInstr *optimizeLoadInstr(MachineInstr &MI,
1391 virtual MachineInstr *optimizeLoadInstr(MachineInstr &MI,
1394 MachineInstr *&DefMI) const {
1404 virtual bool FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
1404 virtual bool FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
1414 const MachineInstr &MI) const;
1437 const MachineInstr &DefMI, unsigned DefIdx,
1438 const MachineInstr &UseMI,
1445 const MachineInstr &MI,
1448 virtual unsigned getPredicationCost(const MachineInstr &MI) const;
1455 const MachineInstr &DefMI) const;
1458 const MachineInstr &DefMI) const;
1470 const MachineInstr &DefMI, unsigned DefIdx,
1471 const MachineInstr &UseMI,
1479 const MachineInstr &DefMI,
1483 virtual bool verifyInstruction(const MachineInstr &MI,
1508 getExecutionDomain(const MachineInstr &MI) const {
1516 virtual void setExecutionDomain(MachineInstr &MI, unsigned Domain) const {}
1558 getPartialRegUpdateClearance(const MachineInstr &MI, unsigned OpNum,
1578 virtual unsigned getUndefRegClearance(const MachineInstr &MI, unsigned &OpNum,
1601 virtual void breakPartialRegDependency(MachineInstr &MI, unsigned OpNum,
1622 areMemAccessesTriviallyDisjoint(const MachineInstr &MIa,
1623 const MachineInstr &MIb) const {
1689 virtual bool isTailCall(const MachineInstr &Inst) const {
1696 virtual bool isBasicBlockPrologue(const MachineInstr &MI) const {
1703 virtual MachineInstr *createPHIDestinationCopy(
1713 virtual MachineInstr *createPHISourceCopy(MachineBasicBlock &MBB,
1780 describeLoadedValue(const MachineInstr &MI) const;
include/llvm/CodeGen/TargetLowering.h 2924 MachineBasicBlock *emitPatchPoint(MachineInstr &MI,
2929 MachineBasicBlock *emitXRayCustomEvent(MachineInstr &MI,
2934 MachineBasicBlock *emitXRayTypedEvent(MachineInstr &MI,
2990 virtual bool isIndexingLegal(MachineInstr &MI, Register Base, Register Offset,
4204 EmitInstrWithCustomInserter(MachineInstr &MI, MachineBasicBlock *MBB) const;
4210 virtual void AdjustInstrPostInstrSelection(MachineInstr &MI,
include/llvm/CodeGen/TargetRegisterInfo.h 872 virtual int64_t getFrameIndexInstrOffset(const MachineInstr *MI,
881 virtual bool needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const {
896 virtual void resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
903 virtual bool isFrameOffsetLegal(const MachineInstr *MI, unsigned BaseReg,
946 virtual bool shouldCoalesce(MachineInstr *MI,
include/llvm/CodeGen/TargetSchedule.h 56 const MCSchedClassDesc *resolveSchedClass(const MachineInstr *MI) const;
98 bool mustBeginGroup(const MachineInstr *MI,
101 bool mustEndGroup(const MachineInstr *MI,
105 unsigned getNumMicroOps(const MachineInstr *MI,
170 unsigned computeOperandLatency(const MachineInstr *DefMI, unsigned DefOperIdx,
171 const MachineInstr *UseMI, unsigned UseOperIdx)
185 unsigned computeInstrLatency(const MachineInstr *MI,
194 unsigned computeOutputLatency(const MachineInstr *DefMI, unsigned DefOperIdx,
195 const MachineInstr *DepMI) const;
198 double computeReciprocalThroughput(const MachineInstr *MI) const;
include/llvm/CodeGen/TargetSubtargetInfo.h 140 const MachineInstr *MI,
154 virtual bool isZeroIdiom(const MachineInstr *MI, APInt &Mask) const {
165 virtual bool isDependencyBreaking(const MachineInstr *MI, APInt &Mask) const {
178 virtual bool isOptimizableRegisterMove(const MachineInstr *MI) const {
include/llvm/Support/PointerLikeTypeTraits.h 56 static inline void *getAsVoidPointer(T *P) { return P; }
57 static inline T *getFromVoidPointer(void *P) { return static_cast<T *>(P); }
59 enum { NumLowBitsAvailable = detail::ConstantLog2<alignof(T)>::value };
91 typedef PointerLikeTypeTraits<T *> NonConst;
93 static inline const void *getAsVoidPointer(const T *P) {
96 static inline const T *getFromVoidPointer(const void *P) {
include/llvm/Support/Recycler.h 83 SubClass *Allocate(AllocatorType &Allocator) {
84 static_assert(alignof(SubClass) <= Align,
86 static_assert(sizeof(SubClass) <= Size,
93 T *Allocate(AllocatorType &Allocator) {
93 T *Allocate(AllocatorType &Allocator) {
98 void Deallocate(AllocatorType & /*Allocator*/, SubClass* Element) {
include/llvm/Transforms/Utils/SSAUpdaterImpl.h 390 for (auto &SomePHI : BB->phis()) {
lib/CodeGen/AggressiveAntiDepBreaker.cpp 196 void AggressiveAntiDepBreaker::Observe(MachineInstr &MI, unsigned Count,
230 bool AggressiveAntiDepBreaker::IsImplicitDefUse(MachineInstr &MI,
249 MachineInstr &MI, std::set<unsigned> &PassthruRegs) {
355 MachineInstr &MI, unsigned Count, std::set<unsigned> &PassthruRegs) {
443 void AggressiveAntiDepBreaker::ScanInstruction(MachineInstr &MI,
705 MachineInstr *UseMI = Q.second.Operand->getParent();
723 MachineInstr *DefMI = Q.second.Operand->getParent();
772 std::map<MachineInstr *, const SUnit *> MISUnitMap;
783 MachineInstr *CriticalPathMI = nullptr;
816 MachineInstr &MI = *--I;
lib/CodeGen/AggressiveAntiDepBreaker.h 150 void Observe(MachineInstr &MI, unsigned Count,
162 bool IsImplicitDefUse(MachineInstr &MI, MachineOperand &MO);
166 void GetPassthruRegs(MachineInstr &MI, std::set<unsigned> &PassthruRegs);
172 void PrescanInstruction(MachineInstr &MI, unsigned Count,
174 void ScanInstruction(MachineInstr &MI, unsigned Count);
lib/CodeGen/AntiDepBreaker.h 34 std::vector<std::pair<MachineInstr *, MachineInstr *>>;
34 std::vector<std::pair<MachineInstr *, MachineInstr *>>;
51 virtual void Observe(MachineInstr &MI, unsigned Count,
59 void UpdateDbgValue(MachineInstr &MI, unsigned OldReg, unsigned NewReg) {
67 void UpdateDbgValues(const DbgValueVector &DbgValues, MachineInstr *ParentMI,
71 MachineInstr *PrevDbgMI = nullptr;
73 MachineInstr *PrevMI = DV.second;
75 MachineInstr *DbgMI = DV.first;
lib/CodeGen/AsmPrinter/AsmPrinter.cpp 764 static void emitComments(const MachineInstr &MI, raw_ostream &CommentOS) {
786 if (MI.getAsmPrinterFlag(MachineInstr::ReloadReuse))
792 void AsmPrinter::emitImplicitDef(const MachineInstr *MI) const {
804 static void emitKill(const MachineInstr *MI, AsmPrinter &AP) {
821 static bool emitDebugValueComment(const MachineInstr *MI, AsmPrinter &AP) {
911 static bool emitDebugLabelComment(const MachineInstr *MI, AsmPrinter &AP) {
948 void AsmPrinter::emitCFIInstruction(const MachineInstr &MI) {
973 void AsmPrinter::emitFrameAlloc(const MachineInstr &MI) {
1055 for (auto &MI : MBB) {
3034 for (const auto &MI : Pred->terminators()) {
3179 void AsmPrinter::recordSled(MCSymbol *Sled, const MachineInstr &MI,
lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp 171 static void EmitMSInlineAsmStr(const char *AsmStr, const MachineInstr *MI,
283 static void EmitGCCInlineAsmStr(const char *AsmStr, const MachineInstr *MI,
468 void AsmPrinter::EmitInlineAsm(const MachineInstr *MI) const {
576 void AsmPrinter::PrintSpecial(const MachineInstr *MI, raw_ostream &OS,
613 bool AsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
655 bool AsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
lib/CodeGen/AsmPrinter/CodeViewDebug.cpp 1218 const MachineInstr *DVInst = Entry.getInstr();
1408 for (const auto &MI : MBB) {
1409 if (!MI.isMetaInstruction() && !MI.getFlag(MachineInstr::FrameSetup) &&
1427 for (const auto &MI : MBB) {
2859 for (const auto &MI : MBB) {
2883 void CodeViewDebug::beginInstruction(const MachineInstr *MI) {
2888 MI->getFlag(MachineInstr::FrameSetup))
2895 for (const auto &NextMI : *MI->getParent()) {
lib/CodeGen/AsmPrinter/CodeViewDebug.h 464 void beginInstruction(const MachineInstr *MI) override;
lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp 41 static Register isDescribedByReg(const MachineInstr &MI) {
54 const MachineInstr &MI,
74 const MachineInstr &MI) {
92 void DbgLabelInstrMap::addInstr(InlinedEntity Label, const MachineInstr &MI) {
137 const MachineInstr &ClobberingInstr,
159 static void handleNewDebugValue(InlinedEntity Var, const MachineInstr &DV,
174 const MachineInstr &DV = *Entry.getInstr();
241 for (const auto &MI : MBB) {
286 (!MI.getFlag(MachineInstr::FrameDestroy) &&
287 !MI.getFlag(MachineInstr::FrameSetup))) {
lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp 31 const MachineInstr &Instruction) {
116 MCSymbol *DebugHandlerBase::getLabelBeforeInsn(const MachineInstr *MI) {
123 MCSymbol *DebugHandlerBase::getLabelAfterInsn(const MachineInstr *MI) {
129 DebugHandlerBase::getFunctionLocalOffsetAfterInsn(const MachineInstr *MI) {
270 const MachineInstr *MI = I.second;
279 void DebugHandlerBase::beginInstruction(const MachineInstr *MI) {
287 DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
317 DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
lib/CodeGen/AsmPrinter/DebugLocStream.h 160 const MachineInstr &MI;
165 DbgVariable &V, const MachineInstr &MI)
lib/CodeGen/AsmPrinter/DwarfDebug.cpp 232 static DbgValueLoc getDebugLocValue(const MachineInstr *MI) {
254 void DbgVariable::initializeDbgValue(const MachineInstr *DbgValue) {
540 static void collectCallSiteParameters(const MachineInstr *CallMI,
709 for (const MachineInstr &MI : MBB.instrs()) {
1299 const MachineInstr *DbgValue,
1300 const MachineInstr *RangeEnd) {
1313 const MachineInstr *LScopeBegin = LSRange.front().first;
1319 if (Pred->getFlag(MachineInstr::FrameSetup))
1338 const MachineInstr *LScopeEnd = LSRange.back().second;
1391 const MachineInstr *StartDebugMI = nullptr;
1392 const MachineInstr *EndMI = nullptr;
1395 const MachineInstr *Instr = EI->getInstr();
1538 const MachineInstr *MInsn = HistoryMapEntries.front().getInstr();
1548 const auto *End =
1590 const MachineInstr *MI = I.second;
1633 void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1644 if (MI->isMetaInstruction() || MI->getFlag(MachineInstr::FrameSetup))
1730 for (const auto &MI : MBB)
1731 if (!MI.isMetaInstruction() && !MI.getFlag(MachineInstr::FrameSetup) &&
lib/CodeGen/AsmPrinter/DwarfDebug.h 163 void initializeDbgValue(const MachineInstr *DbgValue);
613 void beginInstruction(const MachineInstr *MI) override;
lib/CodeGen/AsmPrinter/EHStreamer.cpp 168 bool EHStreamer::callToNoUnwindFunction(const MachineInstr *MI) {
244 for (const auto &MI : MBB) {
lib/CodeGen/AsmPrinter/EHStreamer.h 130 void beginInstruction(const MachineInstr *MI) override {}
135 static bool callToNoUnwindFunction(const MachineInstr *MI);
lib/CodeGen/AsmPrinter/WinCFGuard.h 48 void beginInstruction(const MachineInstr *MI) override {}
lib/CodeGen/AsmPrinter/WinException.cpp 457 const MachineInstr &MI = *MBBI;
lib/CodeGen/BranchFolding.cpp 167 if (MI.isCall(MachineInstr::IgnoreBundle))
231 for (const MachineInstr &I : BB)
256 static unsigned HashMachineInstr(const MachineInstr &MI) {
305 static bool countsAsInstruction(const MachineInstr &MI) {
903 for (auto &MI : *MBB) {
1347 for (MachineInstr &MI : MBB.instrs())
1359 for (MachineInstr &MI : MBB.instrs())
1491 MachineInstr &DuplicateDbg = *MBBIter;
1587 MachineInstr &TailCall = *MBB->getFirstNonDebugInstr();
2005 if (!TIB->isIdenticalTo(*FIB, MachineInstr::CheckKillDead))
lib/CodeGen/BranchRelaxation.cpp 95 MachineBasicBlock *splitBlockBeforeInstr(MachineInstr &MI,
98 bool isBlockInRange(const MachineInstr &MI, const MachineBasicBlock &BB) const;
100 bool fixupConditionalBranch(MachineInstr &MI);
101 bool fixupUnconditionalBranch(MachineInstr &MI);
103 unsigned getInstrOffset(const MachineInstr &MI) const;
170 for (const MachineInstr &MI : MBB)
178 unsigned BranchRelaxation::getInstrOffset(const MachineInstr &MI) const {
225 MachineBasicBlock *BranchRelaxation::splitBlockBeforeInstr(MachineInstr &MI,
281 const MachineInstr &MI, const MachineBasicBlock &DestBB) const {
300 bool BranchRelaxation::fixupConditionalBranch(MachineInstr &MI) {
438 bool BranchRelaxation::fixupUnconditionalBranch(MachineInstr &MI) {
513 MachineInstr &MI = *J;
lib/CodeGen/BreakFalseDeps.cpp 41 std::vector<std::pair<MachineInstr *, unsigned>> UndefReads;
74 void processDefs(MachineInstr *MI);
81 bool pickBestRegisterForUndef(MachineInstr *MI, unsigned OpIdx,
86 bool shouldBreakDependence(MachineInstr *, unsigned OpIdx, unsigned Pref);
107 bool BreakFalseDeps::pickBestRegisterForUndef(MachineInstr *MI, unsigned OpIdx,
163 bool BreakFalseDeps::shouldBreakDependence(MachineInstr *MI, unsigned OpIdx,
177 void BreakFalseDeps::processDefs(MachineInstr *MI) {
229 MachineInstr *UndefMI = UndefReads.back().first;
232 for (MachineInstr &I : make_range(MBB->rbegin(), MBB->rend())) {
256 for (MachineInstr &MI : *MBB) {
lib/CodeGen/CFGuardLongjmp.cpp 70 SmallVector<MachineInstr *, 8> SetjmpCalls;
75 for (MachineInstr &MI : MBB) {
108 for (MachineInstr *Setjmp : SetjmpCalls) {
lib/CodeGen/CFIInstrInserter.cpp 166 for (MachineInstr &MI : *MBBInfo.MBB) {
lib/CodeGen/CalcSpillWeights.cpp 51 static Register copyHint(const MachineInstr *mi, unsigned reg,
99 MachineInstr *MI = LIS.getInstructionFromIndex(VNI->def);
160 SmallPtrSet<MachineInstr*, 8> visited;
209 MachineInstr *mi = &*(I++);
lib/CodeGen/CriticalAntiDepBreaker.cpp 106 void CriticalAntiDepBreaker::Observe(MachineInstr &MI, unsigned Count,
165 void CriticalAntiDepBreaker::PrescanInstruction(MachineInstr &MI) {
252 void CriticalAntiDepBreaker::ScanInstruction(MachineInstr &MI, unsigned Count) {
360 MachineInstr *MI = RefOper->getParent();
450 DenseMap<MachineInstr *, const SUnit *> MISUnitMap;
478 MachineInstr *CriticalPathMI = CriticalPathSU->getInstr();
529 MachineInstr &MI = *--I;
lib/CodeGen/CriticalAntiDepBreaker.h 90 void Observe(MachineInstr &MI, unsigned Count,
97 void PrescanInstruction(MachineInstr &MI);
98 void ScanInstruction(MachineInstr &MI, unsigned Count);
lib/CodeGen/DFAPacketizer.cpp 121 bool DFAPacketizer::canReserveResources(MachineInstr &MI) {
128 void DFAPacketizer::reserveResources(MachineInstr &MI) {
221 MachineInstr &MIFirst = *CurrentPacketMIs.front();
260 MachineInstr &MI = *BeginItr;
347 bool VLIWPacketizerList::alias(const MachineInstr &MI1,
348 const MachineInstr &MI2,
lib/CodeGen/DeadMachineInstructionElim.cpp 49 bool isDead(const MachineInstr *MI) const;
58 bool DeadMachineInstructionElim::isDead(const MachineInstr *MI) const {
84 for (const MachineInstr &Use : MRI->use_nodbg_instructions(Reg)) {
125 MachineInstr *MI = &*MII++;
lib/CodeGen/DetectDeadLanes.cpp 80 void transferUsedLanesStep(const MachineInstr &MI, LaneBitmask UsedLanes);
96 LaneBitmask transferUsedLanes(const MachineInstr &MI, LaneBitmask UsedLanes,
137 static bool lowersToCopies(const MachineInstr &MI) {
153 const MachineInstr &MI,
219 void DetectDeadLanes::transferUsedLanesStep(const MachineInstr &MI,
229 LaneBitmask DetectDeadLanes::transferUsedLanes(const MachineInstr &MI,
280 const MachineInstr &MI = *Use.getParent();
312 const MachineInstr &MI = *Def.getParent();
359 const MachineInstr &DefMI = *Def.getParent();
393 const MachineInstr &MODefMI = *MODef.getParent();
423 const MachineInstr &UseMI = *MO.getParent();
469 const MachineInstr &MI = *MO.getParent();
515 const MachineInstr &MI = *Def.getParent();
535 for (MachineInstr &MI : MBB) {
lib/CodeGen/EarlyIfConversion.cpp 111 MachineInstr *PHI;
116 PHIInfo(MachineInstr *phi)
128 SmallPtrSet<MachineInstr*, 8> InsertAfter;
150 bool InstrDependenciesAllowIfConv(MachineInstr *I);
254 bool SSAIfConv::InstrDependenciesAllowIfConv(MachineInstr *I) {
271 MachineInstr *DefMI = MRI->getVRegDef(Reg);
987 for (MachineInstr &I : IfBlock) {
1001 for (MachineInstr &I : *IfConv.TBB) {
1007 for (MachineInstr &I : *IfConv.FBB) {
lib/CodeGen/ExecutionDomainFix.cpp 222 bool ExecutionDomainFix::visitInstr(MachineInstr *MI) {
235 void ExecutionDomainFix::processDefs(MachineInstr *MI, bool Kill) {
257 void ExecutionDomainFix::visitHardInstr(MachineInstr *mi, unsigned domain) {
282 void ExecutionDomainFix::visitSoftInstr(MachineInstr *mi, unsigned mask) {
402 for (MachineInstr &MI : *TraversedMBB.MBB) {
lib/CodeGen/ExpandPostRAPseudos.cpp 50 bool LowerSubregToReg(MachineInstr *MI);
51 bool LowerCopy(MachineInstr *MI);
53 void TransferImplicitOperands(MachineInstr *MI);
66 void ExpandPostRA::TransferImplicitOperands(MachineInstr *MI) {
75 bool ExpandPostRA::LowerSubregToReg(MachineInstr *MI) {
134 bool ExpandPostRA::LowerCopy(MachineInstr *MI) {
194 MachineInstr &MI = *mi;
lib/CodeGen/FinalizeISel.cpp 56 MachineInstr &MI = *MBBI++;
lib/CodeGen/GlobalISel/CSEInfo.cpp 134 UniqueMachineInstr *GISelCSEInfo::getUniqueInstrForMI(const MachineInstr *MI) {
140 void GISelCSEInfo::insertInstr(MachineInstr *MI, void *InsertPos) {
148 MachineInstr *GISelCSEInfo::getMachineInstrIfExists(FoldingSetNodeID &ID,
169 void GISelCSEInfo::recordNewInstruction(MachineInstr *MI) {
176 void GISelCSEInfo::handleRecordedInst(MachineInstr *MI) {
198 void GISelCSEInfo::handleRemoveInst(MachineInstr *MI) {
208 auto *MI = TemporaryInsts.pop_back_val();
221 void GISelCSEInfo::erasingInstr(MachineInstr &MI) { handleRemoveInst(&MI); }
222 void GISelCSEInfo::createdInstr(MachineInstr &MI) { recordNewInstruction(&MI); }
223 void GISelCSEInfo::changingInstr(MachineInstr &MI) {
228 void GISelCSEInfo::changedInstr(MachineInstr &MI) { changingInstr(MI); }
235 for (MachineInstr &MI : MBB) {
268 GISelInstProfileBuilder::addNodeID(const MachineInstr *MI) const {
lib/CodeGen/GlobalISel/CSEMIRBuilder.cpp 39 MachineInstr *MI =
109 MachineInstr *MIBInstr = MIB;
lib/CodeGen/GlobalISel/Combiner.cpp 56 SmallPtrSet<const MachineInstr *, 4> CreatedInstrs;
64 void erasingInstr(MachineInstr &MI) override {
68 void createdInstr(MachineInstr &MI) override {
73 void changingInstr(MachineInstr &MI) override {
77 void changedInstr(MachineInstr &MI) override {
136 MachineInstr *CurMI = &*MII;
150 MachineInstr *CurrInst = WorkList.pop_back_val();
lib/CodeGen/GlobalISel/CombinerHelper.cpp 65 bool CombinerHelper::tryCombineCopy(MachineInstr &MI) {
72 bool CombinerHelper::matchCombineCopy(MachineInstr &MI) {
85 void CombinerHelper::applyCombineCopy(MachineInstr &MI) {
92 bool CombinerHelper::tryCombineConcatVectors(MachineInstr &MI) {
102 bool CombinerHelper::matchCombineConcatVectors(MachineInstr &MI, bool &IsUndef,
107 MachineInstr *Undef = nullptr;
117 MachineInstr *Def = MRI.getVRegDef(Reg);
155 MachineInstr &MI, bool IsUndef, const ArrayRef<Register> Ops) {
176 bool CombinerHelper::tryCombineShuffleVector(MachineInstr &MI) {
185 bool CombinerHelper::matchCombineShuffleVector(MachineInstr &MI,
251 void CombinerHelper::applyCombineShuffleVector(MachineInstr &MI,
270 MachineInstr *MIForCandidate) {
321 MachineIRBuilder &Builder, MachineInstr &DefMI, MachineOperand &UseMO,
325 MachineInstr &UseMI = *UseMO.getParent();
348 bool CombinerHelper::tryCombineExtendingLoads(MachineInstr &MI) {
357 bool CombinerHelper::matchCombineExtendingLoads(MachineInstr &MI,
402 for (auto &UseMI : MRI.use_instructions(LoadValue.getReg())) {
423 void CombinerHelper::applyCombineExtendingLoads(MachineInstr &MI,
430 DenseMap<MachineBasicBlock *, MachineInstr *> EmittedInsns;
434 MachineInstr *PreviouslyEmitted = EmittedInsns.lookup(InsertIntoBB);
444 MachineInstr *NewMI = Builder.buildTrunc(NewDstReg, ChosenDstReg);
464 MachineInstr *UseMI = UseMO->getParent();
533 bool CombinerHelper::isPredecessor(MachineInstr &DefMI, MachineInstr &UseMI) {
533 bool CombinerHelper::isPredecessor(MachineInstr &DefMI, MachineInstr &UseMI) {
546 bool CombinerHelper::dominates(MachineInstr &DefMI, MachineInstr &UseMI) {
546 bool CombinerHelper::dominates(MachineInstr &DefMI, MachineInstr &UseMI) {
555 bool CombinerHelper::findPostIndexCandidate(MachineInstr &MI, Register &Addr,
567 MachineInstr *BaseDef = MRI.getUniqueVRegDef(Base);
573 for (auto &Use : MRI.use_instructions(Base)) {
588 MachineInstr *OffsetDef = MRI.getUniqueVRegDef(Offset);
600 for (auto &GEPUse : MRI.use_instructions(Use.getOperand(0).getReg())) {
622 bool CombinerHelper::findPreIndexCandidate(MachineInstr &MI, Register &Addr,
634 MachineInstr *AddrDef = getOpcodeDef(TargetOpcode::G_GEP, Addr, MRI);
649 MachineInstr *BaseDef = getDefIgnoringCopies(Base, MRI);
673 for (auto &UseMI : MRI.use_instructions(Addr)) {
683 bool CombinerHelper::tryCombineIndexedLoadStore(MachineInstr &MI) {
714 MachineInstr &AddrDef = *MRI.getUniqueVRegDef(Addr);
735 bool CombinerHelper::matchElideBrByInvertingCond(MachineInstr &MI) {
760 MachineInstr *BrCond = &*std::prev(BrIt);
768 MachineInstr *CmpMI = MRI.getVRegDef(BrCond->getOperand(0).getReg());
775 bool CombinerHelper::tryElideBrByInvertingCond(MachineInstr &MI) {
782 void CombinerHelper::applyElideBrByInvertingCond(MachineInstr &MI) {
785 MachineInstr *BrCond = &*std::prev(BrIt);
786 MachineInstr *CmpMI = MRI.getVRegDef(BrCond->getOperand(0).getReg());
919 bool CombinerHelper::optimizeMemset(MachineInstr &MI, Register Dst, Register Val,
933 MachineInstr *FIDef = getOpcodeDef(TargetOpcode::G_FRAME_INDEX, Dst, MRI);
1032 bool CombinerHelper::optimizeMemcpy(MachineInstr &MI, Register Dst,
1048 MachineInstr *FIDef = getOpcodeDef(TargetOpcode::G_FRAME_INDEX, Dst, MRI);
1140 bool CombinerHelper::optimizeMemmove(MachineInstr &MI, Register Dst,
1156 MachineInstr *FIDef = getOpcodeDef(TargetOpcode::G_FRAME_INDEX, Dst, MRI);
1247 bool CombinerHelper::tryCombineMemCpyFamily(MachineInstr &MI, unsigned MaxLen) {
1298 bool CombinerHelper::tryCombine(MachineInstr &MI) {
lib/CodeGen/GlobalISel/GISelChangeObserver.cpp 20 for (auto &ChangingMI : MRI.use_instructions(Reg)) {
27 for (auto *ChangedMI : ChangingAllUsesOfReg)
lib/CodeGen/GlobalISel/GISelKnownBits.cpp 43 MaybeAlign GISelKnownBits::inferPtrAlignment(const MachineInstr &MI) {
54 const MachineInstr &MI = *MRI.getVRegDef(R);
65 KnownBits GISelKnownBits::getKnownBits(MachineInstr &MI) {
93 MachineInstr &MI = *MRI.getVRegDef(R);
lib/CodeGen/GlobalISel/IRTranslator.cpp 128 void erasingInstr(MachineInstr &MI) override {}
129 void changingInstr(MachineInstr &MI) override {}
130 void changedInstr(MachineInstr &MI) override {}
132 void createdInstr(MachineInstr &MI) override {
299 Flags = MachineInstr::copyFlagsFromInstruction(I);
315 Flags = MachineInstr::copyFlagsFromInstruction(I);
330 Flags = MachineInstr::copyFlagsFromInstruction(I);
356 MachineInstr::copyFlagsFromInstruction(*CI));
1011 Flags = MachineInstr::copyFlagsFromInstruction(*Cmp);
1274 MachineInstr::copyFlagsFromInstruction(CI));
1419 MachineInstr::copyFlagsFromInstruction(CI));
1423 MachineInstr::copyFlagsFromInstruction(CI));
1425 MachineInstr::copyFlagsFromInstruction(CI));
1832 MachineInstr::NoUWrap);
1930 SmallVector<MachineInstr *, 4> Insts;
2055 ArrayRef<MachineInstr *> ComponentPHIs = Phi.second;
lib/CodeGen/GlobalISel/InstructionSelect.cpp 93 if (const MachineInstr *MI = machineFunctionIsIllegal(MF)) {
117 MachineInstr &MI = *MII;
161 MachineInstr &MI = *MII;
192 MachineInstr *MI = nullptr;
235 for (const auto &MI : MBB) {
lib/CodeGen/GlobalISel/InstructionSelector.cpp 37 MachineInstr &I, unsigned OpIdx, const TargetRegisterClass &RC,
62 MachineInstr *RootI = MRI.getVRegDef(Root.getReg());
67 MachineInstr *RHSI = MRI.getVRegDef(RHS.getReg());
74 bool InstructionSelector::isObviouslySafeToFold(MachineInstr &MI,
75 MachineInstr &IntoMI) const {
lib/CodeGen/GlobalISel/Legalizer.cpp 66 static bool isArtifact(const MachineInstr &MI) {
90 SmallVector<MachineInstr *, 4> NewMIs;
97 void createdOrChangedInstr(MachineInstr &MI) {
109 void createdInstr(MachineInstr &MI) override {
123 void erasingInstr(MachineInstr &MI) override {
129 void changingInstr(MachineInstr &MI) override {
133 void changedInstr(MachineInstr &MI) override {
167 for (MachineInstr &MI : *MBB) {
215 SmallVector<MachineInstr *, 128> RetryList;
220 MachineInstr &MI = *InstList.pop_back_val();
253 MachineInstr *MI = *RetryList.begin();
259 MachineInstr &MI = *ArtifactList.pop_back_val();
267 SmallVector<MachineInstr *, 4> DeadInstructions;
271 for (auto *DeadMI : DeadInstructions) {
lib/CodeGen/GlobalISel/LegalizerHelper.cpp 83 LegalizerHelper::legalizeInstrStep(MachineInstr &MI) {
332 static bool isLibCallInTailPosition(MachineInstr &MI) {
352 MachineInstr *Next = MI.getNextNode();
380 simpleLibcall(MachineInstr &MI, MachineIRBuilder &MIRBuilder, unsigned Size,
393 MachineInstr &MI) {
482 conversionLibcall(MachineInstr &MI, MachineIRBuilder &MIRBuilder, Type *ToType,
490 LegalizerHelper::libcall(MachineInstr &MI) {
597 LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalar(MachineInstr &MI,
1081 void LegalizerHelper::widenScalarSrc(MachineInstr &MI, LLT WideTy,
1088 void LegalizerHelper::narrowScalarSrc(MachineInstr &MI, LLT NarrowTy,
1096 void LegalizerHelper::widenScalarDst(MachineInstr &MI, LLT WideTy,
1105 void LegalizerHelper::narrowScalarDst(MachineInstr &MI, LLT NarrowTy,
1114 void LegalizerHelper::moreElementsVectorDst(MachineInstr &MI, LLT WideTy,
1123 void LegalizerHelper::moreElementsVectorSrc(MachineInstr &MI, LLT MoreTy,
1154 LegalizerHelper::widenScalarMergeValues(MachineInstr &MI, unsigned TypeIdx,
1276 LegalizerHelper::widenScalarUnmergeValues(MachineInstr &MI, unsigned TypeIdx,
1316 LegalizerHelper::widenScalarExtract(MachineInstr &MI, unsigned TypeIdx,
1395 LegalizerHelper::widenScalarInsert(MachineInstr &MI, unsigned TypeIdx,
1407 LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
1909 LegalizerHelper::lower(MachineInstr &MI, unsigned TypeIdx, LLT Ty) {
2286 MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy) {
2314 LegalizerHelper::fewerElementsVectorBasic(MachineInstr &MI, unsigned TypeIdx,
2420 MachineInstr &MI, unsigned TypeIdx, LLT NarrowTyArg) {
2503 LegalizerHelper::fewerElementsVectorCasts(MachineInstr &MI, unsigned TypeIdx,
2534 MachineInstr *NewInst = MIRBuilder.buildInstr(MI.getOpcode())
2552 LegalizerHelper::fewerElementsVectorCmp(MachineInstr &MI, unsigned TypeIdx,
2603 MachineInstr *NewCmp
2619 LegalizerHelper::fewerElementsVectorSelect(MachineInstr &MI, unsigned TypeIdx,
2691 LegalizerHelper::fewerElementsVectorPhi(MachineInstr &MI, unsigned TypeIdx,
2758 LegalizerHelper::fewerElementsVectorUnmergeValues(MachineInstr &MI,
2798 LegalizerHelper::fewerElementsVectorBuildVector(MachineInstr &MI,
2857 LegalizerHelper::reduceLoadStoreWidth(MachineInstr &MI, unsigned TypeIdx,
2944 LegalizerHelper::fewerElementsVector(MachineInstr &MI, unsigned TypeIdx,
3042 LegalizerHelper::narrowScalarShiftByConstant(MachineInstr &MI, const APInt &Amt,
3131 LegalizerHelper::narrowScalarShift(MachineInstr &MI, unsigned TypeIdx,
3158 if (const MachineInstr *KShiftAmt =
3241 LegalizerHelper::moreElementsVectorPhi(MachineInstr &MI, unsigned TypeIdx,
3260 LegalizerHelper::moreElementsVector(MachineInstr &MI, unsigned TypeIdx,
3413 LegalizerHelper::narrowScalarMul(MachineInstr &MI, LLT NarrowTy) {
3448 LegalizerHelper::narrowScalarExtract(MachineInstr &MI, unsigned TypeIdx,
3513 LegalizerHelper::narrowScalarInsert(MachineInstr &MI, unsigned TypeIdx,
3588 LegalizerHelper::narrowScalarBasic(MachineInstr &MI, unsigned TypeIdx,
3629 LegalizerHelper::narrowScalarSelect(MachineInstr &MI, unsigned TypeIdx,
3675 LegalizerHelper::lowerBitCount(MachineInstr &MI, unsigned TypeIdx, LLT Ty) {
3790 LegalizerHelper::lowerU64ToF32BitOps(MachineInstr &MI) {
3846 LegalizerHelper::lowerUITOFP(MachineInstr &MI, unsigned TypeIdx, LLT Ty) {
3867 LegalizerHelper::lowerSITOFP(MachineInstr &MI, unsigned TypeIdx, LLT Ty) {
3905 LegalizerHelper::lowerFPTOUI(MachineInstr &MI, unsigned TypeIdx, LLT Ty) {
3962 LegalizerHelper::lowerMinMax(MachineInstr &MI, unsigned TypeIdx, LLT Ty) {
3978 LegalizerHelper::lowerFCopySign(MachineInstr &MI, unsigned TypeIdx, LLT Ty) {
3996 MachineInstr *Or;
4026 LegalizerHelper::lowerFMinNumMaxNum(MachineInstr &MI) {
4035 if (!MI.getFlag(MachineInstr::FmNoNans)) {
4056 LegalizerHelper::LegalizeResult LegalizerHelper::lowerFMad(MachineInstr &MI) {
4070 LegalizerHelper::lowerUnmergeValues(MachineInstr &MI) {
4103 LegalizerHelper::lowerShuffleVector(MachineInstr &MI) {
4162 LegalizerHelper::lowerDynStackAlloc(MachineInstr &MI) {
4197 LegalizerHelper::lowerExtract(MachineInstr &MI) {
4229 LegalizerHelper::LegalizeResult LegalizerHelper::lowerInsert(MachineInstr &MI) {
4269 LegalizerHelper::lowerSADDO_SSUBO(MachineInstr &MI) {
lib/CodeGen/GlobalISel/LegalizerInfo.cpp 390 static LLT getTypeFromTypeIdx(const MachineInstr &MI,
476 LegalizerInfo::getAction(const MachineInstr &MI,
507 bool LegalizerInfo::isLegal(const MachineInstr &MI,
512 bool LegalizerInfo::isLegalOrCustom(const MachineInstr &MI,
520 bool LegalizerInfo::legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI,
682 bool LegalizerInfo::legalizeIntrinsic(MachineInstr &MI,
737 const MachineInstr *llvm::machineFunctionIsIllegal(const MachineFunction &MF) {
741 for (const MachineInstr &MI : MBB)
lib/CodeGen/GlobalISel/Localizer.cpp 38 bool Localizer::shouldLocalize(const MachineInstr &MI) {
98 bool Localizer::isLocalUse(MachineOperand &MOUse, const MachineInstr &Def,
100 MachineInstr &MIUse = *MOUse.getParent();
118 MachineInstr &MI = *RI;
144 MachineInstr *LocalizedMI = MF.CloneMachineInstr(&MI);
146 MachineInstr &UseMI = *MOUse.getParent();
179 for (MachineInstr *MI : LocalizedInstrs) {
183 SmallPtrSet<MachineInstr *, 32> Users;
184 for (MachineInstr &UseMI : MRI->use_nodbg_instructions(Reg)) {
lib/CodeGen/GlobalISel/MachineIRBuilder.cpp 43 void MachineIRBuilder::setInstr(MachineInstr &MI) {
59 void MachineIRBuilder::recordInsertion(MachineInstr *InsertedInstr) const {
lib/CodeGen/GlobalISel/RegBankSelect.cpp 144 MachineInstr *MI;
217 std::unique_ptr<MachineInstr *[]> NewInstrs(
218 new MachineInstr *[RepairPt.getNumInsertPoints()]);
222 MachineInstr *CurMI;
289 MachineInstr &MI, RegisterBankInfo::InstructionMappings &PossibleMappings,
325 const MachineInstr &MI = *MO.getParent();
415 const MachineInstr *Next = MI.getNextNode();
442 MachineInstr &MI, const RegisterBankInfo::InstructionMapping &InstrMapping,
581 MachineInstr &MI, const RegisterBankInfo::InstructionMapping &InstrMapping,
622 bool RegBankSelect::assignInstr(MachineInstr &MI) {
669 if (const MachineInstr *MI = machineFunctionIsIllegal(MF)) {
688 MachineInstr &MI = *MII++;
723 MachineInstr &MI, unsigned OpIdx, const TargetRegisterInfo &TRI, Pass &P,
816 void RegBankSelect::RepairingPlacement::addInsertPoint(MachineInstr &MI,
838 RegBankSelect::InstrInsertPoint::InstrInsertPoint(MachineInstr &Instr,
lib/CodeGen/GlobalISel/RegisterBankInfo.cpp 110 const MachineInstr &MI, unsigned OpIdx, const TargetInstrInfo &TII,
150 static bool isCopyLike(const MachineInstr &MI) {
156 RegisterBankInfo::getInstrMappingImpl(const MachineInstr &MI) const {
400 RegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
434 MachineInstr &MI = OpdMapper.getMI();
591 const MachineInstr &MI) const {
647 MachineInstr &MI, const InstructionMapping &InstrMapping,
lib/CodeGen/GlobalISel/Utils.cpp 43 const RegisterBankInfo &RBI, MachineInstr &InsertPt,
73 const RegisterBankInfo &RBI, MachineInstr &InsertPt, const MCInstrDesc &II,
111 bool llvm::constrainSelectedInstRegOperands(MachineInstr &I,
158 bool llvm::isTriviallyDead(const MachineInstr &MI,
197 const MachineInstr &MI) {
222 MachineInstr *MI;
297 MachineInstr *MI = MRI.getVRegDef(VReg);
303 llvm::MachineInstr *llvm::getDefIgnoringCopies(Register Reg,
305 auto *DefMI = MRI.getVRegDef(Reg);
319 llvm::MachineInstr *llvm::getOpcodeDef(unsigned Opcode, Register Reg,
321 MachineInstr *DefMI = getDefIgnoringCopies(Reg, MRI);
391 const MachineInstr *DefMI = MRI.getVRegDef(Val);
395 if (DefMI->getFlag(MachineInstr::FmNoNans))
lib/CodeGen/IfConversion.cpp 308 for (auto &I : make_range(TBBInfo.BB->begin(), TIB)) {
312 for (auto &I : make_range(FBBInfo.BB->begin(), FIB)) {
321 for (auto &I : make_range(TIE, TBBInfo.BB->end())) {
330 for (auto &I : make_range(FIE, FBBInfo.BB->end())) {
339 for (auto &I : CommBB.terminators()) {
352 for (auto &I : make_range(TIB, TIE)) {
358 for (auto &I : make_range(FIB, FIE)) {
1066 for (MachineInstr &MI : make_range(Begin, End)) {
1474 static void UpdatePredRedefs(MachineInstr &MI, LivePhysRegs &Redefs) {
1494 MachineInstr *OpMI = Op.getParent();
1847 if (DI2->isCall(MachineInstr::IgnoreBundle))
1858 for (const MachineInstr &MI : make_range(MBB1.begin(), DI1)) {
1896 if (DI1->isCall(MachineInstr::IgnoreBundle))
1941 for (const MachineInstr &FI : make_range(MBB2.begin(), DI2)) {
2107 static bool MaySpeculate(const MachineInstr &MI,
2134 for (MachineInstr &I : make_range(BBI.BB->begin(), E)) {
2177 for (MachineInstr &I : FromMBB) {
2182 MachineInstr *MI = MF.CloneMachineInstr(&I);
2184 if (MI->isCall(MachineInstr::IgnoreBundle))
lib/CodeGen/ImplicitNullChecks.cpp 82 static bool canHandle(const MachineInstr *MI);
87 bool canReorder(const MachineInstr *A, const MachineInstr *B);
87 bool canReorder(const MachineInstr *A, const MachineInstr *B);
100 Optional<ArrayRef<MachineInstr *>::iterator> PotentialDependence;
104 Optional<ArrayRef<MachineInstr *>::iterator> PotentialDependence)
116 DependenceResult computeDependence(const MachineInstr *MI,
117 ArrayRef<MachineInstr *> Block);
122 MachineInstr *MemOperation;
125 MachineInstr *CheckOperation;
138 MachineInstr *OnlyDependency;
141 explicit NullCheck(MachineInstr *memOperation, MachineInstr *checkOperation,
141 explicit NullCheck(MachineInstr *memOperation, MachineInstr *checkOperation,
145 MachineInstr *onlyDependency)
150 MachineInstr *getMemOperation() const { return MemOperation; }
152 MachineInstr *getCheckOperation() const { return CheckOperation; }
160 MachineInstr *getOnlyDependency() const { return OnlyDependency; }
170 MachineInstr *insertFaultingInstr(MachineInstr *MI, MachineBasicBlock *MBB,
170 MachineInstr *insertFaultingInstr(MachineInstr *MI, MachineBasicBlock *MBB,
183 AliasResult areMemoryOpsAliased(const MachineInstr &MI,
184 const MachineInstr *PrevMI) const;
198 SuitabilityResult isSuitableMemoryOp(const MachineInstr &MI,
200 ArrayRef<MachineInstr *> PrevInsts);
205 bool canHoistInst(MachineInstr *FaultingMI, unsigned PointerReg,
206 ArrayRef<MachineInstr *> InstsSeenSoFar,
207 MachineBasicBlock *NullSucc, MachineInstr *&Dependence);
231 bool ImplicitNullChecks::canHandle(const MachineInstr *MI) {
246 ImplicitNullChecks::computeDependence(const MachineInstr *MI,
247 ArrayRef<MachineInstr *> Block) {
251 Optional<ArrayRef<MachineInstr *>::iterator> Dep;
269 bool ImplicitNullChecks::canReorder(const MachineInstr *A,
270 const MachineInstr *B) {
324 ImplicitNullChecks::areMemoryOpsAliased(const MachineInstr &MI,
325 const MachineInstr *PrevMI) const {
362 ImplicitNullChecks::isSuitableMemoryOp(const MachineInstr &MI,
364 ArrayRef<MachineInstr *> PrevInsts) {
379 for (auto *PrevMI : PrevInsts) {
389 bool ImplicitNullChecks::canHoistInst(MachineInstr *FaultingMI,
391 ArrayRef<MachineInstr *> InstsSeenSoFar,
393 MachineInstr *&Dependence) {
404 auto *DependenceMI = *DependenceItr;
582 SmallVector<MachineInstr *, 8> InstsSeenSoFar;
584 for (auto &MI : *NotNullSucc) {
588 MachineInstr *Dependence;
615 MachineInstr *ImplicitNullChecks::insertFaultingInstr(
616 MachineInstr *MI, MachineBasicBlock *MBB, MachineBasicBlock *HandlerMBB) {
673 if (auto *DepMI = NC.getOnlyDependency()) {
682 MachineInstr *FaultingInstr = insertFaultingInstr(
698 if (auto *DepMI = NC.getOnlyDependency()) {
lib/CodeGen/InlineSpiller.cpp 110 MapVector<std::pair<int, VNInfo *>, SmallPtrSet<MachineInstr *, 16>>;
122 SmallPtrSet<MachineInstr *, 16> &Spills,
127 MachineBasicBlock *Root, SmallPtrSet<MachineInstr *, 16> &Spills,
134 SmallPtrSet<MachineInstr *, 16> &Spills,
151 void addToMergeableSpills(MachineInstr &Spill, int StackSlot,
153 bool rmFromMergeableSpills(MachineInstr &Spill, int StackSlot);
182 SmallPtrSet<MachineInstr*, 8> SnippetCopies;
188 SmallVector<MachineInstr*, 8> DeadDefs;
217 bool hoistSpillInsideBB(LiveInterval &SpillLI, MachineInstr &CopyMI);
221 bool canGuaranteeAssignmentAfterRemat(unsigned VReg, MachineInstr &MI);
222 bool reMaterializeFor(LiveInterval &, MachineInstr &MI);
225 bool coalesceStackAccess(MachineInstr *MI, unsigned Reg);
226 bool foldMemoryOperand(ArrayRef<std::pair<MachineInstr *, unsigned>>,
227 MachineInstr *LoadMI = nullptr);
261 static unsigned isFullCopyOf(const MachineInstr &MI, unsigned Reg) {
287 MachineInstr *UseMI = nullptr;
293 MachineInstr &MI = *RI++;
332 MachineInstr &MI = *RI++;
372 MachineInstr &CopyMI) {
406 MachineInstr *DefMI = LIS.getInstructionFromIndex(SrcVNI->def);
450 MachineInstr &MI = *UI++;
509 MachineInstr *MI = LIS.getInstructionFromIndex(VNI->def);
521 MachineInstr &MI) {
543 bool InlineSpiller::reMaterializeFor(LiveInterval &VirtReg, MachineInstr &MI) {
545 SmallVector<std::pair<MachineInstr *, unsigned>, 8> Ops;
614 auto *NewMI = LIS.getInstructionFromIndex(DefIdx);
650 MachineInstr &MI = *RegI++;
673 MachineInstr *MI = LIS.getInstructionFromIndex(VNI->def);
718 bool InlineSpiller::coalesceStackAccess(MachineInstr *MI, unsigned Reg) {
789 foldMemoryOperand(ArrayRef<std::pair<MachineInstr *, unsigned>> Ops,
790 MachineInstr *LoadMI) {
794 MachineInstr *MI = Ops.front().first;
837 MachineInstr *FoldMI =
875 for (MachineInstr &MI : MIS)
922 static bool isFullUndefDef(const MachineInstr &Def) {
970 MachineInstr *MI = &*(RegI++);
994 SmallVector<std::pair<MachineInstr*, unsigned>, 8> Ops;
1096 MachineInstr &MI = *(RI++);
1141 void HoistSpillHelper::addToMergeableSpills(MachineInstr &Spill, int StackSlot,
1160 bool HoistSpillHelper::rmFromMergeableSpills(MachineInstr &Spill,
1199 SmallPtrSet<MachineInstr *, 16> &Spills,
1208 MachineInstr *PrevSpill = SpillBBToSpill[Node];
1212 MachineInstr *SpillToRm = (CIdx > PIdx) ? CurrentSpill : PrevSpill;
1213 MachineInstr *SpillToKeep = (CIdx > PIdx) ? PrevSpill : CurrentSpill;
1231 MachineBasicBlock *Root, SmallPtrSet<MachineInstr *, 16> &Spills,
1257 MachineInstr *SpillToRm = nullptr;
1319 SmallPtrSet<MachineInstr *, 16> &Spills,
1331 DenseMap<MachineDomTreeNode *, MachineInstr *> SpillBBToSpill;
1410 MachineInstr *SpillToRm = SpillBBToSpill[SpillBB];
1471 SmallPtrSet<MachineInstr *, 16> &EqValSpills = Ent.second;
1484 SmallVector<MachineInstr *, 16> SpillsToRm;
lib/CodeGen/LexicalScopes.cpp 58 DenseMap<const MachineInstr *, LexicalScope *> MI2ScopeMap;
70 DenseMap<const MachineInstr *, LexicalScope *> &MI2ScopeMap) {
73 const MachineInstr *RangeBeginMI = nullptr;
74 const MachineInstr *PrevMI = nullptr;
76 for (const auto &MInsn : MBB) {
260 DenseMap<const MachineInstr *, LexicalScope *> &MI2ScopeMap) {
312 for (auto &I : *MBB) {
lib/CodeGen/LiveDebugValues.cpp 84 static Register isDbgValueDescribedByReg(const MachineInstr &MI) {
150 DebugVariable(const MachineInstr &MI)
200 const MachineInstr &MI;
222 VarLoc(const MachineInstr &MI, LexicalScopes &LS)
248 static VarLoc CreateEntryLoc(const MachineInstr &MI, LexicalScopes &LS,
258 static VarLoc CreateCopyLoc(const MachineInstr &MI, LexicalScopes &LS,
268 static VarLoc CreateSpillLoc(const MachineInstr &MI, unsigned SpillBase,
281 MachineInstr *BuildDbgValue(MachineFunction &MF) const {
372 using DebugParamMap = SmallDenseMap<const DILocalVariable *, MachineInstr *>;
377 MachineInstr *TransferInst; /// Instruction where this transfer occurs.
448 bool isSpillInstruction(const MachineInstr &MI, MachineFunction *MF);
456 bool isLocationSpill(const MachineInstr &MI, MachineFunction *MF,
461 Optional<VarLoc::SpillLoc> isRestoreInstruction(const MachineInstr &MI,
466 VarLoc::SpillLoc extractSpillBaseRegAndOffset(const MachineInstr &MI);
467 void insertTransferDebugPair(MachineInstr &MI, OpenRangesSet &OpenRanges,
472 void transferDebugValue(const MachineInstr &MI, OpenRangesSet &OpenRanges,
474 void transferSpillOrRestoreInst(MachineInstr &MI, OpenRangesSet &OpenRanges,
476 void emitEntryValues(MachineInstr &MI, OpenRangesSet &OpenRanges,
480 void transferRegisterCopy(MachineInstr &MI, OpenRangesSet &OpenRanges,
482 void transferRegisterDef(MachineInstr &MI, OpenRangesSet &OpenRanges,
488 void process(MachineInstr &MI, OpenRangesSet &OpenRanges,
492 void accumulateFragmentMap(MachineInstr &MI, VarToFragments &SeenFragments,
653 LiveDebugValues::extractSpillBaseRegAndOffset(const MachineInstr &MI) {
669 void LiveDebugValues::transferDebugValue(const MachineInstr &MI,
702 void LiveDebugValues::emitEntryValues(MachineInstr &MI,
712 const MachineInstr *CurrDebugInstr = &VarLocIDs[ID].MI;
737 MachineInstr &MI, OpenRangesSet &OpenRanges, TransferMap &Transfers,
740 const MachineInstr *DebugInstr = &VarLocIDs[OldVarID].MI;
805 MachineInstr &MI, OpenRangesSet &OpenRanges, VarLocMap &VarLocIDs,
845 bool LiveDebugValues::isSpillInstruction(const MachineInstr &MI,
858 bool LiveDebugValues::isLocationSpill(const MachineInstr &MI,
899 LiveDebugValues::isRestoreInstruction(const MachineInstr &MI,
920 void LiveDebugValues::transferSpillOrRestoreInst(MachineInstr &MI,
996 void LiveDebugValues::transferRegisterCopy(MachineInstr &MI,
1066 void LiveDebugValues::accumulateFragmentMap(MachineInstr &MI,
1117 void LiveDebugValues::process(MachineInstr &MI, OpenRangesSet &OpenRanges,
1243 MachineInstr *MI = DiffIt.BuildDbgValue(*MBB.getParent());
1318 for (auto &MI : First_MBB)
1329 for (auto &MI : MBB) {
1380 for (auto &MI : *MBB)
1408 MachineInstr *MI = VL.BuildDbgValue(MF);
lib/CodeGen/LiveDebugVariables.cpp 425 bool handleDebugValue(MachineInstr &MI, SlotIndex Idx);
433 bool handleDebugLabel(MachineInstr &MI, SlotIndex Idx);
599 bool LDVImpl::handleDebugValue(MachineInstr &MI, SlotIndex Idx) {
658 bool LDVImpl::handleDebugLabel(MachineInstr &MI, SlotIndex Idx) {
774 MachineInstr *MI = MO.getParent();
822 MachineInstr *CopyMI = LIS.getInstructionFromIndex(DstVNI->def);
1244 MachineInstr *MI;
lib/CodeGen/LiveInterval.cpp 900 const MachineInstr *MI = Indexes.getInstructionFromIndex(VNI->def);
983 const MachineInstr &MI = *MO.getParent();
1358 MachineInstr *MI = RI->getParent();
lib/CodeGen/LiveIntervals.cpp 225 for (const MachineInstr &MI : MBB) {
442 SmallVectorImpl<MachineInstr*> *dead) {
462 for (MachineInstr &UseMI : MRI->reg_instructions(Reg)) {
501 SmallVectorImpl<MachineInstr*> *dead) {
515 MachineInstr *MI = getInstructionFromIndex(Def);
530 MachineInstr *MI = getInstructionFromIndex(Def);
563 MachineInstr *UseMI = MO.getParent();
723 MachineInstr *MI = getInstructionFromIndex(RI->end);
855 const MachineInstr &MI) {
868 LiveIntervals::addSegmentToEndOfBlock(unsigned reg, MachineInstr &startInst) {
972 void updateAllRanges(MachineInstr *MI) {
1063 if (MachineInstr *KillMI = LIS.getInstructionFromIndex(OldIdxIn->end))
1364 if (MachineInstr *KillMI = LIS.getInstructionFromIndex(NewIdx))
1412 const MachineInstr &MI = *MO.getParent();
1429 if (MachineInstr *MI = Indexes->getInstructionFromIndex(
1456 void LiveIntervals::handleMove(MachineInstr &MI, bool UpdateFlags) {
1472 void LiveIntervals::handleMoveIntoBundle(MachineInstr &MI,
1473 MachineInstr &BundleStart,
1500 MachineInstr &MI = *I;
1510 for (MachineInstr::mop_iterator OI = MI.operands_begin(),
1597 MachineInstr &MI = *I;
1600 for (MachineInstr::const_mop_iterator MOI = MI.operands_begin(),
lib/CodeGen/LivePhysRegs.cpp 44 void LivePhysRegs::removeDefs(const MachineInstr &MI) {
59 void LivePhysRegs::addUses(const MachineInstr &MI) {
72 void LivePhysRegs::stepBackward(const MachineInstr &MI) {
84 void LivePhysRegs::stepForward(const MachineInstr &MI,
253 for (const MachineInstr &MI : make_range(MBB.rbegin(), MBB.rend()))
289 for (MachineInstr &MI : make_range(MBB.rbegin(), MBB.rend())) {
lib/CodeGen/LiveRangeCalc.cpp 66 const MachineInstr &MI = *MO.getParent();
188 const MachineInstr *MI = MO.getParent();
369 const MachineInstr *MI = Indexes->getInstructionFromIndex(Use);
lib/CodeGen/LiveRangeEdit.cpp 71 const MachineInstr *DefMI,
90 MachineInstr *DefMI = LIS.getInstructionFromIndex(OrigVNI->def);
106 bool LiveRangeEdit::allUsesAvailableAt(const MachineInstr *OrigMI,
186 SmallVectorImpl<MachineInstr*> &Dead) {
187 MachineInstr *DefMI = nullptr, *UseMI = nullptr;
191 MachineInstr *MI = MO.getParent();
229 MachineInstr *FoldMI = TII.foldMemoryOperand(*UseMI, Ops, *DefMI, &LIS);
245 const MachineInstr &MI = *MO.getParent();
260 void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink,
307 for (MachineInstr::mop_iterator MOI = MI->operands_begin(),
392 void LiveRangeEdit::eliminateDeadDefs(SmallVectorImpl<MachineInstr *> &Dead,
lib/CodeGen/LiveRangeShrink.cpp 69 using InstOrderMap = DenseMap<MachineInstr *, unsigned>;
76 static MachineInstr *FindDominatedInstruction(MachineInstr &New,
76 static MachineInstr *FindDominatedInstruction(MachineInstr &New,
77 MachineInstr *Old,
90 for (MachineInstr *I = Old->getNextNode(); M.find(I)->second == OrderNew;
103 for (MachineInstr &I : make_range(Start, Start->getParent()->end()))
120 DenseMap<unsigned, std::pair<unsigned, MachineInstr *>> UseMap;
130 MachineInstr &MI = *Next;
139 MachineInstr *BarrierMI = nullptr;
166 MachineInstr *Insert = nullptr;
198 MachineInstr &DefInstr = *MRI.def_instr_begin(Reg);
210 for (MachineInstr *I = Insert; I && IOM[I] == Barrier;
lib/CodeGen/LiveRegUnits.cpp 44 void LiveRegUnits::stepBackward(const MachineInstr &MI) {
69 void LiveRegUnits::accumulate(const MachineInstr &MI) {
lib/CodeGen/LiveVariables.cpp 59 MachineInstr *
132 MachineInstr &MI) {
182 void LiveVariables::HandleVirtRegDef(unsigned Reg, MachineInstr &MI) {
192 MachineInstr *LiveVariables::FindLastPartialDef(unsigned Reg,
196 MachineInstr *LastDef = nullptr;
199 MachineInstr *Def = PhysRegDef[SubReg];
231 void LiveVariables::HandlePhysRegUse(unsigned Reg, MachineInstr &MI) {
232 MachineInstr *LastDef = PhysRegDef[Reg];
244 MachineInstr *LastPartialDef = FindLastPartialDef(Reg, PartDefRegs);
281 MachineInstr *LiveVariables::FindLastRefOrPartRef(unsigned Reg) {
282 MachineInstr *LastDef = PhysRegDef[Reg];
283 MachineInstr *LastUse = PhysRegUse[Reg];
287 MachineInstr *LastRefOrPartRef = LastUse ? LastUse : LastDef;
292 MachineInstr *Def = PhysRegDef[SubReg];
299 } else if (MachineInstr *Use = PhysRegUse[SubReg]) {
311 bool LiveVariables::HandlePhysRegKill(unsigned Reg, MachineInstr *MI) {
312 MachineInstr *LastDef = PhysRegDef[Reg];
313 MachineInstr *LastUse = PhysRegUse[Reg];
317 MachineInstr *LastRefOrPartRef = LastUse ? LastUse : LastDef;
336 MachineInstr *LastPartDef = nullptr;
341 MachineInstr *Def = PhysRegDef[SubReg];
352 if (MachineInstr *Use = PhysRegUse[SubReg]) {
385 MachineInstr *LastSubRef = FindLastRefOrPartRef(SubReg);
443 void LiveVariables::HandlePhysRegDef(unsigned Reg, MachineInstr *MI,
486 void LiveVariables::UpdatePhysRegDefs(MachineInstr &MI,
500 void LiveVariables::runOnInstr(MachineInstr &MI,
576 for (MachineInstr &MI : *MBB) {
681 void LiveVariables::replaceKillInstruction(unsigned Reg, MachineInstr &OldMI,
682 MachineInstr &NewMI) {
689 void LiveVariables::removeVirtualRegistersKilled(MachineInstr &MI) {
710 for (const auto &BBI : MBB) {
730 const MachineInstr *Def = MRI.getVRegDef(Reg);
783 for (MachineInstr::mop_iterator I = BBI->operands_begin(),
lib/CodeGen/LocalStackSlotAllocation.cpp 61 FrameRef(MachineInstr *I, int64_t Offset, int Idx, unsigned Ord) :
272 const MachineInstr &MI,
304 for (MachineInstr &MI : BB) {
348 MachineInstr &MI = *FR.getMachineInstr();
lib/CodeGen/MIRCanonicalizerPass.cpp 99 rescheduleLexographically(std::vector<MachineInstr *> instructions,
104 using StringInstrPair = std::pair<std::string, MachineInstr *>;
107 for (auto *II : instructions) {
157 std::vector<MachineInstr *> Instructions;
158 for (auto &MI : *MBB) {
162 std::map<MachineInstr *, std::vector<MachineInstr *>> MultiUsers;
162 std::map<MachineInstr *, std::vector<MachineInstr *>> MultiUsers;
163 std::map<unsigned, MachineInstr *> MultiUserLookup;
165 std::vector<MachineInstr *> PseudoIdempotentInstructions;
167 for (auto *II : Instructions) {
183 for (auto *II : Instructions) {
221 MachineInstr *Def = II;
223 MachineInstr *UseToBringDefCloserTo = nullptr;
226 MachineInstr *UseInst = UO.getParent();
310 std::vector<MachineInstr *> Copies;
311 for (MachineInstr &MI : MBB->instrs()) {
316 for (MachineInstr *MI : Copies) {
356 for (auto &MI : *MBB) {
427 MachineInstr &MI = *MII++;
lib/CodeGen/MIRParser/MIParser.cpp 397 bool parse(MachineInstr *&MI);
502 bool assignRegisterTies(MachineInstr &MI,
800 MachineInstr *PrevMI = nullptr;
812 MachineInstr *MI = nullptr;
817 PrevMI->setFlag(MachineInstr::BundledSucc);
818 MI->setFlag(MachineInstr::BundledPred);
826 MI->setFlag(MachineInstr::BundledSucc);
884 bool MIParser::parse(MachineInstr *&MI) {
1144 Flags |= MachineInstr::FrameSetup;
1146 Flags |= MachineInstr::FrameDestroy;
1148 Flags |= MachineInstr::FmNoNans;
1150 Flags |= MachineInstr::FmNoInfs;
1152 Flags |= MachineInstr::FmNsz;
1154 Flags |= MachineInstr::FmArcp;
1156 Flags |= MachineInstr::FmContract;
1158 Flags |= MachineInstr::FmAfn;
1160 Flags |= MachineInstr::FmReassoc;
1162 Flags |= MachineInstr::NoUWrap;
1164 Flags |= MachineInstr::NoSWrap;
1166 Flags |= MachineInstr::IsExact;
1168 Flags |= MachineInstr::FPExcept;
1356 bool MIParser::assignRegisterTies(MachineInstr &MI,
lib/CodeGen/MIRParser/MIRParser.cpp 322 for (const MachineInstr &MI : MBB) {
361 if (!CallI->isCall(MachineInstr::IgnoreBundle))
614 for (const MachineInstr &MI : MBB) {
lib/CodeGen/MIRPrinter.cpp 162 void print(const MachineInstr &MI);
164 void print(const MachineInstr &MI, unsigned OpIdx,
554 for (const MachineInstr &MI : MBB) {
688 const MachineInstr &MI = *I;
695 if (!IsInBundle && MI.getFlag(MachineInstr::BundledSucc)) {
705 void MIPrinter::print(const MachineInstr &MI) {
731 if (MI.getFlag(MachineInstr::FrameSetup))
733 if (MI.getFlag(MachineInstr::FrameDestroy))
735 if (MI.getFlag(MachineInstr::FmNoNans))
737 if (MI.getFlag(MachineInstr::FmNoInfs))
739 if (MI.getFlag(MachineInstr::FmNsz))
741 if (MI.getFlag(MachineInstr::FmArcp))
743 if (MI.getFlag(MachineInstr::FmContract))
745 if (MI.getFlag(MachineInstr::FmAfn))
747 if (MI.getFlag(MachineInstr::FmReassoc))
749 if (MI.getFlag(MachineInstr::NoUWrap))
751 if (MI.getFlag(MachineInstr::NoSWrap))
753 if (MI.getFlag(MachineInstr::IsExact))
755 if (MI.getFlag(MachineInstr::FPExcept))
818 void MIPrinter::print(const MachineInstr &MI, unsigned OpIdx,
lib/CodeGen/MIRVRegNamerUtils.cpp 51 std::vector<MachineInstr *> populateCandidates(MachineBasicBlock *MBB) {
52 std::vector<MachineInstr *> Candidates;
56 MachineInstr *MI = &*II;
83 std::vector<MachineInstr *> &VisitedMIs,
122 MachineInstr *Def = RI->getParent();
260 std::vector<MachineInstr *> Candidates = populateCandidates(MBB);
261 std::vector<MachineInstr *> VisitedMIs;
lib/CodeGen/MachineBasicBlock.cpp 110 void ilist_traits<MachineInstr>::addNodeToList(MachineInstr *N) {
123 void ilist_traits<MachineInstr>::removeNodeFromList(MachineInstr *N) {
155 void ilist_traits<MachineInstr>::deleteNode(MachineInstr *MI) {
410 for (const MachineInstr &MI : instrs()) {
426 if (!IsInBundle && MI.getFlag(MachineInstr::BundledSucc)) {
905 MachineInstr *MI = &*I;
906 for (MachineInstr::mop_iterator OI = MI->operands_begin(),
925 MachineInstr *MI = &*I;
927 for (MachineInstr::mop_iterator OI = MI->operands_begin(),
943 SmallVector<MachineInstr*, 4> Terminators;
953 SmallVector<MachineInstr*, 4> NewTerminators;
958 for (SmallVectorImpl<MachineInstr*>::iterator I = Terminators.begin(),
973 for (MachineInstr &MI : NMBB->instrs()) {
1143 static void unbundleSingleMI(MachineInstr *MI) {
1160 MachineInstr *MachineBasicBlock::remove_instr(MachineInstr *MI) {
1160 MachineInstr *MachineBasicBlock::remove_instr(MachineInstr *MI) {
1162 MI->clearFlag(MachineInstr::BundledPred);
1163 MI->clearFlag(MachineInstr::BundledSucc);
1173 MI->setFlag(MachineInstr::BundledPred);
1174 MI->setFlag(MachineInstr::BundledSucc);
1218 for (MachineInstr &MI : phis())
lib/CodeGen/MachineCSE.cpp 100 ScopedHashTableVal<MachineInstr *, unsigned>>;
102 ScopedHashTable<MachineInstr *, unsigned, MachineInstrExpressionTrait,
109 DenseMap<MachineInstr *, MachineBasicBlock *, MachineInstrExpressionTrait>
112 SmallVector<MachineInstr *, 64> Exps;
115 bool PerformTrivialCopyPropagation(MachineInstr *MI,
120 bool hasLivePhysRegDefUses(const MachineInstr *MI,
124 bool PhysRegDefsReach(MachineInstr *CSMI, MachineInstr *MI,
124 bool PhysRegDefsReach(MachineInstr *CSMI, MachineInstr *MI,
127 bool isCSECandidate(MachineInstr *MI);
129 MachineBasicBlock *CSBB, MachineInstr *MI);
137 bool isPRECandidate(MachineInstr *MI);
164 bool MachineCSE::PerformTrivialCopyPropagation(MachineInstr *MI,
174 MachineInstr *DefMI = MRI->getVRegDef(Reg);
276 bool MachineCSE::hasLivePhysRegDefUses(const MachineInstr *MI,
328 bool MachineCSE::PhysRegDefsReach(MachineInstr *CSMI, MachineInstr *MI,
328 bool MachineCSE::PhysRegDefsReach(MachineInstr *CSMI, MachineInstr *MI,
395 bool MachineCSE::isCSECandidate(MachineInstr *MI) {
432 MachineBasicBlock *CSBB, MachineInstr *MI) {
440 SmallPtrSet<MachineInstr*, 8> CSUses;
441 for (MachineInstr &MI : MRI->use_nodbg_instructions(CSReg)) {
444 for (MachineInstr &MI : MRI->use_nodbg_instructions(Reg)) {
473 for (MachineInstr &MI : MRI->use_nodbg_instructions(Reg)) {
487 for (MachineInstr &UseMI : MRI->use_nodbg_instructions(CSReg)) {
517 MachineInstr *MI = &*I;
541 if (MachineInstr *NewMI = TII->commuteInstruction(*MI)) {
572 MachineInstr *CSMI = Exps[CSVN];
586 MachineInstr *CSMI = Exps[CSVN];
646 MachineInstr *Def = MRI->getUniqueVRegDef(NewReg);
771 bool MachineCSE::isPRECandidate(MachineInstr *MI) {
795 MachineInstr *MI = &*I;
831 MachineInstr &NewMI =
lib/CodeGen/MachineCombiner.cpp 87 MachineInstr *getOperandDef(const MachineOperand &MO);
88 unsigned getDepth(SmallVectorImpl<MachineInstr *> &InsInstrs,
91 unsigned getLatency(MachineInstr *Root, MachineInstr *NewRoot,
91 unsigned getLatency(MachineInstr *Root, MachineInstr *NewRoot,
94 improvesCriticalPathLen(MachineBasicBlock *MBB, MachineInstr *Root,
96 SmallVectorImpl<MachineInstr *> &InsInstrs,
97 SmallVectorImpl<MachineInstr *> &DelInstrs,
102 SmallVectorImpl<MachineInstr *> &InsInstrs,
103 SmallVectorImpl<MachineInstr *> &DelInstrs);
104 void instr2instrSC(SmallVectorImpl<MachineInstr *> &Instrs,
107 getLatenciesForInstrSequences(MachineInstr &MI,
108 SmallVectorImpl<MachineInstr *> &InsInstrs,
109 SmallVectorImpl<MachineInstr *> &DelInstrs,
112 void verifyPatternOrder(MachineBasicBlock *MBB, MachineInstr &Root,
137 MachineInstr *MachineCombiner::getOperandDef(const MachineOperand &MO) {
138 MachineInstr *DefInstr = nullptr;
157 MachineCombiner::getDepth(SmallVectorImpl<MachineInstr *> &InsInstrs,
167 for (auto *InstrPtr : InsInstrs) { // for each Use
182 MachineInstr *DefInstr = InsInstrs[II->second];
191 MachineInstr *DefInstr = getOperandDef(MO);
216 unsigned MachineCombiner::getLatency(MachineInstr *Root, MachineInstr *NewRoot,
216 unsigned MachineCombiner::getLatency(MachineInstr *Root, MachineInstr *NewRoot,
235 MachineInstr *UseMO = RI->getParent();
275 MachineInstr &MI, SmallVectorImpl<MachineInstr *> &InsInstrs,
275 MachineInstr &MI, SmallVectorImpl<MachineInstr *> &InsInstrs,
276 SmallVectorImpl<MachineInstr *> &DelInstrs,
281 MachineInstr *NewRoot = InsInstrs.back();
299 MachineBasicBlock *MBB, MachineInstr *Root,
301 SmallVectorImpl<MachineInstr *> &InsInstrs,
302 SmallVectorImpl<MachineInstr *> &DelInstrs,
358 SmallVectorImpl<MachineInstr *> &Instrs,
360 for (auto *InstrPtr : Instrs) {
371 SmallVectorImpl<MachineInstr *> &InsInstrs,
372 SmallVectorImpl<MachineInstr *> &DelInstrs) {
430 static void insertDeleteInstructions(MachineBasicBlock *MBB, MachineInstr &MI,
431 SmallVector<MachineInstr *, 16> InsInstrs,
432 SmallVector<MachineInstr *, 16> DelInstrs,
436 for (auto *InstrPtr : InsInstrs)
439 for (auto *InstrPtr : DelInstrs) {
451 for (auto *InstrPtr : InsInstrs)
462 MachineBasicBlock *MBB, MachineInstr &Root,
467 SmallVector<MachineInstr *, 16> InsInstrs;
468 SmallVector<MachineInstr *, 16> DelInstrs;
511 auto &MI = *BlockIter++;
547 SmallVector<MachineInstr *, 16> InsInstrs;
548 SmallVector<MachineInstr *, 16> DelInstrs;
620 for (auto *InstrPtr : InsInstrs)
lib/CodeGen/MachineCopyPropagation.cpp 78 MachineInstr *MI;
110 if (MachineInstr *MI = I->second.MI)
119 void trackCopy(MachineInstr *MI, const TargetRegisterInfo &TRI) {
143 MachineInstr *findCopyForUnit(unsigned RegUnit, const TargetRegisterInfo &TRI,
153 MachineInstr *findAvailCopy(MachineInstr &DestCopy, unsigned Reg,
153 MachineInstr *findAvailCopy(MachineInstr &DestCopy, unsigned Reg,
158 MachineInstr *AvailCopy =
168 for (const MachineInstr &MI :
211 void ReadRegister(unsigned Reg, MachineInstr &Reader,
214 bool eraseIfRedundant(MachineInstr &Copy, unsigned Src, unsigned Def);
215 void forwardUses(MachineInstr &MI);
216 bool isForwardableRegClassCopy(const MachineInstr &Copy,
217 const MachineInstr &UseI, unsigned UseIdx);
218 bool hasImplicitOverlap(const MachineInstr &MI, const MachineOperand &Use);
221 SmallSetVector<MachineInstr *, 8> MaybeDeadCopies;
224 DenseMap<MachineInstr*, SmallVector<MachineInstr*, 2>> CopyDbgUsers;
224 DenseMap<MachineInstr*, SmallVector<MachineInstr*, 2>> CopyDbgUsers;
240 void MachineCopyPropagation::ReadRegister(unsigned Reg, MachineInstr &Reader,
246 if (MachineInstr *Copy = Tracker.findCopyForUnit(*RUI, *TRI)) {
263 static bool isNopCopy(const MachineInstr &PreviousCopy, unsigned Src,
280 bool MachineCopyPropagation::eraseIfRedundant(MachineInstr &Copy, unsigned Src,
288 MachineInstr *PrevCopy = Tracker.findAvailCopy(Copy, Def, *TRI);
305 for (MachineInstr &MI :
318 bool MachineCopyPropagation::isForwardableRegClassCopy(const MachineInstr &Copy,
319 const MachineInstr &UseI,
369 bool MachineCopyPropagation::hasImplicitOverlap(const MachineInstr &MI,
381 void MachineCopyPropagation::forwardUses(MachineInstr &MI) {
409 MachineInstr *Copy = Tracker.findAvailCopy(MI, MOUse.getReg(), *TRI);
452 for (MachineInstr &KMI :
465 MachineInstr *MI = &*I;
582 for (SmallSetVector<MachineInstr *, 8>::iterator DI =
585 MachineInstr *MaybeDead = *DI;
619 for (MachineInstr *MaybeDead : MaybeDeadCopies) {
lib/CodeGen/MachineFrameInfo.cpp 198 for (const MachineInstr &MI : MBB) {
lib/CodeGen/MachineFunction.cpp 143 void MachineFunction::handleInsertion(MachineInstr &MI) {
148 void MachineFunction::handleRemoval(MachineInstr &MI) {
326 MachineInstr *MachineFunction::CreateMachineInstr(const MCInstrDesc &MCID,
329 return new (InstructionRecycler.Allocate<MachineInstr>(Allocator))
330 MachineInstr(*this, MCID, DL, NoImp);
335 MachineInstr *
336 MachineFunction::CloneMachineInstr(const MachineInstr *Orig) {
337 return new (InstructionRecycler.Allocate<MachineInstr>(Allocator))
338 MachineInstr(*this, *Orig);
341 MachineInstr &MachineFunction::CloneMachineInstrBundle(MachineBasicBlock &MBB,
343 MachineInstr *FirstClone = nullptr;
346 MachineInstr *Cloned = CloneMachineInstr(&*I);
366 MachineFunction::DeleteMachineInstr(MachineInstr *MI) {
450 MachineInstr::ExtraInfo *MachineFunction::createMIExtraInfo(
453 return MachineInstr::ExtraInfo::create(Allocator, MMOs, PreInstrSymbol,
826 void MachineFunction::moveCallSiteInfo(const MachineInstr *Old,
827 const MachineInstr *New) {
839 void MachineFunction::eraseCallSiteInfo(const MachineInstr *MI) {
846 void MachineFunction::copyCallSiteInfo(const MachineInstr *Old,
847 const MachineInstr *New) {
lib/CodeGen/MachineInstr.cpp 79 static const MachineFunction *getMFIfAvailable(const MachineInstr &MI) {
88 static void tryToGetTargetInfo(const MachineInstr &MI,
134 MachineInstr::MachineInstr(MachineFunction &MF, const MachineInstr &MI)
382 void MachineInstr::cloneMemRefs(MachineFunction &MF, const MachineInstr &MI) {
417 ArrayRef<const MachineInstr *> MIs) {
442 for (const MachineInstr &MI : make_pointee_range(MIs.slice(1))) {
507 const MachineInstr &MI) {
520 uint16_t MachineInstr::mergeFlagsWith(const MachineInstr &Other) const {
532 MIFlags |= MachineInstr::MIFlag::NoSWrap;
534 MIFlags |= MachineInstr::MIFlag::NoUWrap;
540 MIFlags |= MachineInstr::MIFlag::IsExact;
546 MIFlags |= MachineInstr::MIFlag::FmNoNans;
548 MIFlags |= MachineInstr::MIFlag::FmNoInfs;
550 MIFlags |= MachineInstr::MIFlag::FmNsz;
552 MIFlags |= MachineInstr::MIFlag::FmArcp;
554 MIFlags |= MachineInstr::MIFlag::FmContract;
556 MIFlags |= MachineInstr::MIFlag::FmAfn;
558 MIFlags |= MachineInstr::MIFlag::FmReassoc;
584 bool MachineInstr::isIdenticalTo(const MachineInstr &Other,
659 MachineInstr *MachineInstr::removeFromParent() {
664 MachineInstr *MachineInstr::removeFromBundle() {
680 MachineInstr *MI = (MachineInstr *)this;
1191 bool MachineInstr::mayAlias(AAResults *AA, const MachineInstr &Other,
1399 const MachineInstr &MI) {
1517 if (getFlag(MachineInstr::FrameSetup))
1519 if (getFlag(MachineInstr::FrameDestroy))
1521 if (getFlag(MachineInstr::FmNoNans))
1523 if (getFlag(MachineInstr::FmNoInfs))
1525 if (getFlag(MachineInstr::FmNsz))
1527 if (getFlag(MachineInstr::FmArcp))
1529 if (getFlag(MachineInstr::FmContract))
1531 if (getFlag(MachineInstr::FmAfn))
1533 if (getFlag(MachineInstr::FmReassoc))
1535 if (getFlag(MachineInstr::NoUWrap))
1537 if (getFlag(MachineInstr::NoSWrap))
1539 if (getFlag(MachineInstr::IsExact))
1541 if (getFlag(MachineInstr::FPExcept))
1977 MachineInstrExpressionTrait::getHashValue(const MachineInstr* const &MI) {
2054 MachineInstr *MI = BuildMI(MF, DL, MCID, IsIndirect, Reg, Variable, Expr);
2065 MachineInstr *MI = BuildMI(MF, DL, MCID, IsIndirect, MO, Variable, Expr);
2072 static const DIExpression *computeExprForSpill(const MachineInstr &MI) {
2085 MachineInstr *llvm::buildDbgValueForSpill(MachineBasicBlock &BB,
2097 void llvm::updateDbgValueForSpill(MachineInstr &Orig, int FrameIndex) {
2105 SmallVectorImpl<MachineInstr *> &DbgValues) {
2106 MachineInstr &MI = *this;
2123 SmallVector<MachineInstr *, 2> DbgValues;
2131 auto *DI = MO.getParent();
2141 for (auto *DBI : DbgValues)
lib/CodeGen/MachineInstrBundle.cpp 54 MachineInstr *MI = &*MII;
231 if (MII->getFlag(MachineInstr::FrameSetup))
232 MIB.setMIFlag(MachineInstr::FrameSetup);
233 if (MII->getFlag(MachineInstr::FrameDestroy))
234 MIB.setMIFlag(MachineInstr::FrameDestroy);
286 SmallVectorImpl<std::pair<MachineInstr*, unsigned> > *Ops) {
lib/CodeGen/MachineLICM.cpp 132 DenseMap<unsigned, std::vector<const MachineInstr *>> CSEMap;
170 MachineInstr *MI;
174 CandidateInfo(MachineInstr *mi, unsigned def, int fi)
180 void HoistPostRA(MachineInstr *MI, unsigned Def);
182 void ProcessMI(MachineInstr *MI, BitVector &PhysRegDefs,
188 bool IsLICMCandidate(MachineInstr &I);
190 bool IsLoopInvariantInst(MachineInstr &I);
192 bool HasLoopPHIUse(const MachineInstr *MI) const;
194 bool HasHighOperandLatency(MachineInstr &MI, unsigned DefIdx,
197 bool IsCheapInstruction(MachineInstr &MI) const;
202 void UpdateBackTraceRegPressure(const MachineInstr *MI);
204 bool IsProfitableToHoist(MachineInstr &MI);
225 DenseMap<unsigned, int> calcRegisterCost(const MachineInstr *MI,
229 void UpdateRegPressure(const MachineInstr *MI,
232 MachineInstr *ExtractHoistableLoad(MachineInstr *MI);
232 MachineInstr *ExtractHoistableLoad(MachineInstr *MI);
234 const MachineInstr *
235 LookForDuplicate(const MachineInstr *MI,
236 std::vector<const MachineInstr *> &PrevMIs);
239 MachineInstr *MI,
240 DenseMap<unsigned, std::vector<const MachineInstr *>>::iterator &CI);
242 bool MayCSE(MachineInstr *MI);
244 bool Hoist(MachineInstr *MI, MachineBasicBlock *Preheader);
374 static bool InstructionStoresToFI(const MachineInstr *MI, int FI) {
397 void MachineLICMBase::ProcessMI(MachineInstr *MI,
517 for (MachineInstr &MI : *BB)
552 MachineInstr *MI = Candidate.MI;
577 for (MachineInstr &MI : *BB) {
589 void MachineLICMBase::HoistPostRA(MachineInstr *MI, unsigned Def) {
737 MachineInstr *MI = &*MII;
758 SmallVector<MachineInstr *, 8> Candidates;
767 for (MachineInstr *I : Candidates) {
775 for (MachineInstr &MI : MRI->use_instructions(MO.getReg())) {
821 for (const MachineInstr &MI : *BB)
826 void MachineLICMBase::UpdateRegPressure(const MachineInstr *MI,
845 MachineLICMBase::calcRegisterCost(const MachineInstr *MI, bool ConsiderSeen,
889 static bool mayLoadFromGOTOrConstantPool(MachineInstr &MI) {
912 static bool isInvariantStore(const MachineInstr &MI,
946 static bool isCopyFeedingInvariantStore(const MachineInstr &MI,
969 for (MachineInstr &UseMI : MRI->use_instructions(CopyDstReg)) {
978 bool MachineLICMBase::IsLICMCandidate(MachineInstr &I) {
1003 bool MachineLICMBase::IsLoopInvariantInst(MachineInstr &I) {
1056 bool MachineLICMBase::HasLoopPHIUse(const MachineInstr *MI) const {
1057 SmallVector<const MachineInstr*, 8> Work(1, MI);
1066 for (MachineInstr &UseMI : MRI->use_instructions(Reg)) {
1091 bool MachineLICMBase::HasHighOperandLatency(MachineInstr &MI,
1097 for (MachineInstr &UseMI : MRI->use_nodbg_instructions(Reg)) {
1123 bool MachineLICMBase::IsCheapInstruction(MachineInstr &MI) const {
1174 void MachineLICMBase::UpdateBackTraceRegPressure(const MachineInstr *MI) {
1188 bool MachineLICMBase::IsProfitableToHoist(MachineInstr &MI) {
1283 MachineInstr *MachineLICMBase::ExtractHoistableLoad(MachineInstr *MI) {
1283 MachineInstr *MachineLICMBase::ExtractHoistableLoad(MachineInstr *MI) {
1308 SmallVector<MachineInstr *, 2> NewMIs;
1342 for (MachineInstr &MI : *BB)
1348 const MachineInstr*
1349 MachineLICMBase::LookForDuplicate(const MachineInstr *MI,
1350 std::vector<const MachineInstr*> &PrevMIs) {
1351 for (const MachineInstr *PrevMI : PrevMIs)
1362 bool MachineLICMBase::EliminateCSE(MachineInstr *MI,
1363 DenseMap<unsigned, std::vector<const MachineInstr *>>::iterator &CI) {
1369 if (const MachineInstr *Dup = LookForDuplicate(MI, CI->second)) {
1420 bool MachineLICMBase::MayCSE(MachineInstr *MI) {
1422 DenseMap<unsigned, std::vector<const MachineInstr *>>::iterator
1435 bool MachineLICMBase::Hoist(MachineInstr *MI, MachineBasicBlock *Preheader) {
1468 DenseMap<unsigned, std::vector<const MachineInstr *>>::iterator
lib/CodeGen/MachineLoopUtils.cpp 18 MachineInstr &findEquivalentInstruction(MachineInstr &MI,
18 MachineInstr &findEquivalentInstruction(MachineInstr &MI,
47 for (MachineInstr &MI : *Loop) {
48 MachineInstr *NewMI = MF.CloneMachineInstr(&MI);
80 MachineInstr &MI = *I;
84 MachineInstr &OrigPhi = findEquivalentInstruction(MI, Loop);
lib/CodeGen/MachineOperand.cpp 41 if (const MachineInstr *MI = MO.getParent())
122 const MachineInstr *MI = getParent();
127 return !MI->hasExtraDefRegAllocReq(MachineInstr::IgnoreBundle);
130 return !MI->hasExtraSrcRegAllocReq(MachineInstr::IgnoreBundle);
lib/CodeGen/MachineOptimizationRemarkEmitter.cpp 24 StringRef MKey, const MachineInstr &MI)
lib/CodeGen/MachineOutliner.cpp 617 DenseMap<MachineInstr *, unsigned, MachineInstrExpressionTrait>
663 MachineInstr &MI = *It;
665 DenseMap<MachineInstr *, unsigned, MachineInstrExpressionTrait>::iterator
1140 MachineInstr *NewMI = MF.CloneMachineInstr(&*I);
lib/CodeGen/MachinePipeliner.cpp 352 for (MachineInstr &PI : make_range(B.begin(), B.getFirstNonPHI())) {
531 DenseMap<MachineInstr *, int> Cycles, Stages;
532 std::vector<MachineInstr *> OrderedInsts;
541 DenseMap<MachineInstr *, std::pair<unsigned, int64_t>> NewInstrChanges;
581 static void getPhiRegs(MachineInstr &Phi, MachineBasicBlock *Loop,
597 static unsigned getLoopPhiReg(MachineInstr &Phi, MachineBasicBlock *LoopBB) {
628 static bool isDependenceBarrier(MachineInstr &MI, AliasAnalysis *AA) {
638 static void getUnderlyingObjects(const MachineInstr *MI,
665 MachineInstr &MI = *SU.getInstr();
690 MachineInstr &LdMI = *Load->getInstr();
765 MachineInstr *MI = I.getInstr();
767 for (MachineInstr::mop_iterator MOI = MI->operands_begin(),
779 MachineInstr *UseMI = &*UI;
797 MachineInstr *DefMI = MRI.getUniqueVRegDef(Reg);
821 MachineInstr *PMI = PI.getSUnit()->getInstr();
852 MachineInstr *DefMI = MRI.getUniqueVRegDef(OrigBase);
859 MachineInstr *LastMI = MRI.getUniqueVRegDef(NewBase);
916 unsigned minFuncUnits(const MachineInstr *Inst, unsigned &F) const {
963 void calcCriticalResources(MachineInstr &MI) {
996 bool operator()(const MachineInstr *IS1, const MachineInstr *IS2) const {
996 bool operator()(const MachineInstr *IS1, const MachineInstr *IS2) const {
1028 PriorityQueue<MachineInstr *, std::vector<MachineInstr *>, FuncUnitSorter>
1028 PriorityQueue<MachineInstr *, std::vector<MachineInstr *>, FuncUnitSorter>
1037 MachineInstr *MI = FuncUnitOrder.top();
1300 MachineInstr *TmpMI = TmpSU->getInstr();
1323 MachineInstr *TmpMI = TmpSU->getInstr();
1551 const MachineInstr *MI = SU->getInstr();
2056 bool SwingSchedulerDAG::computeDelta(MachineInstr &MI, unsigned &Delta) {
2070 MachineInstr *BaseDef = MRI.getVRegDef(BaseReg);
2093 bool SwingSchedulerDAG::canUseLastOffsetValue(MachineInstr *MI,
2108 MachineInstr *Phi = MRI.getVRegDef(BaseReg);
2117 MachineInstr *PrevDef = MRI.getVRegDef(PrevReg);
2132 MachineInstr *NewMI = MF.CloneMachineInstr(MI);
2149 void SwingSchedulerDAG::applyInstrChange(MachineInstr *MI,
2160 MachineInstr *LoopDef = findDefInLoop(BaseReg);
2166 MachineInstr *NewMI = MF.CloneMachineInstr(MI);
2186 MachineInstr *SwingSchedulerDAG::findDefInLoop(unsigned Reg) {
2187 SmallPtrSet<MachineInstr *, 8> Visited;
2188 MachineInstr *Def = MRI.getVRegDef(Reg);
2216 MachineInstr *SI = Source->getInstr();
2217 MachineInstr *DI = Dep.getSUnit()->getInstr();
2248 MachineInstr *Def = MRI.getVRegDef(BaseOpS->getReg());
2254 MachineInstr *LoopDef = MRI.getVRegDef(LoopVal);
2461 MachineInstr *MI = SU->getInstr();
2588 bool SMSchedule::isLoopCarried(SwingSchedulerDAG *SSD, MachineInstr &Phi) {
2617 MachineInstr *Def, MachineOperand &MO) {
2622 MachineInstr *Phi = MRI.getVRegDef(MO.getReg());
2764 MachineInstr *MI = SU->getInstr();
2778 MachineInstr *NewMI = MF.CloneMachineInstr(MI);
3013 bool ResourceManager::canReserveResources(const MachineInstr &MI) const {
3017 void ResourceManager::reserveResources(const MachineInstr &MI) {
lib/CodeGen/MachineRegisterInfo.cpp 135 MachineInstr *MI = MO.getParent();
222 MachineInstr *MI = MO->getParent();
400 MachineInstr *MachineRegisterInfo::getVRegDef(unsigned Reg) const {
411 MachineInstr *MachineRegisterInfo::getUniqueVRegDef(unsigned Reg) const {
508 for (MachineInstr &I : use_instructions(Reg))
551 MachineInstr *UseMI = &*I;
557 static const Function *getCalledFunction(const MachineInstr &MI) {
570 const MachineInstr &MI = *MO.getParent();
lib/CodeGen/MachineSSAUpdater.cpp 44 SmallVectorImpl<MachineInstr*> *NewPHI)
152 MachineInstr *NewDef = InsertNewDef(TargetOpcode::IMPLICIT_DEF,
211 MachineBasicBlock *findCorrespondingPred(const MachineInstr *MI,
224 MachineInstr *UseMI = U.getParent();
245 using PhiT = MachineInstr;
254 MachineInstr *PHI;
258 explicit PHI_iterator(MachineInstr *P) // begin iterator
260 PHI_iterator(MachineInstr *P, bool) // end iterator
294 MachineInstr *NewDef = InsertNewDef(TargetOpcode::IMPLICIT_DEF,
306 MachineInstr *PHI = InsertNewDef(TargetOpcode::PHI, BB, Loc,
314 static void AddPHIOperand(MachineInstr *PHI, unsigned Val,
320 static MachineInstr *InstrIsPHI(MachineInstr *I) {
320 static MachineInstr *InstrIsPHI(MachineInstr *I) {
328 static MachineInstr *ValueIsPHI(unsigned Val, MachineSSAUpdater *Updater) {
334 static MachineInstr *ValueIsNewPHI(unsigned Val, MachineSSAUpdater *Updater) {
335 MachineInstr *PHI = ValueIsPHI(Val, Updater);
343 static unsigned GetPHIValue(MachineInstr *PHI) {
lib/CodeGen/MachineScheduler.cpp 488 MachineInstr &MI = *std::prev(I);
714 MachineInstr *MI, MachineBasicBlock::iterator InsertPos) {
779 MachineInstr *MI = SU->getInstr();
893 for (std::vector<std::pair<MachineInstr *, MachineInstr *>>::iterator
893 for (std::vector<std::pair<MachineInstr *, MachineInstr *>>::iterator
895 std::pair<MachineInstr *, MachineInstr *> P = *std::prev(DI);
895 std::pair<MachineInstr *, MachineInstr *> P = *std::prev(DI);
896 MachineInstr *DbgValue = P.first;
929 const MachineInstr &MI = *SU.getInstr();
1331 MachineInstr *DefMI = LIS->getInstructionFromIndex(DefVNI->def);
1388 MachineInstr *MI = SU->getInstr();
1688 MachineInstr *Copy = CopySU->getInstr();
1756 MachineInstr *GlobalDef = LIS->getInstructionFromIndex(GlobalSegment->start);
1768 MachineInstr *LastLocalDef = LIS->getInstructionFromIndex(LastLocalVN->def);
1782 MachineInstr *FirstLocalDef =
2912 const MachineInstr *MI = SU->getInstr();
3268 MachineInstr *Copy = DepSU->getInstr();
lib/CodeGen/MachineSink.cpp 109 DenseMap<unsigned, TinyPtrVector<MachineInstr *>> SeenDbgUsers;
138 void ProcessDbgInst(MachineInstr &MI);
139 bool isWorthBreakingCriticalEdge(MachineInstr &MI,
155 bool PostponeSplitCriticalEdge(MachineInstr &MI,
159 bool SinkInstruction(MachineInstr &MI, bool &SawStore,
166 void SalvageUnsunkDebugUsersOfCopy(MachineInstr &,
171 MachineBasicBlock *FindSuccToSinkTo(MachineInstr &MI, MachineBasicBlock *MBB,
173 bool isProfitableToSinkTo(unsigned Reg, MachineInstr &MI,
178 bool PerformTrivialForwardCoalescing(MachineInstr &MI,
201 bool MachineSinking::PerformTrivialForwardCoalescing(MachineInstr &MI,
217 MachineInstr *DefMI = MRI->getVRegDef(SrcReg);
266 MachineInstr *UseInst = MO.getParent();
280 MachineInstr *UseInst = MO.getParent();
372 MachineInstr &MI = *I; // The instruction to sink.
405 void MachineSinking::ProcessDbgInst(MachineInstr &MI) {
417 bool MachineSinking::isWorthBreakingCriticalEdge(MachineInstr &MI,
459 MachineInstr *DefMI = MRI->getVRegDef(Reg);
468 bool MachineSinking::PostponeSplitCriticalEdge(MachineInstr &MI,
539 bool MachineSinking::isProfitableToSinkTo(unsigned Reg, MachineInstr &MI,
559 for (MachineInstr &UseInst : MRI->use_nodbg_instructions(Reg)) {
626 MachineSinking::FindSuccToSinkTo(MachineInstr &MI, MachineBasicBlock *MBB,
721 static bool SinkingPreventsImplicitNullCheck(MachineInstr &MI,
762 static void performSink(MachineInstr &MI, MachineBasicBlock &SuccToSinkTo,
789 for (SmallVectorImpl<MachineInstr *>::iterator DBI = DbgValuesToSink.begin(),
792 MachineInstr *DbgMI = *DBI;
793 MachineInstr *NewDbgMI = DbgMI->getMF()->CloneMachineInstr(*DBI);
838 bool MachineSinking::SinkInstruction(MachineInstr &MI, bool &SawStore,
951 SmallVector<MachineInstr *, 4> DbgUsersToSink;
984 MachineInstr &MI, MachineBasicBlock *TargetBlock) {
991 SmallVector<MachineInstr *, 4> DbgDefUsers;
996 for (auto &User : MRI.use_instructions(MO.getReg())) {
1012 for (auto *User : DbgDefUsers) {
1078 DenseMap<unsigned, TinyPtrVector<MachineInstr *>> SeenDbgInstrs;
1143 static void clearKillFlags(MachineInstr *MI, MachineBasicBlock &CurBB,
1152 for (MachineInstr &UI : make_range(NI, CurBB.end())) {
1163 static void updateLiveIn(MachineInstr *MI, MachineBasicBlock *SuccBB,
1178 static bool hasRegisterDependency(MachineInstr *MI,
1245 MachineInstr *MI = &*I;
1309 SetVector<MachineInstr *> DbgValsToSinkSet;
1310 SmallVector<MachineInstr *, 4> DbgValsToSink;
1317 for (auto *MI : SeenDbgInstrs.lookup(Reg))
lib/CodeGen/MachineTraceMetrics.cpp 111 for (const auto &MI : *MBB) {
581 for (const auto &I : *BadMBB)
627 const MachineInstr *DefMI;
631 DataDep(const MachineInstr *DefMI, unsigned DefOp, unsigned UseOp)
650 static bool getDataDeps(const MachineInstr &UseMI,
658 for (MachineInstr::const_mop_iterator I = UseMI.operands_begin(),
680 static void getPHIDeps(const MachineInstr &UseMI,
699 static void updatePhysDepsDownwards(const MachineInstr *UseMI,
706 for (MachineInstr::const_mop_iterator MI = UseMI->operands_begin(),
770 const MachineInstr *DefMI = MTM.MRI->getVRegDef(LIR.Reg);
782 updateDepth(MachineTraceMetrics::TraceBlockInfo &TBI, const MachineInstr &UseMI,
821 updateDepth(const MachineBasicBlock *MBB, const MachineInstr &UseMI,
883 for (const auto &UseMI : *MBB) {
892 static unsigned updatePhysDepsUpwards(const MachineInstr &MI, unsigned Height,
899 for (MachineInstr::const_mop_iterator MOI = MI.operands_begin(),
948 using MIHeightMap = DenseMap<const MachineInstr *, unsigned>;
952 static bool pushDepHeight(const DataDep &Dep, const MachineInstr &UseMI,
978 addLiveIns(const MachineInstr *DefMI, unsigned DefOp,
1074 for (const auto &PHI : *Succ) {
1093 const MachineInstr &MI = *--BI;
1135 const MachineInstr *DefMI = MTM.MRI->getVRegDef(LIR.Reg);
1173 MachineTraceMetrics::Trace::getInstrSlack(const MachineInstr &MI) const {
1181 MachineTraceMetrics::Trace::getPHIDepth(const MachineInstr &PHI) const {
1277 bool MachineTraceMetrics::Trace::isDepInTrace(const MachineInstr &DefMI,
1278 const MachineInstr &UseMI) const {
lib/CodeGen/MachineVerifier.cpp 108 using RegMap = DenseMap<unsigned, const MachineInstr *>;
111 const MachineInstr *FirstNonPHI;
112 const MachineInstr *FirstTerminator;
232 void visitMachineBundleBefore(const MachineInstr *MI);
234 bool verifyVectorElementMatch(LLT Ty0, LLT Ty1, const MachineInstr *MI);
235 void verifyPreISelGenericInstruction(const MachineInstr *MI);
236 void visitMachineInstrBefore(const MachineInstr *MI);
238 void visitMachineInstrAfter(const MachineInstr *MI);
239 void visitMachineBundleAfter(const MachineInstr *MI);
245 void report(const char *msg, const MachineInstr *MI);
261 void verifyInlineAsm(const MachineInstr *MI);
407 const MachineInstr *CurBundle = nullptr;
439 const MachineInstr &MI = *MBBI;
500 void MachineVerifier::report(const char *msg, const MachineInstr *MI) {
827 void MachineVerifier::visitMachineBundleBefore(const MachineInstr *MI) {
851 void MachineVerifier::verifyInlineAsm(const MachineInstr *MI) {
898 const MachineInstr *MI) {
917 void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) {
1480 void MachineVerifier::visitMachineInstrBefore(const MachineInstr *MI) {
1503 for (MachineInstr::mmo_iterator I = MI->memoperands_begin(),
1594 const MachineInstr *MI = MO->getParent();
1940 const MachineInstr *MI = MO->getParent();
2096 void MachineVerifier::visitMachineInstrAfter(const MachineInstr *MI) {}
2102 void MachineVerifier::visitMachineBundleAfter(const MachineInstr *MI) {
2209 for (const MachineInstr &Phi : MBB) {
2404 const MachineInstr *MI = LiveInts->getInstructionFromIndex(VNI->def);
2510 const MachineInstr *MI =
2779 for (const auto &I : *MBB) {
lib/CodeGen/MacroFusion.cpp 146 const MachineInstr &AnchorMI = *AnchorSU.getInstr();
164 const MachineInstr *DepMI = DepSU.getInstr();
lib/CodeGen/ModuloSchedule.cpp 25 for (MachineInstr *MI : ScheduledInstrs)
35 static void getPhiRegs(MachineInstr &Phi, MachineBasicBlock *Loop,
51 static unsigned getInitPhiReg(MachineInstr &Phi, MachineBasicBlock *LoopBB) {
59 static unsigned getLoopPhiReg(MachineInstr &Phi, MachineBasicBlock *LoopBB) {
74 for (MachineInstr *MI : Schedule.getInstructions()) {
88 MachineInstr *UseMI = UseOp.getParent();
132 for (MachineInstr *CI : Schedule.getInstructions()) {
136 MachineInstr *NewMI = cloneInstr(CI, MaxStageCount, StageNum);
147 MachineInstr *NewMI = MF.CloneMachineInstr(&*I);
183 for (auto &I : *BB)
219 MachineInstr *NewMI =
290 for (auto &BBI : *BB) {
293 MachineInstr *In = &BBI;
297 MachineInstr *NewMI = cloneInstr(In, UINT_MAX, 0);
450 MachineInstr *InstOp1 = MRI.getVRegDef(PhiOp1);
472 if (MachineInstr *InstOp1 = MRI.getVRegDef(PhiOp1))
476 MachineInstr *PhiInst = MRI.getVRegDef(LoopVal);
643 if (MachineInstr *InstOp2 = MRI.getVRegDef(PhiOp2))
654 if (MachineInstr *InstOp1 = MRI.getVRegDef(PhiOp1)) {
724 for (MachineInstr::mop_iterator MOI = MI->operands_begin(),
765 MachineInstr *MI = &*BBI;
788 for (auto &PHI : KernelBB->phis()) {
800 MachineInstr *MI = MRI.getVRegDef(LCDef);
806 for (auto &BBJ : make_range(MachineBasicBlock::instr_iterator(MI),
822 for (auto &I : *Epilog)
833 for (MachineInstr &MI : *BB) {
859 SmallVector<MachineInstr *, 4> PrevInsts;
911 bool ModuloScheduleExpander::computeDelta(MachineInstr &MI, unsigned &Delta) {
925 MachineInstr *BaseDef = MRI.getVRegDef(BaseReg);
944 void ModuloScheduleExpander::updateMemOperands(MachineInstr &NewMI,
945 MachineInstr &OldMI,
977 MachineInstr *ModuloScheduleExpander::cloneInstr(MachineInstr *OldMI,
977 MachineInstr *ModuloScheduleExpander::cloneInstr(MachineInstr *OldMI,
980 MachineInstr *NewMI = MF.CloneMachineInstr(OldMI);
999 MachineInstr *ModuloScheduleExpander::cloneAndChangeInstr(
1000 MachineInstr *OldMI, unsigned CurStageNum, unsigned InstStageNum) {
1001 MachineInstr *NewMI = MF.CloneMachineInstr(OldMI);
1009 MachineInstr *LoopDef = findDefInLoop(RegAndOffset.first);
1020 void ModuloScheduleExpander::updateInstruction(MachineInstr *NewMI,
1039 MachineInstr *Def = MRI.getVRegDef(reg);
1058 MachineInstr *ModuloScheduleExpander::findDefInLoop(unsigned Reg) {
1059 SmallPtrSet<MachineInstr *, 8> Visited;
1060 MachineInstr *Def = MRI.getVRegDef(Reg);
1079 MachineInstr *LoopInst = MRI.getVRegDef(LoopVal);
1110 for (auto &PHI : BB->phis()) {
1137 unsigned PhiNum, MachineInstr *Phi, unsigned OldReg, unsigned NewReg,
1147 MachineInstr *UseMI = UseOp.getParent();
1159 MachineInstr *OrigMI = OrigInstr->second;
1189 bool ModuloScheduleExpander::isLoopCarried(MachineInstr &Phi) {
1198 MachineInstr *Use = MRI.getVRegDef(LoopVal);
1222 MachineInstr &MI = *I++;
1263 Register remapUse(Register Reg, MachineInstr &MI);
1295 MachineInstr *FirstMI = nullptr;
1296 for (MachineInstr *MI : S.getInstructions()) {
1316 for (MachineInstr &MI : *BB) {
1340 for (MachineInstr &MI : MRI.use_instructions(Def.getReg())) {
1350 Register KernelRewriter::remapUse(Register Reg, MachineInstr &MI) {
1351 MachineInstr *Producer = MRI.getUniqueVRegDef(Reg);
1472 MachineInstr *MI = MRI.getVRegDef(R);
1525 const SmallPtrSetImpl<MachineInstr *> &IllegalPhis)
1530 MachineInstr *MI = MRI.getVRegDef(MO->getReg());
1638 for (MachineInstr &MI : (*EI)->phis()) {
1640 MachineInstr *Use = MRI.getUniqueVRegDef(Reg);
1658 MachineInstr *MI = &*I++;
1678 for (MachineInstr &MI : BB->phis()) {
1682 SmallVector<MachineInstr *, 4> Uses;
1683 for (MachineInstr &Use : MRI.use_instructions(OldR))
1686 for (MachineInstr *Use : Uses)
1689 MachineInstr *NI = BuildMI(NewBB, DebugLoc(), TII->get(TargetOpcode::PHI), R)
1714 MachineInstr *MI = MRI.getUniqueVRegDef(Reg);
1719 void PeelingModuloScheduleExpander::rewriteUsesOf(MachineInstr *MI) {
1743 SmallVector<std::pair<MachineInstr *, Register>, 4> Subs;
1744 for (MachineInstr &UseMI : MRI.use_instructions(DefMO.getReg())) {
1787 for (MachineInstr &P : Fallthrough->phis()) {
1797 for (MachineInstr &P : Epilog->phis()) {
1860 SmallPtrSet<MachineInstr *, 4> IllegalPhis;
1990 DenseMap<MachineInstr *, int> Cycle, Stage;
1991 std::vector<MachineInstr *> Instrs;
1992 for (MachineInstr &MI : *BB) {
2015 for (MachineInstr *MI : S.getInstructions()) {
lib/CodeGen/OptimizePHIs.cpp 55 using InstrSet = SmallPtrSet<MachineInstr *, 16>;
56 using InstrSetIterator = SmallPtrSetIterator<MachineInstr *>;
58 bool IsSingleValuePHICycle(MachineInstr *MI, unsigned &SingleValReg,
60 bool IsDeadPHICycle(MachineInstr *MI, InstrSet &PHIsInCycle);
96 bool OptimizePHIs::IsSingleValuePHICycle(MachineInstr *MI,
115 MachineInstr *SrcMI = MRI->getVRegDef(SrcReg);
142 bool OptimizePHIs::IsDeadPHICycle(MachineInstr *MI, InstrSet &PHIsInCycle) {
156 for (MachineInstr &UseMI : MRI->use_nodbg_instructions(DstReg)) {
170 MachineInstr *MI = &*MII++;
199 MachineInstr *PhiMI = *PI;
lib/CodeGen/PHIElimination.cpp 112 SmallPtrSet<MachineInstr*, 4> ImpDefs;
116 DenseMap<MachineInstr*, unsigned, MachineInstrExpressionTrait>;
172 for (MachineInstr *DefMI : ImpDefs) {
223 for (MachineInstr &DI : MRI.def_instructions(VirtReg))
230 static bool allPhiOperandsUndefined(const MachineInstr &MPhi,
247 MachineInstr *MPhi = MBB.remove(&*MBB.begin());
262 MachineInstr *PHICopy = nullptr;
301 if (MachineInstr *OldKill = VI.findKill(&MBB)) {
399 MachineInstr *NewSrcInstr = nullptr;
410 if (MachineInstr *DefMI = MRI->getVRegDef(SrcReg))
553 for (const auto &BBI : MBB) {
lib/CodeGen/PHIEliminationUtils.cpp 34 SmallPtrSet<MachineInstr*, 8> DefUsesInMBB;
36 for (MachineInstr &RI : MRI.reg_instructions(SrcReg)) {
lib/CodeGen/PatchableFunction.cpp 41 static bool doesNotGeneratecode(const MachineInstr &MI) {
lib/CodeGen/PeepholeOptimizer.cpp 187 bool optimizeCmpInstr(MachineInstr &MI);
188 bool optimizeExtInstr(MachineInstr &MI, MachineBasicBlock &MBB,
189 SmallPtrSetImpl<MachineInstr*> &LocalMIs);
190 bool optimizeSelect(MachineInstr &MI,
191 SmallPtrSetImpl<MachineInstr *> &LocalMIs);
192 bool optimizeCondBranch(MachineInstr &MI);
193 bool optimizeCoalescableCopy(MachineInstr &MI);
194 bool optimizeUncoalescableCopy(MachineInstr &MI,
195 SmallPtrSetImpl<MachineInstr *> &LocalMIs);
196 bool optimizeRecurrence(MachineInstr &PHI);
198 bool isMoveImmediate(MachineInstr &MI,
200 DenseMap<unsigned, MachineInstr*> &ImmDefMIs);
201 bool foldImmediate(MachineInstr &MI, SmallSet<unsigned, 4> &ImmDefRegs,
202 DenseMap<unsigned, MachineInstr*> &ImmDefMIs);
216 bool foldRedundantCopy(MachineInstr &MI,
218 DenseMap<unsigned, MachineInstr *> &CopyMIs);
228 bool foldRedundantNAPhysCopy(MachineInstr &MI,
229 DenseMap<unsigned, MachineInstr *> &NAPhysToVirtMIs);
231 bool isLoadFoldable(MachineInstr &MI,
236 bool isCoalescableCopy(const MachineInstr &MI) {
246 bool isUncoalescableCopy(const MachineInstr &MI) {
253 MachineInstr &rewriteSource(MachineInstr &CopyLike,
253 MachineInstr &rewriteSource(MachineInstr &CopyLike,
267 RecurrenceInstr(MachineInstr *MI) : MI(MI) {}
268 RecurrenceInstr(MachineInstr *MI, unsigned Idx1, unsigned Idx2)
271 MachineInstr *getMI() const { return MI; }
275 MachineInstr *MI;
288 const MachineInstr *Inst = nullptr;
299 void setInst(const MachineInstr *I) { Inst = I; }
300 const MachineInstr *getInst() const { return Inst; }
366 const MachineInstr *Def = nullptr;
457 optimizeExtInstr(MachineInstr &MI, MachineBasicBlock &MBB,
458 SmallPtrSetImpl<MachineInstr*> &LocalMIs) {
489 for (MachineInstr &UI : MRI->use_nodbg_instructions(DstReg))
500 MachineInstr *UseMI = UseMO.getParent();
566 for (MachineInstr &UI : MRI->use_nodbg_instructions(DstReg))
573 MachineInstr *UseMI = UseMO->getParent();
585 MachineInstr *Copy = BuildMI(*UseMBB, UseMI, UseMI->getDebugLoc(),
606 bool PeepholeOptimizer::optimizeCmpInstr(MachineInstr &MI) {
626 bool PeepholeOptimizer::optimizeSelect(MachineInstr &MI,
627 SmallPtrSetImpl<MachineInstr *> &LocalMIs) {
644 bool PeepholeOptimizer::optimizeCondBranch(MachineInstr &MI) {
754 static MachineInstr &
757 MachineInstr &OrigPHI) {
788 MachineInstr &CopyLike;
791 Rewriter(MachineInstr &CopyLike) : CopyLike(CopyLike) {}
830 CopyRewriter(MachineInstr &MI) : Rewriter(MI) {
868 UncoalescableRewriter(MachineInstr &MI) : Rewriter(MI) {
905 InsertSubregRewriter(MachineInstr &MI) : Rewriter(MI) {
957 ExtractSubregRewriter(MachineInstr &MI, const TargetInstrInfo &TII)
1017 RegSequenceRewriter(MachineInstr &MI) : Rewriter(MI) {
1084 static Rewriter *getCopyRewriter(MachineInstr &MI, const TargetInstrInfo &TII) {
1144 MachineInstr &OrigPHI = const_cast<MachineInstr &>(*Res.getInst());
1145 MachineInstr &NewPHI = insertPHI(*MRI, *TII, NewPHISrcs, OrigPHI);
1167 bool PeepholeOptimizer::optimizeCoalescableCopy(MachineInstr &MI) {
1221 MachineInstr &
1222 PeepholeOptimizer::rewriteSource(MachineInstr &CopyLike,
1234 MachineInstr *NewCopy =
1269 MachineInstr &MI, SmallPtrSetImpl<MachineInstr *> &LocalMIs) {
1269 MachineInstr &MI, SmallPtrSetImpl<MachineInstr *> &LocalMIs) {
1297 MachineInstr &NewCopy = rewriteSource(MI, Def, RewriteMap);
1311 MachineInstr &MI, SmallSet<unsigned, 16> &FoldAsLoadDefCandidates) {
1331 MachineInstr &MI, SmallSet<unsigned, 4> &ImmDefRegs,
1332 DenseMap<unsigned, MachineInstr *> &ImmDefMIs) {
1351 bool PeepholeOptimizer::foldImmediate(MachineInstr &MI,
1353 DenseMap<unsigned, MachineInstr *> &ImmDefMIs) {
1366 DenseMap<unsigned, MachineInstr*>::iterator II = ImmDefMIs.find(Reg);
1390 bool PeepholeOptimizer::foldRedundantCopy(MachineInstr &MI,
1392 DenseMap<unsigned, MachineInstr *> &CopyMIs) {
1409 MachineInstr *PrevCopy = CopyMIs.find(SrcReg)->second;
1439 MachineInstr &MI, DenseMap<unsigned, MachineInstr *> &NAPhysToVirtMIs) {
1439 MachineInstr &MI, DenseMap<unsigned, MachineInstr *> &NAPhysToVirtMIs) {
1512 MachineInstr &MI = *(MRI->use_instr_nodbg_begin(Reg));
1564 bool PeepholeOptimizer::optimizeRecurrence(MachineInstr &PHI) {
1620 SmallPtrSet<MachineInstr*, 16> LocalMIs;
1622 DenseMap<unsigned, MachineInstr*> ImmDefMIs;
1630 DenseMap<unsigned, MachineInstr *> NAPhysToVirtMIs;
1634 DenseMap<unsigned, MachineInstr *> CopySrcMIs;
1640 MachineInstr *MI = &*MII;
1768 MachineInstr *DefMI = nullptr;
1769 if (MachineInstr *FoldMI =
1867 for (const MachineInstr &UseMI : MRI.use_nodbg_instructions(DefOp.getReg())) {
lib/CodeGen/PostRAHazardRecognizer.cpp 81 for (MachineInstr &MI : MBB) {
lib/CodeGen/PostRASchedulerList.cpp 180 void Observe(MachineInstr &MI, unsigned Count);
337 MachineInstr &MI = *std::prev(I);
426 void SchedulePostRATDList::Observe(MachineInstr &MI, unsigned Count) {
693 for (std::vector<std::pair<MachineInstr *, MachineInstr *> >::iterator
693 for (std::vector<std::pair<MachineInstr *, MachineInstr *> >::iterator
695 std::pair<MachineInstr *, MachineInstr *> P = *std::prev(DI);
695 std::pair<MachineInstr *, MachineInstr *> P = *std::prev(DI);
696 MachineInstr *DbgValue = P.first;
lib/CodeGen/ProcessImplicitDefs.cpp 32 SmallSetVector<MachineInstr*, 16> WorkList;
34 void processImplicitDef(MachineInstr *MI);
35 bool canTurnIntoImplicitDef(MachineInstr *MI);
62 bool ProcessImplicitDefs::canTurnIntoImplicitDef(MachineInstr *MI) {
74 void ProcessImplicitDefs::processImplicitDef(MachineInstr *MI) {
83 MachineInstr *UserMI = MO.getParent();
lib/CodeGen/PrologEpilogInserter.cpp 173 SmallDenseMap<MachineBasicBlock *, SmallVector<MachineInstr *, 4>, 4>;
180 SmallVector<const MachineInstr *, 4> FrameIndexValues;
182 for (auto &MI : MBB) {
208 for (auto *MI : EntryDbgValues[&MBB])
1195 MachineInstr &MI = *I;
lib/CodeGen/ReachingDefAnalysis.cpp 95 void ReachingDefAnalysis::processDefs(MachineInstr *MI) {
127 for (MachineInstr &MI : *TraversedMBB.MBB) {
173 int ReachingDefAnalysis::getReachingDef(MachineInstr *MI, int PhysReg) {
192 int ReachingDefAnalysis::getClearance(MachineInstr *MI, MCPhysReg PhysReg) {
lib/CodeGen/RegAllocBase.cpp 118 MachineInstr *MI = nullptr;
lib/CodeGen/RegAllocBase.h 75 SmallPtrSet<MachineInstr *, 32> DeadRemats;
lib/CodeGen/RegAllocFast.cpp 84 MachineInstr *LastUse = nullptr; ///< Last instr to use reg.
102 DenseMap<unsigned, SmallVector<MachineInstr *, 2>> LiveDbgValueMap;
132 SmallVector<MachineInstr *, 32> Coalesced;
184 void allocateInstruction(MachineInstr &MI);
185 void handleDebugValue(MachineInstr &MI);
186 void handleThroughOperands(MachineInstr &MI,
210 void allocVirtReg(MachineInstr &MI, LiveReg &LR, unsigned Hint);
212 MCPhysReg defineVirtReg(MachineInstr &MI, unsigned OpNum, unsigned VirtReg,
214 LiveReg &reloadVirtReg(MachineInstr &MI, unsigned OpNum, unsigned VirtReg,
217 bool setPhysReg(MachineInstr &MI, MachineOperand &MO, MCPhysReg PhysReg);
283 for (const MachineInstr &UseInst : MRI->reg_nodbg_instructions(VirtReg)) {
302 for (const MachineInstr &DefInst : MRI->def_instructions(VirtReg)) {
328 SmallVectorImpl<MachineInstr *> &LRIDbgValues = LiveDbgValueMap[VirtReg];
329 for (MachineInstr *DBG : LRIDbgValues) {
330 MachineInstr *NewDV = buildDbgValueForSpill(*MBB, Before, *DBG, FI);
620 static bool isCoalescable(const MachineInstr &MI) {
632 MachineInstr *VRegDef = MRI->getUniqueVRegDef(Reg);
646 for (const MachineInstr &MI : MRI->def_instructions(VirtReg)) {
661 void RegAllocFast::allocVirtReg(MachineInstr &MI, LiveReg &LR, unsigned Hint0) {
777 MCPhysReg RegAllocFast::defineVirtReg(MachineInstr &MI, unsigned OpNum,
787 const MachineInstr &UseMI = *MRI->use_instr_nodbg_begin(VirtReg);
808 RegAllocFast::LiveReg &RegAllocFast::reloadVirtReg(MachineInstr &MI,
855 bool RegAllocFast::setPhysReg(MachineInstr &MI, MachineOperand &MO,
886 void RegAllocFast::handleThroughOperands(MachineInstr &MI,
1012 void RegAllocFast::allocateInstruction(MachineInstr &MI) {
1210 void RegAllocFast::handleDebugValue(MachineInstr &MI) {
1263 for (MachineInstr &MI : MBB) {
1285 for (MachineInstr *MI : Coalesced)
lib/CodeGen/RegAllocGreedy.cpp 1822 MachineInstr *MI = MRI->getUniqueVRegDef(VirtReg.reg);
2065 const MachineInstr *MI, unsigned Reg, const TargetRegisterClass *SuperRC,
2113 if (const MachineInstr *MI = Indexes->getInstructionFromIndex(Uses[i]))
2873 for (const MachineInstr &Instr : MRI->reg_nodbg_instructions(Reg)) {
3169 for (MachineInstr &MI : *MBB) {
lib/CodeGen/RegAllocPBQP.cpp 160 SmallPtrSet<MachineInstr *, 32> DeadRemats;
446 for (const auto &MI : MBB) {
lib/CodeGen/RegUsageInfoPropagate.cpp 64 static void setRegMask(MachineInstr &MI, ArrayRef<uint32_t> RegMask) {
89 const MachineInstr &MI) {
116 for (MachineInstr &MI : MBB) {
lib/CodeGen/RegisterCoalescer.cpp 150 SmallVector<MachineInstr*, 8> WorkList;
151 SmallVector<MachineInstr*, 8> LocalWorkList;
155 SmallPtrSet<MachineInstr*, 8> ErasedInstrs;
158 SmallVector<MachineInstr*, 8> DeadDefs;
176 void LRE_WillEraseInstruction(MachineInstr *MI) override;
190 bool copyCoalesceWorkList(MutableArrayRef<MachineInstr*> CurrList);
204 bool joinCopy(MachineInstr *CopyMI, bool &Again);
239 bool adjustCopiesBackFrom(const CoalescerPair &CP, MachineInstr *CopyMI);
255 MachineInstr *CopyMI);
258 bool removePartialRedundancy(const CoalescerPair &CP, MachineInstr &CopyMI);
262 bool reMaterializeTrivialDef(const CoalescerPair &CP, MachineInstr *CopyMI,
288 MachineInstr *eliminateUndefCopy(MachineInstr *CopyMI);
288 MachineInstr *eliminateUndefCopy(MachineInstr *CopyMI);
302 bool applyTerminalRule(const MachineInstr &Copy) const;
308 SmallVectorImpl<MachineInstr * > *Dead = nullptr) {
322 void deleteInstr(MachineInstr* MI) {
362 const MachineInstr *MI, unsigned &Src,
390 for (const auto &MI : *MBB) {
397 bool CoalescerPair::setRegisters(const MachineInstr *MI) {
494 bool CoalescerPair::isCoalescable(const MachineInstr *MI) const {
550 void RegisterCoalescer::LRE_WillEraseInstruction(MachineInstr *MI) {
556 MachineInstr *CopyMI) {
600 MachineInstr *ACopyMI = LIS->getInstructionFromIndex(AValNo->def);
613 MachineInstr *ValSEndInst =
739 MachineInstr *CopyMI) {
778 MachineInstr *DefMI = LIS->getInstructionFromIndex(AValNo->def);
817 MachineInstr *UseMI = MO.getParent();
834 MachineInstr *NewMI =
866 MachineInstr *UseMI = UseMO.getParent();
1026 MachineInstr &CopyMI) {
1060 MachineInstr *DefMI = LIS->getInstructionFromIndex(PVal->def);
1123 MachineInstr *NewCopyMI = BuildMI(*CopyLeftBB, InsPos, CopyMI.getDebugLoc(),
1190 static bool definesFullReg(const MachineInstr &MI, unsigned Reg) {
1205 MachineInstr *CopyMI,
1222 MachineInstr *DefMI = LIS->getInstructionFromIndex(ValNo->def);
1282 MachineInstr &NewMI = *std::prev(MII);
1481 MachineInstr *UseMI = UseMO.getParent();
1514 MachineInstr *RegisterCoalescer::eliminateUndefCopy(MachineInstr *CopyMI) {
1514 MachineInstr *RegisterCoalescer::eliminateUndefCopy(MachineInstr *CopyMI) {
1590 const MachineInstr &MI = *MO.getParent();
1662 MachineInstr &MI = *MO.getParent();
1670 SmallPtrSet<MachineInstr*, 8> Visited;
1674 MachineInstr *UseMI = &*(I++);
1751 bool RegisterCoalescer::joinCopy(MachineInstr *CopyMI, bool &Again) {
1790 if (MachineInstr *UndefMI = eliminateUndefCopy(CopyMI)) {
2024 MachineInstr *CopyMI;
2052 MachineInstr &DestMI = *MRI->getVRegDef(SrcReg);
2064 MachineInstr *MI = LIS->getInstructionFromIndex(SI);
2283 LaneBitmask computeWriteLanes(const MachineInstr *DefMI, bool &Redef) const;
2325 bool usesLanes(const MachineInstr &MI, unsigned, unsigned, LaneBitmask) const;
2377 void eraseInstrs(SmallPtrSetImpl<MachineInstr*> &ErasedInstrs,
2390 LaneBitmask JoinVals::computeWriteLanes(const MachineInstr *DefMI, bool &Redef)
2410 MachineInstr *MI = Indexes->getInstructionFromIndex(Def);
2492 const MachineInstr *DefMI = nullptr;
2823 bool JoinVals::usesLanes(const MachineInstr &MI, unsigned Reg, unsigned SubIdx,
2876 MachineInstr *LastMI =
3113 void JoinVals::eraseInstrs(SmallPtrSetImpl<MachineInstr*> &ErasedInstrs,
3189 MachineInstr *MI = Indexes->getInstructionFromIndex(Def);
3459 static bool isLocalCopy(MachineInstr *Copy, const LiveIntervals *LIS) {
3489 copyCoalesceWorkList(MutableArrayRef<MachineInstr*> CurrList) {
3511 static bool isTerminalReg(unsigned DstReg, const MachineInstr &Copy,
3515 for (const MachineInstr &MI : MRI->reg_nodbg_instructions(DstReg))
3521 bool RegisterCoalescer::applyTerminalRule(const MachineInstr &Copy) const {
3540 for (const MachineInstr &MI : MRI->reg_nodbg_instructions(SrcReg)) {
3577 SmallVector<MachineInstr*, 2> LocalTerminals;
3578 SmallVector<MachineInstr*, 2> GlobalTerminals;
3605 SmallVector<MachineInstr*, 2> Terminals;
3606 for (MachineInstr &MII : *MBB)
3619 MutableArrayRef<MachineInstr*>
lib/CodeGen/RegisterCoalescer.h 68 bool setRegisters(const MachineInstr*);
76 bool isCoalescable(const MachineInstr*) const;
lib/CodeGen/RegisterPressure.cpp 480 void collectInstr(const MachineInstr &MI) const {
489 void collectInstrLanes(const MachineInstr &MI) const {
568 void RegisterOperands::collect(const MachineInstr &MI,
579 void RegisterOperands::detectDeadDefs(const MachineInstr &MI,
602 MachineInstr *AddFlagsMI) {
881 const MachineInstr &MI = *CurrPos;
947 const MachineInstr &MI = *CurrPos;
1041 void RegPressureTracker::bumpUpwardPressure(const MachineInstr *MI) {
1093 getMaxUpwardPressureDelta(const MachineInstr *MI, PressureDiff *PDiff,
1161 getUpwardPressureDelta(const MachineInstr *MI, /*const*/ PressureDiff &PDiff,
1230 const MachineInstr *MI = MO.getParent();
1282 void RegPressureTracker::bumpDownwardPressure(const MachineInstr *MI) {
1342 getMaxDownwardPressureDelta(const MachineInstr *MI, RegPressureDelta &Delta,
1365 getUpwardPressure(const MachineInstr *MI,
1381 getDownwardPressure(const MachineInstr *MI,
lib/CodeGen/RegisterScavenging.cpp 112 MachineInstr &MI = *MBBI;
159 MachineInstr &MI = *MBBI;
186 MachineInstr &MI = *MBBI;
263 const MachineInstr &MI = *MBBI;
392 const MachineInstr &MI = *I;
450 static unsigned getFrameIndexOperandNum(MachineInstr &MI) {
537 MachineInstr &MI = *I;
630 const MachineInstr *RealDef = nullptr;
637 const MachineInstr &MI = *MO.getParent();
661 MachineInstr &DefMI = *FirstDef->getParent();
693 const MachineInstr &NMI = *N;
715 const MachineInstr &MI = *I;
lib/CodeGen/RenameIndependentSubregs.cpp 221 auto *MI = MO.getParent();
lib/CodeGen/ScheduleDAGInstrs.cpp 127 static bool getUnderlyingObjectsForInstr(const MachineInstr *MI,
201 MachineInstr *ExitMI = RegionEnd != BB->end() ? &*RegionEnd : nullptr;
253 MachineInstr *RegUse = nullptr;
285 MachineInstr *MI = SU->getInstr();
389 MachineInstr *MI = SU->getInstr();
438 MachineInstr *Use = UseSU->getInstr();
509 const MachineInstr *MI = SU->getInstr();
534 static inline bool isGlobalMemoryObject(AAResults *AA, MachineInstr *MI) {
565 for (MachineInstr &MI : make_range(RegionBegin, RegionEnd)) {
792 MachineInstr *DbgMI = nullptr;
795 MachineInstr &MI = *std::prev(MII);
1087 MachineInstr &MI, bool addToLiveRegs) {
1110 for (MachineInstr &MI : make_range(MBB.rbegin(), MBB.rend())) {
lib/CodeGen/SelectionDAG/FastISel.cpp 168 static unsigned findSinkableLocalRegDef(MachineInstr &MI) {
200 MachineInstr &LocalMI = *RI;
234 for (MachineInstr &I : *MBB) {
248 void FastISel::sinkLocalValueMaterialization(MachineInstr &LocalMI,
278 MachineInstr *FirstUser = nullptr;
280 for (MachineInstr &UseInst : MRI.use_nodbg_instructions(DefReg)) {
307 SmallVector<MachineInstr *, 1> DbgValues;
308 for (MachineInstr &DbgVal : MRI.use_instructions(DefReg)) {
324 for (MachineInstr *DI : DbgValues) {
558 MachineInstr *Dead = &*I;
1573 void FastISel::removeDeadLocalValueCode(MachineInstr *SavedLastLocalValue)
1575 MachineInstr *CurLastLocalValue = getLastLocalValue();
1591 MachineInstr *SavedLastLocalValue = getLastLocalValue();
2360 MachineInstr *User = RI->getParent();
lib/CodeGen/SelectionDAG/InstrEmitter.cpp 503 MachineInstr *DefMI;
676 MachineInstr *
764 MachineInstr *
853 MachineInstr *MI = MIB.getInstr();
856 MI->setFlag(MachineInstr::MIFlag::FmNsz);
859 MI->setFlag(MachineInstr::MIFlag::FmArcp);
862 MI->setFlag(MachineInstr::MIFlag::FmNoNans);
865 MI->setFlag(MachineInstr::MIFlag::FmNoInfs);
868 MI->setFlag(MachineInstr::MIFlag::FmContract);
871 MI->setFlag(MachineInstr::MIFlag::FmAfn);
874 MI->setFlag(MachineInstr::MIFlag::FmReassoc);
877 MI->setFlag(MachineInstr::MIFlag::NoUWrap);
880 MI->setFlag(MachineInstr::MIFlag::NoSWrap);
883 MI->setFlag(MachineInstr::MIFlag::IsExact);
886 MI->setFlag(MachineInstr::MIFlag::FPExcept);
lib/CodeGen/SelectionDAG/InstrEmitter.h 107 MachineInstr *EmitDbgValue(SDDbgValue *SD,
111 MachineInstr *EmitDbgLabel(SDDbgLabel *SD);
lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp 780 if (auto *DbgMI = Emitter.EmitDbgValue(DV, VRBaseMap))
lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp 733 SmallVectorImpl<std::pair<unsigned, MachineInstr*> > &Orders,
747 MachineInstr *DbgMI = Emitter.EmitDbgValue(DV, VRBaseMap);
762 SmallVectorImpl<std::pair<unsigned, MachineInstr *>> &Orders,
763 SmallSet<unsigned, 8> &Seen, MachineInstr *NewInsn) {
831 SmallVector<std::pair<unsigned, MachineInstr*>, 32> Orders;
856 MachineInstr *MI;
877 MachineInstr *DbgMI= Emitter.EmitDbgValue(*PDI, VRBaseMap);
952 MachineInstr *MI = Orders[i].second;
961 MachineInstr *DbgMI = Emitter.EmitDbgValue(*DI, VRBaseMap);
978 SmallVector<MachineInstr*, 8> DbgMIs;
984 if (MachineInstr *DbgMI = Emitter.EmitDbgValue(*DI, VRBaseMap))
998 MachineInstr *MI = InstrOrder.second;
1006 MachineInstr *DbgMI = Emitter.EmitDbgLabel(*DLI);
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp 287 TargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
297 void TargetLowering::AdjustInstrPostInstrSelection(MachineInstr &MI,
571 MachineInstr *MI = FuncInfo->ArgDbgValues[e-i-1];
578 MachineInstr *Def = RegInfo->getVRegDef(Reg);
593 MachineInstr *Def = RegInfo->getVRegDef(LDI->second);
611 MachineInstr *CopyUseMI = nullptr;
615 MachineInstr *UseMI = &*(UI++);
626 MachineInstr *NewMI =
641 for (const auto &MI : MBB) {
1620 static bool MIIsInTerminatorSequence(const MachineInstr &MI) {
1638 MachineInstr::const_mop_iterator OPI = MI.operands_begin();
1647 MachineInstr::const_mop_iterator OPI2 = OPI;
lib/CodeGen/ShrinkWrap.cpp 162 bool useOrDefCSROrFI(const MachineInstr &MI, RegScavenger *RS) const;
259 bool ShrinkWrap::useOrDefCSROrFI(const MachineInstr &MI,
353 for (const MachineInstr &Terminator : MBB.terminators()) {
512 for (const MachineInstr &MI : MBB) {
lib/CodeGen/SlotIndexes.cpp 74 for (MachineInstr &MI : MBB) {
104 void SlotIndexes::removeMachineInstrFromMaps(MachineInstr &MI) {
119 void SlotIndexes::removeSingleMachineInstrFromMaps(MachineInstr &MI) {
136 MachineInstr &NextMI = *Next;
205 MachineInstr *SlotMI = ListI->getInstr();
206 MachineInstr *MI = (MBBI != MBB->end() && !pastStart) ? &*MBBI : nullptr;
231 MachineInstr &MI = *I;
lib/CodeGen/SplitKit.cpp 436 const MachineInstr *DefMI = LIS.getInstructionFromIndex(Def);
517 MachineInstr *CopyMI = BuildMI(MBB, InsertBefore, DebugLoc(), Desc)
544 MachineInstr *CopyMI =
702 MachineInstr *MI = LIS.getInstructionFromIndex(Idx);
719 MachineInstr *MI = LIS.getInstructionFromIndex(Idx);
770 MachineInstr *MI = LIS.getInstructionFromIndex(Boundary);
802 MachineInstr *MI = LIS.getInstructionFromIndex(Idx);
855 MachineInstr *MI = LIS.getInstructionFromIndex(Def);
1318 MachineInstr *MI = MO.getParent();
1408 SmallVector<MachineInstr*, 8> Dead;
1417 MachineInstr *MI = LIS.getInstructionFromIndex(S.valno->def);
lib/CodeGen/StackColoring.cpp 426 SmallVector<MachineInstr*, 8> Markers;
489 bool isLifetimeStartOrEnd(const MachineInstr &MI,
566 static inline int getStartOrEndSlot(const MachineInstr &MI)
582 bool StackColoring::isLifetimeStartOrEnd(const MachineInstr &MI,
653 for (MachineInstr &MI : *MBB) {
722 for (MachineInstr &MI : *MBB) {
833 for (const MachineInstr &MI : MBB) {
876 for (MachineInstr *MI : Markers) {
963 for (MachineInstr &I : BB) {
1079 for (MachineInstr &I : BB) {
lib/CodeGen/StackMapLivenessAnalysis.cpp 76 void addLiveOutSetToMI(MachineFunction &MF, MachineInstr &MI);
152 MachineInstr &MI) {
lib/CodeGen/StackMaps.cpp 48 StackMapOpers::StackMapOpers(const MachineInstr *MI)
54 PatchPointOpers::PatchPointOpers(const MachineInstr *MI)
101 MachineInstr::const_mop_iterator
102 StackMaps::parseOperand(MachineInstr::const_mop_iterator MOI,
103 MachineInstr::const_mop_iterator MOE, LocationVec &Locs,
297 void StackMaps::recordStackMapOpers(const MachineInstr &MI, uint64_t ID,
298 MachineInstr::const_mop_iterator MOI,
299 MachineInstr::const_mop_iterator MOE,
363 void StackMaps::recordStackMap(const MachineInstr &MI) {
372 void StackMaps::recordPatchPoint(const MachineInstr &MI) {
393 void StackMaps::recordStatepoint(const MachineInstr &MI) {
lib/CodeGen/StackSlotColoring.cpp 122 void RewriteInstruction(MachineInstr &MI, SmallVectorImpl<int> &SlotMapping,
164 MachineInstr &MI = *MII;
178 for (MachineInstr::mmo_iterator MMOI = MI.memoperands_begin(),
375 for (MachineInstr &MI : MBB)
395 void StackSlotColoring::RewriteInstruction(MachineInstr &MI,
427 SmallVector<MachineInstr*, 4> toErase;
475 for (SmallVectorImpl<MachineInstr *>::iterator I = toErase.begin(),
lib/CodeGen/TailDuplicator.cpp 161 SmallVector<MachineInstr *, 16> Copies;
167 SmallVector<MachineInstr *, 8> NewPHIs;
192 MachineInstr *DefMI = MRI->getVRegDef(VReg);
212 MachineInstr *UseMI = UseMO.getParent();
235 MachineInstr *Copy = Copies[i];
290 for (MachineInstr &UseMI : MRI->use_instructions(Reg)) {
299 static unsigned getPHISrcRegOpIdx(MachineInstr *MI, MachineBasicBlock *SrcBB) {
311 for (const auto &MI : BB) {
339 MachineInstr *MI, MachineBasicBlock *TailBB, MachineBasicBlock *PredBB,
371 MachineInstr *MI, MachineBasicBlock *TailBB, MachineBasicBlock *PredBB,
381 MachineInstr &NewMI = TII->duplicate(*PredBB, PredBB->end(), *MI);
465 for (MachineInstr &MI : *SuccBB) {
593 for (MachineInstr &MI : TailBB) {
638 for (auto &I : *SB) {
701 SmallVectorImpl<MachineInstr *> &Copies) {
800 SmallVectorImpl<MachineInstr *> &Copies) {
845 MachineInstr *MI = &*I;
904 MachineInstr *MI = &*I++;
912 MachineInstr *MI = &*I++;
967 MachineInstr *MI = &*I++;
980 SmallVectorImpl<MachineInstr*> &Copies) {
lib/CodeGen/TargetInstrInfo.cpp 156 MachineInstr *TargetInstrInfo::commuteInstructionImpl(MachineInstr &MI,
156 MachineInstr *TargetInstrInfo::commuteInstructionImpl(MachineInstr &MI,
207 MachineInstr *CommutedMI = nullptr;
239 MachineInstr *TargetInstrInfo::commuteInstruction(MachineInstr &MI, bool NewMI,
239 MachineInstr *TargetInstrInfo::commuteInstruction(MachineInstr &MI, bool NewMI,
285 bool TargetInstrInfo::findCommutedOpIndices(const MachineInstr &MI,
309 bool TargetInstrInfo::isUnpredicatedTerminator(const MachineInstr &MI) const {
321 MachineInstr &MI, ArrayRef<MachineOperand> Pred) const {
351 const MachineInstr &MI,
354 for (MachineInstr::mmo_iterator o = MI.memoperands_begin(),
365 const MachineInstr &MI,
368 for (MachineInstr::mmo_iterator o = MI.memoperands_begin(),
413 MachineInstr *MI = MBB.getParent()->CloneMachineInstr(&Orig);
418 bool TargetInstrInfo::produceSameValue(const MachineInstr &MI0,
419 const MachineInstr &MI1,
421 return MI0.isIdenticalTo(MI1, MachineInstr::IgnoreVRegDefs);
424 MachineInstr &TargetInstrInfo::duplicate(MachineBasicBlock &MBB,
433 static const TargetRegisterClass *canFoldCopy(const MachineInstr &MI,
468 static MachineInstr *foldPatchpoint(MachineFunction &MF, MachineInstr &MI,
468 static MachineInstr *foldPatchpoint(MachineFunction &MF, MachineInstr &MI,
500 MachineInstr *NewMI =
531 MachineInstr *TargetInstrInfo::foldMemoryOperand(MachineInstr &MI,
531 MachineInstr *TargetInstrInfo::foldMemoryOperand(MachineInstr &MI,
569 MachineInstr *NewMI = nullptr;
619 MachineInstr *TargetInstrInfo::foldMemoryOperand(MachineInstr &MI,
619 MachineInstr *TargetInstrInfo::foldMemoryOperand(MachineInstr &MI,
621 MachineInstr &LoadMI,
633 MachineInstr *NewMI = nullptr;
658 for (MachineInstr::mmo_iterator I = LoadMI.memoperands_begin(),
668 const MachineInstr &Inst, const MachineBasicBlock *MBB) const {
675 MachineInstr *MI1 = nullptr;
676 MachineInstr *MI2 = nullptr;
686 bool TargetInstrInfo::hasReassociableSibling(const MachineInstr &Inst,
690 MachineInstr *MI1 = MRI.getUniqueVRegDef(Inst.getOperand(1).getReg());
691 MachineInstr *MI2 = MRI.getUniqueVRegDef(Inst.getOperand(2).getReg());
713 bool TargetInstrInfo::isReassociationCandidate(const MachineInstr &Inst,
742 MachineInstr &Root,
772 MachineInstr &Root, MachineInstr &Prev,
772 MachineInstr &Root, MachineInstr &Prev,
774 SmallVectorImpl<MachineInstr *> &InsInstrs,
775 SmallVectorImpl<MachineInstr *> &DelInstrs,
856 MachineInstr &Root, MachineCombinerPattern Pattern,
857 SmallVectorImpl<MachineInstr *> &InsInstrs,
858 SmallVectorImpl<MachineInstr *> &DelInstrs,
863 MachineInstr *Prev = nullptr;
883 const MachineInstr &MI, AAResults *AA) const {
962 int TargetInstrInfo::getSPAdjust(const MachineInstr &MI) const {
986 bool TargetInstrInfo::isSchedulingBoundary(const MachineInstr &MI,
1070 const MachineInstr &MI) const {
1086 const MachineInstr &DefMI) const {
1096 unsigned TargetInstrInfo::getPredicationCost(const MachineInstr &) const {
1101 const MachineInstr &MI,
1112 const MachineInstr &DefMI,
1124 TargetInstrInfo::describeLoadedValue(const MachineInstr &MI) const {
1141 const MachineInstr &DefMI,
1143 const MachineInstr &UseMI,
1153 const InstrItineraryData *ItinData, const MachineInstr &DefMI) const {
1167 const MachineInstr &MI, unsigned DefIdx,
1194 const MachineInstr &MI, unsigned DefIdx,
1219 const MachineInstr &MI, unsigned DefIdx,
lib/CodeGen/TargetLoweringBase.cpp 1019 TargetLoweringBase::emitPatchPoint(MachineInstr &InitialMI,
1021 MachineInstr *MI = &InitialMI;
1100 TargetLoweringBase::emitXRayCustomEvent(MachineInstr &MI,
1115 TargetLoweringBase::emitXRayTypedEvent(MachineInstr &MI,
lib/CodeGen/TargetRegisterInfo.cpp 498 const MachineInstr *MI = MRI->getVRegDef(SrcReg);
lib/CodeGen/TargetSchedule.cpp 85 bool TargetSchedModel::mustBeginGroup(const MachineInstr *MI,
96 bool TargetSchedModel::mustEndGroup(const MachineInstr *MI,
107 unsigned TargetSchedModel::getNumMicroOps(const MachineInstr *MI,
133 resolveSchedClass(const MachineInstr *MI) const {
157 static unsigned findDefIdx(const MachineInstr *MI, unsigned DefOperIdx) {
173 static unsigned findUseIdx(const MachineInstr *MI, unsigned UseOperIdx) {
185 const MachineInstr *DefMI, unsigned DefOperIdx,
186 const MachineInstr *UseMI, unsigned UseOperIdx) const {
273 TargetSchedModel::computeInstrLatency(const MachineInstr *MI,
290 computeOutputLatency(const MachineInstr *DefMI, unsigned DefOperIdx,
291 const MachineInstr *DepMI) const {
325 TargetSchedModel::computeReciprocalThroughput(const MachineInstr *MI) const {
lib/CodeGen/TwoAddressInstructionPass.cpp 107 DenseMap<MachineInstr*, unsigned> DistanceMap;
110 SmallPtrSet<MachineInstr*, 8> Processed;
114 SmallPtrSet<MachineInstr*, 8> SunkInstrs;
126 bool sink3AddrInstruction(MachineInstr *MI, unsigned Reg,
134 MachineInstr *MI, unsigned Dist);
136 bool commuteInstruction(MachineInstr *MI, unsigned DstIdx,
145 bool isDefTooClose(unsigned Reg, unsigned Dist, MachineInstr *MI);
159 bool tryInstructionCommute(MachineInstr *MI,
166 void processCopy(MachineInstr *MI);
171 bool collectTiedOperands(MachineInstr *MI, TiedOperandMap&);
172 void processTiedPairs(MachineInstr *MI, TiedPairList&, unsigned &Dist);
210 static bool isPlainlyKilled(MachineInstr *MI, unsigned Reg, LiveIntervals *LIS);
216 sink3AddrInstruction(MachineInstr *MI, unsigned SavedReg,
250 MachineInstr *KillMI = nullptr;
291 for (MachineInstr &OtherMI : make_range(std::next(OldPos), KillPos)) {
343 static MachineInstr *getSingleDef(unsigned Reg, MachineBasicBlock *BB,
345 MachineInstr *Ret = nullptr;
346 for (MachineInstr &DefMI : MRI->def_instructions(Reg)) {
368 MachineInstr *Def = getSingleDef(TmpReg, MBB, MRI);
389 MachineInstr *MI = MO.getParent();
392 DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(MI);
407 static bool isCopyToReg(MachineInstr &MI, const TargetInstrInfo *TII,
428 static bool isPlainlyKilled(MachineInstr *MI, unsigned Reg,
469 static bool isKilled(MachineInstr &MI, unsigned Reg,
474 MachineInstr *DefMI = &MI;
502 static bool isTwoAddrUse(MachineInstr &MI, unsigned Reg, unsigned &DstReg) {
519 MachineInstr *findOnlyInterestingUse(unsigned Reg, MachineBasicBlock *MBB,
527 MachineInstr &UseMI = *MRI->use_instr_nodbg_begin(Reg);
584 MachineInstr *MI, unsigned Dist) {
680 bool TwoAddressInstructionPass::commuteInstruction(MachineInstr *MI,
687 MachineInstr *NewMI = TII->commuteInstruction(*MI, false, RegBIdx, RegCIdx);
735 MachineInstr *NewMI = TII->convertToThreeAddress(MFI, *mi, LV);
779 while (MachineInstr *UseMI = findOnlyInterestingUse(Reg, MBB, MRI, TII,IsCopy,
784 DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(UseMI);
829 void TwoAddressInstructionPass::processCopy(MachineInstr *MI) {
864 MachineInstr *MI = &*mi;
865 DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(MI);
870 MachineInstr *KillMI = nullptr;
943 for (MachineInstr &OtherMI : make_range(End, KillPos)) {
1025 MachineInstr *MI) {
1026 for (MachineInstr &DefMI : MRI->def_instructions(Reg)) {
1031 DenseMap<MachineInstr*, unsigned>::iterator DDI = DistanceMap.find(&DefMI);
1054 MachineInstr *MI = &*mi;
1055 DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(MI);
1060 MachineInstr *KillMI = nullptr;
1116 for (MachineInstr &OtherMI :
1200 bool TwoAddressInstructionPass::tryInstructionCommute(MachineInstr *MI,
1276 MachineInstr &MI = *mi;
1365 SmallVector<MachineInstr *, 2> NewMIs;
1462 collectTiedOperands(MachineInstr *MI, TiedOperandMap &TiedOperands) {
1502 TwoAddressInstructionPass::processTiedPairs(MachineInstr *MI,
1800 MachineInstr &MI = *MBBI;
1837 MachineInstr *CopyMI = BuildMI(*MI.getParent(), MI, MI.getDebugLoc(),
lib/CodeGen/UnreachableBlockElim.cpp 152 for (auto &I : DeadBlocks[i]->instrs())
153 if (I.isCall(MachineInstr::IgnoreBundle))
lib/CodeGen/VirtRegMap.cpp 188 void handleIdentityCopy(MachineInstr &MI) const;
189 void expandCopyBundle(MachineInstr &MI) const;
190 bool subRegLiveThrough(const MachineInstr &MI, Register SuperPhysReg) const;
357 const MachineInstr &MI = *MO.getParent();
374 void VirtRegRewriter::handleIdentityCopy(MachineInstr &MI) const {
402 void VirtRegRewriter::expandCopyBundle(MachineInstr &MI) const {
407 SmallVector<MachineInstr *, 2> MIs({&MI});
418 MachineInstr *FirstMI = MIs.back();
423 for (const MachineInstr *Src : Srcs)
448 MachineInstr *BundleStart = FirstMI;
449 for (MachineInstr *BundledMI : llvm::reverse(MIs)) {
470 bool VirtRegRewriter::subRegLiveThrough(const MachineInstr &MI,
504 MachineInstr *MI = &*MII;
507 for (MachineInstr::mop_iterator MOI = MI->operands_begin(),
lib/CodeGen/XRayInstrumentation.cpp 92 SmallVector<MachineInstr *, 4> Terminators;
94 for (auto &T : MBB.terminators()) {
127 for (auto &T : MBB.terminators()) {
195 auto &FirstMI = *FirstMBB.begin();
lib/Target/AArch64/AArch64A53Fix835769.cpp 39 static bool isFirstInstructionInSequence(MachineInstr *MI) {
55 static bool isSecondInstructionInSequence(MachineInstr *MI) {
155 static MachineInstr *getLastNonPseudo(MachineBasicBlock &MBB,
162 for (MachineInstr &I : make_range(FMBB->rbegin(), FMBB->rend()))
171 static void insertNopBeforeInstruction(MachineBasicBlock &MBB, MachineInstr* MI,
176 MachineInstr *I = getLastNonPseudo(MBB, TII);
199 std::vector<MachineInstr*> Sequences;
201 MachineInstr *PrevInstr = nullptr;
207 for (auto &MI : MBB) {
208 MachineInstr *CurrInstr = &MI;
lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp 68 static bool isMul(MachineInstr *MI) {
81 static bool isMla(MachineInstr *MI) {
142 void scanInstruction(MachineInstr *MI, unsigned Idx,
188 MachineInstr *StartInst, *LastInst, *KillInst;
193 std::set<MachineInstr*> Insts;
203 Chain(MachineInstr *MI, unsigned Idx, Color C)
212 void add(MachineInstr *MI, unsigned Idx, Color C) {
224 bool contains(MachineInstr &MI) { return Insts.count(&MI) > 0; }
233 void setKill(MachineInstr *MI, unsigned Idx, bool Immutable) {
243 MachineInstr *getStart() const { return StartInst; }
245 MachineInstr *getLast() const { return LastInst; }
247 MachineInstr *getKill() const { return KillInst; }
343 for (auto &MI : MBB)
546 for (MachineInstr &I : *G) {
601 MachineInstr *MI, unsigned Idx, std::map<unsigned, Chain *> &ActiveChains,
685 MachineInstr *MI = MO.getParent();
lib/Target/AArch64/AArch64AdvSIMDScalarPass.cpp 73 bool isProfitableToTransform(const MachineInstr &MI) const;
78 void transformInstruction(MachineInstr &MI);
127 static MachineOperand *getSrcFromCopy(MachineInstr *MI,
184 static bool isTransformable(const MachineInstr &MI) {
193 const MachineInstr &MI) const {
274 static MachineInstr *insertCopy(const TargetInstrInfo *TII, MachineInstr &MI,
274 static MachineInstr *insertCopy(const TargetInstrInfo *TII, MachineInstr &MI,
287 void AArch64AdvSIMDScalar::transformInstruction(MachineInstr &MI) {
381 MachineInstr &MI = *I++;
lib/Target/AArch64/AArch64AsmPrinter.cpp 91 void LowerJumpTableDestSmall(MCStreamer &OutStreamer, const MachineInstr &MI);
94 const MachineInstr &MI);
96 const MachineInstr &MI);
98 void LowerPATCHABLE_FUNCTION_ENTER(const MachineInstr &MI);
99 void LowerPATCHABLE_FUNCTION_EXIT(const MachineInstr &MI);
100 void LowerPATCHABLE_TAIL_CALL(const MachineInstr &MI);
104 void LowerHWASAN_CHECK_MEMACCESS(const MachineInstr &MI);
107 void EmitSled(const MachineInstr &MI, SledKind Kind);
112 const MachineInstr *MI);
114 void EmitInstruction(const MachineInstr *MI) override;
151 void printOperand(const MachineInstr *MI, unsigned OpNum, raw_ostream &O);
157 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNum,
159 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum,
162 void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS);
175 void EmitFMov0(const MachineInstr &MI);
177 using MInstToMCSymbol = std::map<const MachineInstr *, MCSymbol *>;
184 void AArch64AsmPrinter::LowerPATCHABLE_FUNCTION_ENTER(const MachineInstr &MI)
189 void AArch64AsmPrinter::LowerPATCHABLE_FUNCTION_EXIT(const MachineInstr &MI)
194 void AArch64AsmPrinter::LowerPATCHABLE_TAIL_CALL(const MachineInstr &MI)
199 void AArch64AsmPrinter::EmitSled(const MachineInstr &MI, SledKind Kind)
239 void AArch64AsmPrinter::LowerHWASAN_CHECK_MEMACCESS(const MachineInstr &MI) {
469 for (const MachineInstr *MI : D.getArgs()) {
498 void AArch64AsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNum,
560 bool AArch64AsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum,
653 bool AArch64AsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
666 void AArch64AsmPrinter::PrintDebugValueComment(const MachineInstr *MI,
756 const llvm::MachineInstr &MI) {
794 const MachineInstr &MI) {
822 const MachineInstr &MI) {
861 void AArch64AsmPrinter::EmitFMov0(const MachineInstr &MI) {
906 void AArch64AsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/AArch64/AArch64CallLowering.cpp 640 MachineInstr *RegDef = getDefIgnoringCopies(OutInfo.Regs[0], MRI);
lib/Target/AArch64/AArch64CleanupLocalDynamicTLSPass.cpp 97 MachineInstr *replaceTLSBaseAddrCall(MachineInstr &I,
97 MachineInstr *replaceTLSBaseAddrCall(MachineInstr &I,
104 MachineInstr *Copy = BuildMI(*I.getParent(), I, I.getDebugLoc(),
116 MachineInstr *setRegister(MachineInstr &I, unsigned *TLSBaseAddrReg) {
116 MachineInstr *setRegister(MachineInstr &I, unsigned *TLSBaseAddrReg) {
125 MachineInstr *Copy =
lib/Target/AArch64/AArch64CollectLOH.cpp 160 static bool canAddBePartOfLOH(const MachineInstr &MI) {
175 static bool canDefBePartOfLOH(const MachineInstr &MI) {
198 static bool isCandidateStore(const MachineInstr &MI, const MachineOperand &MO) {
222 static bool isCandidateLoad(const MachineInstr &MI) {
243 static bool supportLoadFromLiteral(const MachineInstr &MI) {
284 const MachineInstr *MI0; ///< First instruction involved in the LOH.
285 const MachineInstr *MI1; ///< Second instruction involved in the LOH
287 const MachineInstr *LastADRP; ///< Last ADRP in same register.
291 static void handleUse(const MachineInstr &MI, const MachineOperand &MO,
336 static bool handleMiddleInst(const MachineInstr &MI, LOHInfo &DefInfo,
384 static void handleADRP(const MachineInstr &MI, AArch64FunctionInfo &AFI,
463 static void handleNormalInst(const MachineInstr &MI, LOHInfo *LOHInfos) {
525 for (const MachineInstr &MI : make_range(MBB.rbegin(), MBB.rend())) {
lib/Target/AArch64/AArch64CompressJumpTables.cpp 42 bool compressJumpTable(MachineInstr &MI, int Offset);
68 for (const MachineInstr &MI : MBB)
84 bool AArch64CompressJumpTables::compressJumpTable(MachineInstr &MI,
151 for (MachineInstr &MI : MBB) {
lib/Target/AArch64/AArch64CondBrTuning.cpp 63 MachineInstr *getOperandDef(const MachineOperand &MO);
64 MachineInstr *convertToFlagSetting(MachineInstr &MI, bool IsFlagSetting);
64 MachineInstr *convertToFlagSetting(MachineInstr &MI, bool IsFlagSetting);
65 MachineInstr *convertToCondBr(MachineInstr &MI);
65 MachineInstr *convertToCondBr(MachineInstr &MI);
66 bool tryToTuneBranch(MachineInstr &MI, MachineInstr &DefMI);
66 bool tryToTuneBranch(MachineInstr &MI, MachineInstr &DefMI);
80 MachineInstr *AArch64CondBrTuning::getOperandDef(const MachineOperand &MO) {
86 MachineInstr *AArch64CondBrTuning::convertToFlagSetting(MachineInstr &MI,
86 MachineInstr *AArch64CondBrTuning::convertToFlagSetting(MachineInstr &MI,
113 MachineInstr *AArch64CondBrTuning::convertToCondBr(MachineInstr &MI) {
113 MachineInstr *AArch64CondBrTuning::convertToCondBr(MachineInstr &MI) {
142 bool AArch64CondBrTuning::tryToTuneBranch(MachineInstr &MI,
143 MachineInstr &DefMI) {
150 MachineInstr *NewCmp = nullptr, *NewBr = nullptr;
309 MachineInstr &MI = *I;
321 MachineInstr *DefMI = getOperandDef(MI.getOperand(0));
lib/Target/AArch64/AArch64ConditionOptimizer.cpp 110 MachineInstr *findSuitableCompare(MachineBasicBlock *MBB);
111 CmpInfo adjustCmp(MachineInstr *CmpMI, AArch64CC::CondCode Cmp);
112 void modifyCmp(MachineInstr *CmpMI, const CmpInfo &Info);
113 bool adjustTo(MachineInstr *CmpMI, AArch64CC::CondCode Cmp, MachineInstr *To,
113 bool adjustTo(MachineInstr *CmpMI, AArch64CC::CondCode Cmp, MachineInstr *To,
145 MachineInstr *AArch64ConditionOptimizer::findSuitableCompare(
242 MachineInstr *CmpMI, AArch64CC::CondCode Cmp) {
269 void AArch64ConditionOptimizer::modifyCmp(MachineInstr *CmpMI,
288 MachineInstr &BrMI = *MBB->getFirstTerminator();
317 bool AArch64ConditionOptimizer::adjustTo(MachineInstr *CmpMI,
318 AArch64CC::CondCode Cmp, MachineInstr *To, int ToImm)
365 MachineInstr *HeadCmpMI = findSuitableCompare(HBB);
370 MachineInstr *TrueCmpMI = findSuitableCompare(TBB);
lib/Target/AArch64/AArch64ConditionalCompares.cpp 156 MachineInstr *CmpMI;
182 MachineInstr *findConvertibleCompare(MachineBasicBlock *MBB);
186 bool canSpeculateInstrs(MachineBasicBlock *MBB, const MachineInstr *CmpMI);
216 for (auto &I : *Tail) {
242 for (auto &I : *Tail) {
298 MachineInstr *SSACCmpConv::findConvertibleCompare(MachineBasicBlock *MBB) {
383 const MachineInstr *CmpMI) {
395 for (auto &I : make_range(MBB->begin(), MBB->getFirstTerminator())) {
lib/Target/AArch64/AArch64DeadRegisterDefinitionsPass.cpp 64 static bool usesFrameIndex(const MachineInstr &MI) {
119 for (MachineInstr &MI : MBB) {
lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp 92 static void transferImpOps(MachineInstr &OldMI, MachineInstrBuilder &UseMI,
111 MachineInstr &MI = *MBBI;
174 MachineInstr &MI = *MBBI;
253 MachineInstr &MI = *MBBI;
346 MachineInstr &MI = *MBBI;
406 MachineInstr &MI = *MBBI;
lib/Target/AArch64/AArch64FalkorHWPFFix.cpp 207 DenseMap<unsigned, SmallVector<MachineInstr *, 4>> TagMap;
236 static Optional<LoadInfo> getLoadInfo(const MachineInstr &MI) {
659 const MachineInstr &MI, const LoadInfo &LI) {
680 for (MachineInstr &MI : *MBB) {
694 for (auto *MI : P.second) {
717 MachineInstr &MI = *I;
lib/Target/AArch64/AArch64FastISel.cpp 2047 auto *MI = MRI.getUniqueVRegDef(Reg);
4476 static bool isZExtLoad(const MachineInstr *LI) {
4496 static bool isSExtLoad(const MachineInstr *LI) {
4535 MachineInstr *MI = MRI.getUniqueVRegDef(Reg);
4542 const auto *LoadMI = MI;
lib/Target/AArch64/AArch64FrameLowering.cpp 189 for (MachineInstr &MI : MBB) {
367 .setMIFlags(MachineInstr::FrameSetup);
717 InProlog ? MachineInstr::FrameSetup : MachineInstr::FrameDestroy);
717 InProlog ? MachineInstr::FrameSetup : MachineInstr::FrameDestroy);
725 static void fixupCalleeSaveRestoreStackOffset(MachineInstr &MI,
868 .setMIFlag(MachineInstr::FrameSetup);
871 .setMIFlag(MachineInstr::FrameSetup);
873 .setMIFlag(MachineInstr::FrameSetup);
880 .setMIFlags(MachineInstr::FrameSetup);
917 {-NumBytes, MVT::i8}, TII, MachineInstr::FrameSetup,
927 .setMIFlags(MachineInstr::FrameSetup);
934 .setMIFlag(MachineInstr::FrameSetup);
954 {-NumBytes, MVT::i8}, TII, MachineInstr::FrameSetup, false,
968 while (MBBI != End && MBBI->getFlag(MachineInstr::FrameSetup)) {
982 .setMIFlag(MachineInstr::FrameSetup);
992 .addReg(AArch64::X1).setMIFlag(MachineInstr::FrameSetup);
1012 {FPOffset, MVT::i8}, TII, MachineInstr::FrameSetup, false,
1033 .setMIFlag(MachineInstr::FrameSetup);
1035 .setMIFlag(MachineInstr::FrameSetup);
1041 .setMIFlag(MachineInstr::FrameSetup);
1043 .setMIFlag(MachineInstr::FrameSetup);
1048 .setMIFlags(MachineInstr::FrameSetup);
1062 .setMIFlags(MachineInstr::FrameSetup);
1066 .setMIFlag(MachineInstr::FrameSetup);
1074 .setMIFlags(MachineInstr::FrameSetup);
1078 .setMIFlag(MachineInstr::FrameSetup);
1087 .setMIFlags(MachineInstr::FrameSetup);
1091 .setMIFlag(MachineInstr::FrameSetup);
1100 .setMIFlags(MachineInstr::FrameSetup);
1105 .setMIFlag(MachineInstr::FrameSetup);
1111 MachineInstr::FrameSetup);
1129 {-NumBytes, MVT::i8}, TII, MachineInstr::FrameSetup,
1157 .setMIFlag(MachineInstr::FrameSetup);
1175 .setMIFlag(MachineInstr::FrameSetup);
1183 .setMIFlag(MachineInstr::FrameSetup);
1265 .setMIFlags(MachineInstr::FrameSetup);
1272 .setMIFlags(MachineInstr::FrameSetup);
1307 .setMIFlag(MachineInstr::FrameDestroy);
1311 static bool isFuncletReturnInstr(const MachineInstr &MI) {
1447 if (!LastPopI->getFlag(MachineInstr::FrameDestroy)) {
1458 .setMIFlag(MachineInstr::FrameDestroy);
1468 MachineInstr::FrameDestroy, false, NeedsWinCFI, &HasWinCFI);
1472 .setMIFlag(MachineInstr::FrameDestroy);
1483 TII, MachineInstr::FrameDestroy);
1507 MachineInstr::FrameDestroy, false, NeedsWinCFI, &HasWinCFI);
1513 .setMIFlag(MachineInstr::FrameDestroy);
1530 TII, MachineInstr::FrameDestroy, false, NeedsWinCFI);
1533 {NumBytes, MVT::i8}, TII, MachineInstr::FrameDestroy, false,
1556 MachineInstr::FrameDestroy, false, NeedsWinCFI, &HasWinCFI);
1560 .setMIFlag(MachineInstr::FrameDestroy);
1967 .setMIFlag(MachineInstr::FrameSetup);
1971 .setMIFlag(MachineInstr::FrameSetup);
1987 .setMIFlag(MachineInstr::FrameSetup);
2061 .setMIFlag(MachineInstr::FrameSetup);
2066 InsertSEH(MIB, TII, MachineInstr::FrameSetup);
2146 .setMIFlag(MachineInstr::FrameDestroy);
2151 InsertSEH(MIB, TII, MachineInstr::FrameDestroy);
2167 .setMIFlag(MachineInstr::FrameDestroy);
2364 while (MBBI != MBB.end() && MBBI->getFlag(MachineInstr::FrameSetup))
lib/Target/AArch64/AArch64ISelLowering.cpp 1322 AArch64TargetLowering::EmitF128CSEL(MachineInstr &MI,
1382 MachineInstr &MI, MachineBasicBlock *BB) const {
1390 MachineInstr &MI, MachineBasicBlock *BB) const {
1396 MachineInstr &MI, MachineBasicBlock *BB) const {
lib/Target/AArch64/AArch64ISelLowering.h 326 MachineBasicBlock *EmitF128CSEL(MachineInstr &MI,
329 MachineBasicBlock *EmitLoweredCatchRet(MachineInstr &MI,
332 MachineBasicBlock *EmitLoweredCatchPad(MachineInstr &MI,
336 EmitInstrWithCustomInserter(MachineInstr &MI,
lib/Target/AArch64/AArch64InstrInfo.cpp 75 unsigned AArch64InstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
126 static void parseCondBranch(MachineInstr *LastInst, MachineBasicBlock *&Target,
187 AArch64InstrInfo::getBranchDestBlock(const MachineInstr &MI) const {
222 MachineInstr *LastInst = &*I;
240 MachineInstr *SecondLastInst = &*I;
419 const MachineInstr *DefMI = MRI.getVRegDef(VReg);
437 const MachineInstr *DefMI = MRI.getVRegDef(VReg);
675 static bool canBeExpandedToORR(const MachineInstr &MI, unsigned BitSize) {
684 bool AArch64InstrInfo::isAsCheapAsAMove(const MachineInstr &MI) const {
763 bool AArch64InstrInfo::isFalkorShiftExtFast(const MachineInstr &MI) {
885 bool AArch64InstrInfo::isSEHInstruction(const MachineInstr &MI) {
911 bool AArch64InstrInfo::isCoalescableExtInstr(const MachineInstr &MI,
932 const MachineInstr &MIa, const MachineInstr &MIb) const {
932 const MachineInstr &MIa, const MachineInstr &MIb) const {
963 bool AArch64InstrInfo::isSchedulingBoundary(const MachineInstr &MI,
986 bool AArch64InstrInfo::analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
1047 static bool UpdateOperandRegClass(MachineInstr &Instr) {
1088 static unsigned convertToNonFlagSettingOpc(const MachineInstr &MI) {
1160 const MachineInstr &Instr = *To;
1182 MachineInstr &CmpInstr, unsigned SrcReg, unsigned SrcReg2, int CmpMask,
1226 static unsigned sForm(MachineInstr &Instr) {
1304 static AArch64CC::CondCode findCondCodeUsedByInstr(const MachineInstr &Instr) {
1395 static bool canInstrSubstituteCmpInstr(MachineInstr *MI, MachineInstr *CmpInstr,
1395 static bool canInstrSubstituteCmpInstr(MachineInstr *MI, MachineInstr *CmpInstr,
1421 const MachineInstr &Instr = *I;
1441 MachineInstr &CmpInstr, unsigned SrcReg,
1445 MachineInstr *MI = MRI->getUniqueVRegDef(SrcReg);
1468 bool AArch64InstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
1485 while (FirstEpilogSEH->getFlag(MachineInstr::FrameDestroy) &&
1576 bool AArch64InstrInfo::isGPRZero(const MachineInstr &MI) {
1600 bool AArch64InstrInfo::isGPRCopy(const MachineInstr &MI) {
1630 bool AArch64InstrInfo::isFPRCopy(const MachineInstr &MI) {
1651 unsigned AArch64InstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
1674 unsigned AArch64InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
1697 bool AArch64InstrInfo::isLdStPairSuppressed(const MachineInstr &MI) {
1704 void AArch64InstrInfo::suppressLdStPair(MachineInstr &MI) {
1711 bool AArch64InstrInfo::isStridedAccess(const MachineInstr &MI) {
1805 bool AArch64InstrInfo::isPairableLdStInst(const MachineInstr &MI) {
1927 bool AArch64InstrInfo::isCandidateToMergeOrPair(const MachineInstr &MI) const {
1960 if (NeedsWinCFI && (MI.getFlag(MachineInstr::FrameSetup) ||
1961 MI.getFlag(MachineInstr::FrameDestroy)))
1980 bool AArch64InstrInfo::getMemOperandWithOffset(const MachineInstr &LdSt,
1989 const MachineInstr &LdSt, const MachineOperand *&BaseOp, int64_t &Offset,
2036 AArch64InstrInfo::getMemOpBaseRegImmOfsOffsetOperand(MachineInstr &LdSt) const {
2329 const MachineInstr &FirstLdSt = *BaseOp1.getParent();
2330 const MachineInstr &SecondLdSt = *BaseOp2.getParent();
3177 MachineInstr *AArch64InstrInfo::foldMemoryOperandImpl(
3178 MachineFunction &MF, MachineInstr &MI, ArrayRef<unsigned> Ops,
3341 MachineInstr &LoadMI = *--InsertPt;
3367 int llvm::isAArch64FrameOffsetLegal(const MachineInstr &MI,
3458 bool llvm::rewriteAArch64FrameIndex(MachineInstr &MI, unsigned FrameRegIdx,
3468 MachineInstr::NoFlags, (Opcode == AArch64::ADDSXri));
3559 static bool isCombineInstrCandidateFP(const MachineInstr &Inst) {
3598 MachineInstr *MI = nullptr;
3640 const MachineInstr &Inst) const {
3664 static bool getMaddPatterns(MachineInstr &Root,
3734 static bool getFMAPatterns(MachineInstr &Root,
3950 MachineInstr &Root,
3982 static MachineInstr *
3984 const TargetInstrInfo *TII, MachineInstr &Root,
3985 SmallVectorImpl<MachineInstr *> &InsInstrs, unsigned IdxMulOpd,
3992 MachineInstr *MUL = MRI.getUniqueVRegDef(Root.getOperand(IdxMulOpd).getReg());
4062 static MachineInstr *genMaddR(MachineFunction &MF, MachineRegisterInfo &MRI,
4063 const TargetInstrInfo *TII, MachineInstr &Root,
4064 SmallVectorImpl<MachineInstr *> &InsInstrs,
4069 MachineInstr *MUL = MRI.getUniqueVRegDef(Root.getOperand(IdxMulOpd).getReg());
4099 MachineInstr &Root, MachineCombinerPattern Pattern,
4100 SmallVectorImpl<MachineInstr *> &InsInstrs,
4101 SmallVectorImpl<MachineInstr *> &DelInstrs,
4108 MachineInstr *MUL;
4745 bool AArch64InstrInfo::optimizeCondBranch(MachineInstr &MI) const {
4790 MachineInstr *DefMI = MRI->getVRegDef(VReg);
4835 MachineInstr *NewMI = BuildMI(RefToMBB, MI, DL, get(Opc))
5374 MachineInstr &MI = *MIT;
5503 for (MachineInstr &MI : MBB) {
5537 MachineInstr *Call = &*--MBB.instr_end();
5545 MachineInstr *TC = BuildMI(MF, DebugLoc(), get(TailOpcode))
5574 MachineInstr *STRXpre = BuildMI(MF, DebugLoc(), get(AArch64::STRXpre))
5590 .setMIFlags(MachineInstr::FrameSetup);
5598 .setMIFlags(MachineInstr::FrameSetup);
5601 MachineInstr *LDRXpost = BuildMI(MF, DebugLoc(), get(AArch64::LDRXpost))
5615 MachineInstr *ret = BuildMI(MF, DebugLoc(), get(AArch64::RET))
5655 MachineInstr *Save;
5656 MachineInstr *Restore;
5706 const MachineInstr &MI, const MachineOperand *&Source,
lib/Target/AArch64/AArch64InstrInfo.h 50 unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
52 bool isAsCheapAsAMove(const MachineInstr &MI) const override;
54 bool isCoalescableExtInstr(const MachineInstr &MI, unsigned &SrcReg,
58 areMemAccessesTriviallyDisjoint(const MachineInstr &MIa,
59 const MachineInstr &MIb) const override;
61 unsigned isLoadFromStackSlot(const MachineInstr &MI,
63 unsigned isStoreToStackSlot(const MachineInstr &MI,
67 static bool isGPRZero(const MachineInstr &MI);
70 static bool isGPRCopy(const MachineInstr &MI);
73 static bool isFPRCopy(const MachineInstr &MI);
77 static bool isLdStPairSuppressed(const MachineInstr &MI);
80 static bool isStridedAccess(const MachineInstr &MI);
84 static bool isUnscaledLdSt(MachineInstr &MI) {
97 static bool isPairableLdStInst(const MachineInstr &MI);
104 bool isCandidateToMergeOrPair(const MachineInstr &MI) const;
107 static void suppressLdStPair(MachineInstr &MI);
109 bool getMemOperandWithOffset(const MachineInstr &MI,
114 bool getMemOperandWithOffsetWidth(const MachineInstr &MI,
120 MachineOperand &getMemOpBaseRegImmOfsOffsetOperand(MachineInstr &LdSt) const;
161 MachineInstr *
162 foldMemoryOperandImpl(MachineFunction &MF, MachineInstr &MI,
173 MachineBasicBlock *getBranchDestBlock(const MachineInstr &MI) const override;
195 bool isSchedulingBoundary(const MachineInstr &MI,
202 bool analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
207 bool optimizeCompareInstr(MachineInstr &CmpInstr, unsigned SrcReg,
210 bool optimizeCondBranch(MachineInstr &MI) const override;
220 MachineInstr &Root,
224 bool isAssociativeAndCommutative(const MachineInstr &Inst) const override;
228 MachineInstr &Root, MachineCombinerPattern Pattern,
229 SmallVectorImpl<MachineInstr *> &InsInstrs,
230 SmallVectorImpl<MachineInstr *> &DelInstrs,
235 bool expandPostRAPseudo(MachineInstr &MI) const override;
263 static bool isFalkorShiftExtFast(const MachineInstr &MI);
266 static bool isSEHInstruction(const MachineInstr &MI);
275 bool isCopyInstrImpl(const MachineInstr &MI, const MachineOperand *&Source,
288 bool substituteCmpToZero(MachineInstr &CmpInstr, unsigned SrcReg,
303 MachineInstr::MIFlag = MachineInstr::NoFlags,
310 bool rewriteAArch64FrameIndex(MachineInstr &MI, unsigned FrameRegIdx,
335 int isAArch64FrameOffsetLegal(const MachineInstr &MI, StackOffset &Offset,
lib/Target/AArch64/AArch64InstructionSelector.cpp 54 bool select(MachineInstr &I) override;
70 bool selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const;
74 void preISelLower(MachineInstr &I) const;
77 bool earlySelect(MachineInstr &I) const;
79 bool earlySelectSHL(MachineInstr &I, MachineRegisterInfo &MRI) const;
82 void contractCrossBankCopyIntoStore(MachineInstr &I,
85 bool selectVaStartAAPCS(MachineInstr &I, MachineFunction &MF,
87 bool selectVaStartDarwin(MachineInstr &I, MachineFunction &MF,
90 bool selectCompareBranch(MachineInstr &I, MachineFunction &MF,
93 bool selectVectorASHR(MachineInstr &I, MachineRegisterInfo &MRI) const;
94 bool selectVectorSHL(MachineInstr &I, MachineRegisterInfo &MRI) const;
98 MachineInstr *emitScalarToVector(unsigned EltSize,
109 MachineInstr *emitLaneInsert(Optional<Register> DstReg, Register SrcReg,
113 bool selectInsertElt(MachineInstr &I, MachineRegisterInfo &MRI) const;
114 bool selectBuildVector(MachineInstr &I, MachineRegisterInfo &MRI) const;
115 bool selectMergeValues(MachineInstr &I, MachineRegisterInfo &MRI) const;
116 bool selectUnmergeValues(MachineInstr &I, MachineRegisterInfo &MRI) const;
118 bool selectShuffleVector(MachineInstr &I, MachineRegisterInfo &MRI) const;
119 bool selectExtractElt(MachineInstr &I, MachineRegisterInfo &MRI) const;
120 bool selectConcatVectors(MachineInstr &I, MachineRegisterInfo &MRI) const;
121 bool selectSplitVectorUnmerge(MachineInstr &I,
123 bool selectIntrinsicWithSideEffects(MachineInstr &I,
125 bool selectIntrinsic(MachineInstr &I, MachineRegisterInfo &MRI) const;
126 bool selectVectorICmp(MachineInstr &I, MachineRegisterInfo &MRI) const;
127 bool selectIntrinsicTrunc(MachineInstr &I, MachineRegisterInfo &MRI) const;
128 bool selectIntrinsicRound(MachineInstr &I, MachineRegisterInfo &MRI) const;
129 bool selectJumpTable(MachineInstr &I, MachineRegisterInfo &MRI) const;
130 bool selectBrJT(MachineInstr &I, MachineRegisterInfo &MRI) const;
131 bool selectTLSGlobalValue(MachineInstr &I, MachineRegisterInfo &MRI) const;
134 MachineInstr *emitLoadFromConstantPool(Constant *CPVal,
138 MachineInstr *emitVectorConcat(Optional<Register> Dst, Register Op1,
141 MachineInstr *emitIntegerCompare(MachineOperand &LHS, MachineOperand &RHS,
144 MachineInstr *emitADD(Register DefReg, MachineOperand &LHS, MachineOperand &RHS,
146 MachineInstr *emitCMN(MachineOperand &LHS, MachineOperand &RHS,
148 MachineInstr *emitTST(const Register &LHS, const Register &RHS,
150 MachineInstr *emitExtractVectorElt(Optional<Register> DstReg,
158 MachineInstr *emitFMovForFConstant(MachineInstr &MI,
158 MachineInstr *emitFMovForFConstant(MachineInstr &MI,
162 MachineInstr *emitCSetForICMP(Register DefReg, unsigned Pred,
203 bool isWorthFoldingIntoExtendedReg(MachineInstr &MI,
238 void renderTruncImm(MachineInstrBuilder &MIB, const MachineInstr &MI) const;
239 void renderLogicalImm32(MachineInstrBuilder &MIB, const MachineInstr &I) const;
240 void renderLogicalImm64(MachineInstrBuilder &MIB, const MachineInstr &I) const;
243 void materializeLargeCMVal(MachineInstr &I, const Value *V,
247 bool tryOptVectorShuffle(MachineInstr &I) const;
248 bool tryOptVectorDup(MachineInstr &MI) const;
249 bool tryOptSelect(MachineInstr &MI) const;
250 MachineInstr *tryFoldIntegerCompare(MachineOperand &LHS, MachineOperand &RHS,
255 bool isLoadStoreOfNumBytes(const MachineInstr &MI, unsigned NumBytes) const;
260 bool isDef32(const MachineInstr &MI) const;
402 static bool unsupportedBinOp(const MachineInstr &I,
555 static bool isValidCopy(const MachineInstr &I, const RegisterBank &DstBank,
592 static bool selectSubregisterCopy(MachineInstr &I, MachineRegisterInfo &MRI,
617 getRegClassesForCopy(MachineInstr &I, const TargetInstrInfo &TII,
642 static bool selectCopy(MachineInstr &I, const TargetInstrInfo &TII,
831 static unsigned selectSelectOpc(MachineInstr &I, MachineRegisterInfo &MRI,
845 static unsigned selectFCMPOpc(MachineInstr &I, MachineRegisterInfo &MRI) {
953 MachineInstr &I, MachineFunction &MF, MachineRegisterInfo &MRI) const {
957 MachineInstr *CCMI = MRI.getVRegDef(CondReg);
1010 MachineInstr &I, MachineRegisterInfo &MRI) const {
1040 MachineInstr &I, MachineRegisterInfo &MRI) const {
1084 MachineInstr &I, MachineFunction &MF, MachineRegisterInfo &MRI) const {
1089 MachineInstr &I, MachineFunction &MF, MachineRegisterInfo &MRI) const {
1116 MachineInstr &I, const Value *V, unsigned OpFlags) const {
1154 void AArch64InstructionSelector::preISelLower(MachineInstr &I) const {
1178 auto *AmtMI = MRI.getVRegDef(ShiftReg);
1199 MachineInstr &I, MachineRegisterInfo &MRI) const {
1234 MachineInstr &I, MachineRegisterInfo &MRI) const {
1250 MachineInstr *Def = getDefIgnoringCopies(I.getOperand(0).getReg(), MRI);
1275 bool AArch64InstructionSelector::earlySelect(MachineInstr &I) const {
1316 bool AArch64InstructionSelector::select(MachineInstr &I) {
1610 MachineInstr *Extract = emitExtractVectorElt(
1765 auto *PtrMI = MRI.getVRegDef(PtrReg);
2001 MachineInstr *Extract = emitExtractVectorElt(
2076 MachineInstr *ExtI;
2085 auto *LoadMI = getOpcodeDef(TargetOpcode::G_LOAD, SrcReg, MRI);
2172 MachineInstr &TstMI =
2178 MachineInstr &CSelMI = *BuildMI(MBB, I, I.getDebugLoc(), TII.get(CSelOpc))
2243 MachineInstr &CSetMI =
2252 MachineInstr &CSet2MI =
2258 MachineInstr &OrMI =
2332 bool AArch64InstructionSelector::selectBrJT(MachineInstr &I,
2353 MachineInstr &I, MachineRegisterInfo &MRI) const {
2370 MachineInstr &I, MachineRegisterInfo &MRI) const {
2401 MachineInstr &I, MachineRegisterInfo &MRI) const {
2456 MachineInstr &I, MachineRegisterInfo &MRI) const {
2511 MachineInstr &I, MachineRegisterInfo &MRI) const {
2682 MachineInstr *AArch64InstructionSelector::emitScalarToVector(
2710 MachineInstr &I, MachineRegisterInfo &MRI) const {
2729 MachineInstr *InsMI =
2733 MachineInstr *Ins2MI = emitLaneInsert(DstReg, InsMI->getOperand(0).getReg(),
2751 MachineInstr &SubRegMI = *BuildMI(*I.getParent(), I, I.getDebugLoc(),
2759 MachineInstr &SubRegMI2 = *BuildMI(*I.getParent(), I, I.getDebugLoc(),
2765 MachineInstr &BFM =
2804 MachineInstr *AArch64InstructionSelector::emitExtractVectorElt(
2848 MachineInstr *ScalarToVector = emitScalarToVector(
2855 MachineInstr *LaneCopyMI =
2865 MachineInstr &I, MachineRegisterInfo &MRI) const {
2895 MachineInstr *Extract = emitExtractVectorElt(DstReg, DstRB, NarrowTy, SrcReg,
2905 MachineInstr &I, MachineRegisterInfo &MRI) const {
2925 MachineInstr *Extract =
2935 MachineInstr &I, MachineRegisterInfo &MRI) const {
2992 MachineInstr &ImpDefMI =
2998 MachineInstr &InsMI =
3026 MachineInstr &CopyInst =
3050 MachineInstr &I, MachineRegisterInfo &MRI) const {
3057 MachineInstr *ConcatMI = emitVectorConcat(Dst, Op1, Op2, MIRBuilder);
3076 MachineInstr *AArch64InstructionSelector::emitLoadFromConstantPool(
3084 MachineInstr *LoadMI = nullptr;
3144 MachineInstr *
3169 MachineInstr *
3195 MachineInstr *
3223 MachineInstr *AArch64InstructionSelector::emitIntegerCompare(
3230 MachineInstr *FoldCmp =
3271 MachineInstr *AArch64InstructionSelector::emitVectorConcat(
3305 MachineInstr *WidenedOp1 =
3307 MachineInstr *WidenedOp2 =
3331 MachineInstr *AArch64InstructionSelector::emitFMovForFConstant(
3332 MachineInstr &I, MachineRegisterInfo &MRI) const {
3364 MachineInstr *
3378 bool AArch64InstructionSelector::tryOptSelect(MachineInstr &I) const {
3401 MachineInstr *CondDef = MRI.getVRegDef(I.getOperand(1).getReg());
3475 MachineInstr *AArch64InstructionSelector::tryFoldIntegerCompare(
3516 MachineInstr *LHSDef = getDefIgnoringCopies(LHS.getReg(), MRI);
3517 MachineInstr *RHSDef = getDefIgnoringCopies(RHS.getReg(), MRI);
3567 bool AArch64InstructionSelector::tryOptVectorDup(MachineInstr &I) const {
3588 auto *InsMI =
3593 auto *UndefMI =
3625 MachineInstr *Widen = emitScalarToVector(
3639 bool AArch64InstructionSelector::tryOptVectorShuffle(MachineInstr &I) const {
3648 MachineInstr &I, MachineRegisterInfo &MRI) const {
3690 MachineInstr *IndexLoad = emitLoadFromConstantPool(CPVal, MIRBuilder);
3699 MachineInstr *Concat = emitVectorConcat(None, Src1Reg, Src2Reg, MIRBuilder);
3742 MachineInstr *AArch64InstructionSelector::emitLaneInsert(
3746 MachineInstr *InsElt = nullptr;
3774 MachineInstr &I, MachineRegisterInfo &MRI) const {
3805 MachineInstr *ScalarToVec = emitScalarToVector(
3815 MachineInstr *InsMI =
3850 MachineInstr &I, MachineRegisterInfo &MRI) const {
3863 MachineInstr *ScalarToVec =
3874 MachineInstr *PrevMI = nullptr;
3927 static unsigned findIntrinsicID(MachineInstr &I) {
3937 MachineInstr &I, MachineRegisterInfo &MRI) const {
3963 MachineInstr &I, MachineRegisterInfo &MRI) const {
4149 MachineInstr &MI, const MachineRegisterInfo &MRI) const {
4200 MachineInstr *Gep = getOpcodeDef(TargetOpcode::G_GEP, Root.getReg(), MRI);
4206 MachineInstr *OffsetInst = getDefIgnoringCopies(Gep->getOperand(2).getReg(), MRI);
4286 MachineInstr *Gep = MRI.getVRegDef(Root.getReg());
4350 MachineInstr *RootDef = MRI.getVRegDef(Root.getReg());
4357 MachineInstr *RHS = MRI.getVRegDef(OffImm.getReg());
4391 MachineInstr *RootDef = MRI.getVRegDef(Root.getReg());
4405 MachineInstr *LHSDef = MRI.getVRegDef(LHS.getReg());
4406 MachineInstr *RHSDef = MRI.getVRegDef(RHS.getReg());
4438 static AArch64_AM::ShiftExtendType getShiftTypeForInst(MachineInstr &MI) {
4467 MachineInstr *ShiftInst = MRI.getVRegDef(Root.getReg());
4497 getExtendTypeForInst(MachineInstr &MI, MachineRegisterInfo &MRI) {
4580 MachineInstr *RootDef = getDefIgnoringCopies(Root.getReg(), MRI);
4599 MachineInstr *ExtDef = getDefIgnoringCopies(LHS.getReg(), MRI);
4618 MachineInstr *ExtInst = MRI.getVRegDef(ExtReg);
4636 const MachineInstr &MI) const {
4645 MachineInstrBuilder &MIB, const MachineInstr &I) const {
4653 MachineInstrBuilder &MIB, const MachineInstr &I) const {
4661 const MachineInstr &MI, unsigned NumBytes) const {
4669 bool AArch64InstructionSelector::isDef32(const MachineInstr &MI) const {
lib/Target/AArch64/AArch64LegalizerInfo.cpp 619 bool AArch64LegalizerInfo::legalizeCustom(MachineInstr &MI,
642 MachineInstr &MI, MachineRegisterInfo &MRI,
660 MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &MIRBuilder,
668 auto *CstMI = MRI.getVRegDef(AmtReg);
684 MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &MIRBuilder,
722 bool AArch64LegalizerInfo::legalizeVaArg(MachineInstr &MI,
lib/Target/AArch64/AArch64LegalizerInfo.h 30 bool legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI,
34 bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
38 bool legalizeVaArg(MachineInstr &MI, MachineRegisterInfo &MRI,
40 bool legalizeLoadStore(MachineInstr &MI, MachineRegisterInfo &MRI,
43 bool legalizeShlAshrLshr(MachineInstr &MI, MachineRegisterInfo &MRI,
lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp 153 bool isMatchingUpdateInsn(MachineInstr &MemMI, MachineInstr &MI,
153 bool isMatchingUpdateInsn(MachineInstr &MemMI, MachineInstr &MI,
206 static bool isTagStore(const MachineInstr &MI) {
219 static int getMemScale(const MachineInstr &MI) {
381 static unsigned isMatchingStore(MachineInstr &LoadInst,
382 MachineInstr &StoreInst) {
563 static bool isPairedLdSt(const MachineInstr &MI) {
584 static void getPrePostIndexedMemOpInfo(const MachineInstr &MI, int &Scale,
602 static const MachineOperand &getLdStRegOp(const MachineInstr &MI,
609 static const MachineOperand &getLdStBaseOp(const MachineInstr &MI) {
614 static const MachineOperand &getLdStOffsetOp(const MachineInstr &MI) {
619 static bool isLdOffsetInRangeOfSt(MachineInstr &LoadInst,
620 MachineInstr &StoreInst,
635 static bool isPromotableZeroStoreInst(MachineInstr &MI) {
642 static bool isPromotableLoadFromStore(MachineInstr &MI) {
660 static bool isMergeableLdStUpdate(MachineInstr &MI) {
746 MachineInstr *RtMI;
834 MachineInstr *RtMI, *Rt2MI;
876 for (MachineInstr &MI : make_range(std::next(I), Paired))
958 MachineInstr *BitExtMI;
963 for (MachineInstr &MI : make_range(StoreI->getIterator(),
1037 for (MachineInstr &MI : make_range(StoreI->getIterator(),
1080 static bool mayAlias(MachineInstr &MIa, MachineInstr &MIb,
1080 static bool mayAlias(MachineInstr &MIa, MachineInstr &MIb,
1093 static bool mayAlias(MachineInstr &MIa,
1094 SmallVectorImpl<MachineInstr *> &MemInsns,
1096 for (MachineInstr *MIb : MemInsns)
1108 MachineInstr &LoadMI = *I;
1124 MachineInstr &MI = *MBBI;
1163 static bool areCandidatesToMergeOrPair(MachineInstr &FirstMI, MachineInstr &MI,
1163 static bool areCandidatesToMergeOrPair(MachineInstr &FirstMI, MachineInstr &MI,
1218 MachineInstr &FirstMI = *I;
1235 SmallVector<MachineInstr *, 4> MemInsns;
1238 MachineInstr &MI = *MBBI;
1441 bool AArch64LoadStoreOpt::isMatchingUpdateInsn(MachineInstr &MemMI,
1442 MachineInstr &MI,
1491 MachineInstr &MemMI = *I;
1524 MachineInstr &MI = *MBBI;
1551 MachineInstr &MemMI = *I;
1579 MachineInstr &MI = *MBBI;
1604 MachineInstr &MI = *MBBI;
1631 MachineInstr &MI = *MBBI;
1655 MachineInstr &MI = *MBBI;
1691 MachineInstr &MI = *MBBI;
lib/Target/AArch64/AArch64MCInstLower.cpp 296 void AArch64MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
lib/Target/AArch64/AArch64MCInstLower.h 38 void Lower(const MachineInstr *MI, MCInst &OutMI) const;
lib/Target/AArch64/AArch64MachineFunctionInfo.h 260 using SetOfInstructions = SmallPtrSet<const MachineInstr *, 16>;
269 SmallVector<const MachineInstr *, 3> Args;
272 using LOHArgs = ArrayRef<const MachineInstr *>;
lib/Target/AArch64/AArch64MacroFusion.cpp 23 static bool isArithmeticBccPair(const MachineInstr *FirstMI,
24 const MachineInstr &SecondMI) {
64 static bool isArithmeticCbzPair(const MachineInstr *FirstMI,
65 const MachineInstr &SecondMI) {
114 static bool isAESPair(const MachineInstr *FirstMI,
115 const MachineInstr &SecondMI) {
132 static bool isCryptoEORPair(const MachineInstr *FirstMI,
133 const MachineInstr &SecondMI) {
155 static bool isLiteralsPair(const MachineInstr *FirstMI,
156 const MachineInstr &SecondMI) {
188 static bool isAddressLdStPair(const MachineInstr *FirstMI,
189 const MachineInstr &SecondMI) {
230 static bool isCCSelectPair(const MachineInstr *FirstMI,
231 const MachineInstr &SecondMI) {
273 static bool isArithmeticLogicPair(const MachineInstr *FirstMI,
274 const MachineInstr &SecondMI) {
377 const MachineInstr *FirstMI,
378 const MachineInstr &SecondMI) {
lib/Target/AArch64/AArch64PBQPRegAlloc.cpp 320 const MachineInstr &MI) {
336 for (const auto &MI: MBB) {
lib/Target/AArch64/AArch64PreLegalizerCombiner.cpp 55 virtual bool combine(GISelChangeObserver &Observer, MachineInstr &MI,
60 MachineInstr &MI,
lib/Target/AArch64/AArch64RedundantCopyElimination.cpp 93 bool knownRegValInBlock(MachineInstr &CondBr, MachineBasicBlock *MBB,
125 MachineInstr &CondBr, MachineBasicBlock *MBB,
168 for (MachineInstr &PredI : make_range(std::next(RIt), PredMBB->rend())) {
376 MachineInstr *MI = &*I;
462 for (MachineInstr &MMI : make_range(FirstUse, PredMBB->end()))
464 for (MachineInstr &MMI : make_range(MBB->begin(), LastChange))
lib/Target/AArch64/AArch64RegisterBankInfo.cpp 419 const MachineInstr &MI) const {
461 const MachineInstr &MI, const MachineRegisterInfo &MRI,
479 bool AArch64RegisterBankInfo::onlyUsesFP(const MachineInstr &MI,
494 const MachineInstr &MI, const MachineRegisterInfo &MRI,
509 AArch64RegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
681 for (const MachineInstr &UseMI :
699 MachineInstr *DefMI = MRI.getVRegDef(VReg);
749 MachineInstr *DefMI = MRI.getVRegDef(VReg);
823 MachineInstr *DefMI = MRI.getVRegDef(VReg);
lib/Target/AArch64/AArch64RegisterBankInfo.h 115 getSameKindOfOperandsMapping(const MachineInstr &MI) const;
118 bool hasFPConstraints(const MachineInstr &MI, const MachineRegisterInfo &MRI,
122 bool onlyUsesFP(const MachineInstr &MI, const MachineRegisterInfo &MRI,
126 bool onlyDefinesFP(const MachineInstr &MI, const MachineRegisterInfo &MRI,
139 getInstrAlternativeMappings(const MachineInstr &MI) const override;
142 getInstrMapping(const MachineInstr &MI) const override;
lib/Target/AArch64/AArch64RegisterInfo.cpp 334 bool AArch64RegisterInfo::needsFrameBaseReg(MachineInstr *MI,
394 bool AArch64RegisterInfo::isFrameOffsetLegal(const MachineInstr *MI,
427 void AArch64RegisterInfo::resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
451 MachineInstr &MI = *II;
lib/Target/AArch64/AArch64RegisterInfo.h 98 bool needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const override;
99 bool isFrameOffsetLegal(const MachineInstr *MI, unsigned BaseReg,
104 void resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
lib/Target/AArch64/AArch64SIMDInstrOpt.cpp 173 bool reuseDUP(MachineInstr &MI, unsigned DupOpcode, unsigned SrcReg,
180 bool optimizeVectElement(MachineInstr &MI);
187 bool processSeqRegInst(MachineInstr *DefiningMI, unsigned* StReg,
193 bool optimizeLdStInterleave(MachineInstr &MI);
197 unsigned determineSrcReg(MachineInstr &MI) const;
316 bool AArch64SIMDInstrOpt::reuseDUP(MachineInstr &MI, unsigned DupOpcode,
322 MachineInstr *CurrentMI = &*MII;
350 bool AArch64SIMDInstrOpt::optimizeVectElement(MachineInstr &MI) {
502 bool AArch64SIMDInstrOpt::optimizeLdStInterleave(MachineInstr &MI) {
506 MachineInstr *DefiningMI;
631 bool AArch64SIMDInstrOpt::processSeqRegInst(MachineInstr *DefiningMI,
666 unsigned AArch64SIMDInstrOpt::determineSrcReg(MachineInstr &MI) const {
709 SmallVector<MachineInstr *, 8> RemoveMIs;
713 MachineInstr &MI = *MII;
728 for (MachineInstr *MI : RemoveMIs)
lib/Target/AArch64/AArch64SpeculationHardening.cpp 280 SmallVector<std::pair<MachineInstr *, unsigned>, 4> ReturnInstructions;
281 SmallVector<std::pair<MachineInstr *, unsigned>, 4> CallInstructions;
292 MachineInstr &MI = *I;
414 for (MachineInstr &MI : MBB) {
469 MachineInstr &MI = *MBBI;
550 MachineInstr &MI = *MBBI;
620 MachineInstr &MI = *MBBI;
lib/Target/AArch64/AArch64StackTaggingPreRA.cpp 63 SmallVector<MachineInstr*, 16> ReTags;
150 MachineInstr *UseI = &*(UI++);
167 for (auto *I : ReTags) {
191 for (auto &I : BB) {
lib/Target/AArch64/AArch64StorePairSuppress.cpp 51 bool isNarrowFPStore(const MachineInstr &MI);
109 bool AArch64StorePairSuppress::isNarrowFPStore(const MachineInstr &MI) {
147 for (auto &MI : MBB) {
lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp 577 for (const MachineInstr &MI : MBB) {
697 for (const MachineInstr &MI : MBB) {
1276 bool AMDGPUAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
lib/Target/AMDGPU/AMDGPUAsmPrinter.h 121 const MachineInstr *MI);
124 void EmitInstruction(const MachineInstr *MI) override;
143 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp 112 bool AMDGPUInstructionSelector::selectCOPY(MachineInstr &I) const {
180 bool AMDGPUInstructionSelector::selectPHI(MachineInstr &I) const {
219 MachineInstr *MI = MO.getParent();
262 bool AMDGPUInstructionSelector::selectG_AND_OR_XOR(MachineInstr &I) const {
299 bool AMDGPUInstructionSelector::selectG_ADD_SUB(MachineInstr &I) const {
312 MachineInstr *Add =
331 MachineInstr *Add
371 MachineInstr *Addc = BuildMI(*BB, &I, DL, TII.get(AMDGPU::V_ADDC_U32_e64), DstHi)
396 bool AMDGPUInstructionSelector::selectG_UADDO_USUBO(MachineInstr &I) const {
437 bool AMDGPUInstructionSelector::selectG_EXTRACT(MachineInstr &I) const {
445 MachineInstr *Copy = BuildMI(*BB, &I, DL, TII.get(TargetOpcode::COPY),
460 bool AMDGPUInstructionSelector::selectG_MERGE_VALUES(MachineInstr &MI) const {
499 bool AMDGPUInstructionSelector::selectG_UNMERGE_VALUES(MachineInstr &MI) const {
541 bool AMDGPUInstructionSelector::selectG_GEP(MachineInstr &I) const {
545 bool AMDGPUInstructionSelector::selectG_IMPLICIT_DEF(MachineInstr &I) const {
560 bool AMDGPUInstructionSelector::selectG_INSERT(MachineInstr &I) const {
613 bool AMDGPUInstructionSelector::selectG_INTRINSIC(MachineInstr &I) const {
716 bool AMDGPUInstructionSelector::selectG_ICMP(MachineInstr &I) const {
730 MachineInstr *ICmp = BuildMI(*BB, &I, DL, TII.get(Opcode))
746 MachineInstr *ICmp = BuildMI(*BB, &I, DL, TII.get(Opcode),
757 static MachineInstr *
758 buildEXP(const TargetInstrInfo &TII, MachineInstr *Insert, unsigned Tgt,
801 static std::tuple<Register, unsigned, MachineInstr *>
803 MachineInstr *Def = getDefIgnoringCopies(Reg, MRI);
925 MachineInstr *OffsetDef;
978 bool AMDGPUInstructionSelector::selectStoreIntrinsic(MachineInstr &MI,
1033 MachineInstr &I) const {
1043 MachineInstr *Exp = buildEXP(TII, &I, Tgt, I.getOperand(3).getReg(),
1063 MachineInstr *Exp = buildEXP(TII, &I, Tgt, Reg0, Reg1, Undef, Undef, VM,
1092 bool AMDGPUInstructionSelector::selectG_SELECT(MachineInstr &I) const {
1104 MachineInstr *CopySCC = BuildMI(*BB, &I, DL, TII.get(AMDGPU::COPY), AMDGPU::SCC)
1112 MachineInstr *Select = BuildMI(*BB, &I, DL, TII.get(SelectOpcode), DstReg)
1126 MachineInstr *Select =
1139 bool AMDGPUInstructionSelector::selectG_STORE(MachineInstr &I) const {
1165 bool AMDGPUInstructionSelector::selectG_TRUNC(MachineInstr &I) const {
1217 bool AMDGPUInstructionSelector::selectG_SZA_EXT(MachineInstr &I) const {
1263 MachineInstr *ExtI =
1283 MachineInstr *ExtI =
1292 MachineInstr *ExtI =
1368 bool AMDGPUInstructionSelector::selectG_SITOFP_UITOFP(MachineInstr &I) const {
1398 bool AMDGPUInstructionSelector::selectG_CONSTANT(MachineInstr &I) const {
1437 MachineInstr *ResInst;
1470 static bool isConstant(const MachineInstr &MI) {
1474 void AMDGPUInstructionSelector::getAddrModeInfo(const MachineInstr &Load,
1477 const MachineInstr *PtrMI = MRI.getUniqueVRegDef(Load.getOperand(1).getReg());
1488 const MachineInstr *OpDef = MRI.getUniqueVRegDef(GEPOp.getReg());
1508 bool AMDGPUInstructionSelector::isInstrUniform(const MachineInstr &MI) const {
1538 void AMDGPUInstructionSelector::initM0(MachineInstr &I) const {
1551 bool AMDGPUInstructionSelector::selectG_LOAD_ATOMICRMW(MachineInstr &I) const {
1556 bool AMDGPUInstructionSelector::selectG_BRCOND(MachineInstr &I) const {
1600 bool AMDGPUInstructionSelector::selectG_FRAME_INDEX(MachineInstr &I) const {
1612 bool AMDGPUInstructionSelector::selectG_PTR_MASK(MachineInstr &I) const {
1673 bool AMDGPUInstructionSelector::select(MachineInstr &I) {
1783 MachineInstr *MI = MRI->getVRegDef(Src);
1920 MachineInstr *MI = Root.getParent();
1952 MachineInstr *MI = Root.getParent();
1963 const MachineInstr *OpDef = MRI->getVRegDef(Root.getReg());
2002 MachineInstr *MI = Root.getParent();
2043 if (const MachineInstr *RootDef = MRI->getVRegDef(Root.getReg())) {
2047 const MachineInstr *LHSDef = MRI->getVRegDef(LHS.getReg());
2048 const MachineInstr *RHSDef = MRI->getVRegDef(RHS.getReg());
2110 MachineInstr *MI = Root.getParent();
2137 const MachineInstr *RootDef = MRI->getVRegDef(Root.getReg());
2149 const MachineInstr *LHSDef = MRI->getVRegDef(LHS.getReg());
2150 const MachineInstr *RHSDef = MRI->getVRegDef(RHS.getReg());
2178 const MachineInstr &MI) const {
lib/Target/AMDGPU/AMDGPUInstructionSelector.h 54 bool select(MachineInstr &I) override;
62 const MachineInstr &GEP;
66 GEPInfo(const MachineInstr &GEP) : GEP(GEP), Imm(0) { }
69 bool isInstrUniform(const MachineInstr &MI) const;
73 bool selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const;
78 bool selectCOPY(MachineInstr &I) const;
79 bool selectPHI(MachineInstr &I) const;
80 bool selectG_TRUNC(MachineInstr &I) const;
81 bool selectG_SZA_EXT(MachineInstr &I) const;
82 bool selectG_SITOFP_UITOFP(MachineInstr &I) const;
83 bool selectG_CONSTANT(MachineInstr &I) const;
84 bool selectG_AND_OR_XOR(MachineInstr &I) const;
85 bool selectG_ADD_SUB(MachineInstr &I) const;
86 bool selectG_UADDO_USUBO(MachineInstr &I) const;
87 bool selectG_EXTRACT(MachineInstr &I) const;
88 bool selectG_MERGE_VALUES(MachineInstr &I) const;
89 bool selectG_UNMERGE_VALUES(MachineInstr &I) const;
90 bool selectG_GEP(MachineInstr &I) const;
91 bool selectG_IMPLICIT_DEF(MachineInstr &I) const;
92 bool selectG_INSERT(MachineInstr &I) const;
93 bool selectG_INTRINSIC(MachineInstr &I) const;
98 bool selectStoreIntrinsic(MachineInstr &MI, bool IsFormat) const;
100 bool selectG_INTRINSIC_W_SIDE_EFFECTS(MachineInstr &I) const;
102 bool selectG_ICMP(MachineInstr &I) const;
104 void getAddrModeInfo(const MachineInstr &Load, const MachineRegisterInfo &MRI,
106 bool selectSMRD(MachineInstr &I, ArrayRef<GEPInfo> AddrInfo) const;
108 void initM0(MachineInstr &I) const;
109 bool selectG_LOAD_ATOMICRMW(MachineInstr &I) const;
110 bool selectG_STORE(MachineInstr &I) const;
111 bool selectG_SELECT(MachineInstr &I) const;
112 bool selectG_BRCOND(MachineInstr &I) const;
113 bool selectG_FRAME_INDEX(MachineInstr &I) const;
114 bool selectG_PTR_MASK(MachineInstr &I) const;
168 const MachineInstr &MI) const;
lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp 1090 bool AMDGPULegalizerInfo::legalizeCustom(MachineInstr &MI,
1211 MachineInstr &MI, MachineRegisterInfo &MRI,
1317 MachineInstr &MI, MachineRegisterInfo &MRI,
1344 MachineInstr &MI, MachineRegisterInfo &MRI,
1389 MachineInstr &MI, MachineRegisterInfo &MRI,
1435 MachineInstr &MI, MachineRegisterInfo &MRI,
1467 MachineInstr &MI, MachineRegisterInfo &MRI,
1491 MachineInstr &MI, MachineRegisterInfo &MRI,
1520 MachineInstr &MI, MachineRegisterInfo &MRI,
1550 MachineInstr &MI, MachineRegisterInfo &MRI,
1635 MachineInstr &MI, MachineRegisterInfo &MRI,
1705 MachineInstr &MI, MachineRegisterInfo &MRI,
1717 MachineInstr &MI, MachineRegisterInfo &MRI,
1738 MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const {
1765 static MachineInstr *verifyCFIntrinsic(MachineInstr &MI,
1765 static MachineInstr *verifyCFIntrinsic(MachineInstr &MI,
1771 MachineInstr &UseMI = *MRI.use_instr_nodbg_begin(CondDef);
1835 MachineInstr &MI,
1859 bool AMDGPULegalizerInfo::legalizeFDIV(MachineInstr &MI,
1876 bool AMDGPULegalizerInfo::legalizeFastUnsafeFDIV(MachineInstr &MI,
1891 MF.getTarget().Options.UnsafeFPMath || MI.getFlag(MachineInstr::FmArcp);
1936 bool AMDGPULegalizerInfo::legalizeFDIV16(MachineInstr &MI,
1969 bool AMDGPULegalizerInfo::legalizeFDIVFastIntrin(MachineInstr &MI,
2005 bool AMDGPULegalizerInfo::legalizeImplicitArgPtr(MachineInstr &MI,
2039 bool AMDGPULegalizerInfo::legalizeIsAddrSpace(MachineInstr &MI,
2074 bool AMDGPULegalizerInfo::legalizeRawBufferStore(MachineInstr &MI,
2107 bool AMDGPULegalizerInfo::legalizeIntrinsic(MachineInstr &MI,
2113 if (MachineInstr *BrCond = verifyCFIntrinsic(MI, MRI)) {
2135 if (MachineInstr *BrCond = verifyCFIntrinsic(MI, MRI)) {
lib/Target/AMDGPU/AMDGPULegalizerInfo.h 35 bool legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI,
43 bool legalizeAddrSpaceCast(MachineInstr &MI, MachineRegisterInfo &MRI,
45 bool legalizeFrint(MachineInstr &MI, MachineRegisterInfo &MRI,
47 bool legalizeFceil(MachineInstr &MI, MachineRegisterInfo &MRI,
49 bool legalizeIntrinsicTrunc(MachineInstr &MI, MachineRegisterInfo &MRI,
51 bool legalizeITOFP(MachineInstr &MI, MachineRegisterInfo &MRI,
53 bool legalizeMinNumMaxNum(MachineInstr &MI, MachineRegisterInfo &MRI,
55 bool legalizeExtractVectorElt(MachineInstr &MI, MachineRegisterInfo &MRI,
57 bool legalizeInsertVectorElt(MachineInstr &MI, MachineRegisterInfo &MRI,
59 bool legalizeSinCos(MachineInstr &MI, MachineRegisterInfo &MRI,
66 bool legalizeGlobalValue(MachineInstr &MI, MachineRegisterInfo &MRI,
68 bool legalizeLoad(MachineInstr &MI, MachineRegisterInfo &MRI,
72 bool legalizeFMad(MachineInstr &MI, MachineRegisterInfo &MRI,
75 bool legalizeAtomicCmpXChg(MachineInstr &MI, MachineRegisterInfo &MRI,
84 MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B,
87 bool legalizeFDIV(MachineInstr &MI, MachineRegisterInfo &MRI,
89 bool legalizeFDIV16(MachineInstr &MI, MachineRegisterInfo &MRI,
91 bool legalizeFastUnsafeFDIV(MachineInstr &MI, MachineRegisterInfo &MRI,
93 bool legalizeFDIVFastIntrin(MachineInstr &MI, MachineRegisterInfo &MRI,
96 bool legalizeImplicitArgPtr(MachineInstr &MI, MachineRegisterInfo &MRI,
98 bool legalizeIsAddrSpace(MachineInstr &MI, MachineRegisterInfo &MRI,
103 bool legalizeRawBufferStore(MachineInstr &MI, MachineRegisterInfo &MRI,
105 bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
lib/Target/AMDGPU/AMDGPUMCInstLower.cpp 56 void lower(const MachineInstr *MI, MCInst &OutMI) const;
66 void lower(const MachineInstr *MI, MCInst &OutMI) const;
176 void AMDGPUMCInstLower::lower(const MachineInstr *MI, MCInst &OutMI) const {
257 void AMDGPUAsmPrinter::EmitInstruction(const MachineInstr *MI) {
375 void R600MCInstLower::lower(const MachineInstr *MI, MCInst &OutMI) const {
384 void R600AsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/AMDGPU/AMDGPUMachineCFGStructurizer.cpp 302 static unsigned getPHINumInputs(MachineInstr &PHI) {
307 static MachineBasicBlock *getPHIPred(MachineInstr &PHI, unsigned Index) {
312 static void setPhiPred(MachineInstr &PHI, unsigned Index,
317 static unsigned getPHISourceReg(MachineInstr &PHI, unsigned Index) {
322 static unsigned getPHIDestReg(MachineInstr &PHI) {
345 MachineInstr *DefInstr, const MachineRegisterInfo *MRI,
349 MachineInstr *DefInstr,
693 MachineInstr *DefInstr,
715 MachineInstr *UseInstr = UI.getParent();
733 MachineInstr *DefInstr,
756 for (auto &II : *MBB) {
772 for (auto &II : *(*SI)) {
774 MachineInstr &PHI = II;
798 for (auto &II : *MBB) {
843 for (auto &II : *Succ) {
845 MachineInstr &PHI = II;
1023 for (auto &II : *MBB) {
1098 void getPHIRegionIndices(RegionMRT *Region, MachineInstr &PHI,
1100 void getPHIRegionIndices(LinearizedRegion *Region, MachineInstr &PHI,
1102 void getPHINonRegionIndices(LinearizedRegion *Region, MachineInstr &PHI,
1106 unsigned LDestReg, MachineInstr &PHI,
1109 unsigned storePHILinearizationInfo(MachineInstr &PHI,
1114 bool shrinkPHI(MachineInstr &PHI, SmallVector<unsigned, 2> &PHIIndices,
1117 bool shrinkPHI(MachineInstr &PHI, unsigned CombinedSourceReg,
1121 void replacePHI(MachineInstr &PHI, unsigned CombinedSourceReg,
1124 void replaceEntryPHI(MachineInstr &PHI, unsigned CombinedSourceReg,
1127 void replaceLiveOutRegs(MachineInstr &PHI,
1132 MachineInstr &PHI, LinearizedRegion *LRegion);
1137 MachineInstr &PHI);
1188 MachineInstr *getDefInstr(unsigned Reg);
1200 void splitLoopPHI(MachineInstr &PHI, MachineBasicBlock *Entry,
1283 for (auto &TI : MBB->terminators()) {
1315 for (auto &TI : Exit->terminators()) {
1354 RegionMRT *Region, MachineInstr &PHI,
1366 LinearizedRegion *Region, MachineInstr &PHI,
1378 LinearizedRegion *Region, MachineInstr &PHI,
1390 unsigned LDestReg, MachineInstr &PHI,
1405 MachineInstr &PHI, SmallVector<unsigned, 2> *RegionIndices) {
1417 SmallPtrSet<MachineInstr *, 2> PHIs;
1421 MachineInstr &Instr = *I;
1446 bool AMDGPUMachineCFGStructurizer::shrinkPHI(MachineInstr &PHI,
1452 bool AMDGPUMachineCFGStructurizer::shrinkPHI(MachineInstr &PHI,
1512 MachineInstr &PHI, unsigned CombinedSourceReg, MachineBasicBlock *LastMerge,
1555 MachineInstr &PHI, unsigned CombinedSourceReg, MachineBasicBlock *IfMBB,
1603 MachineInstr &PHI, SmallVector<unsigned, 2> &PHIRegionIndices,
1635 MachineInstr &PHI,
1648 MachineInstr &PHI) {
1657 SmallVector<MachineInstr *, 2> &PHIs) {
1658 for (auto &BBI : *MBB) {
1668 SmallVector<MachineInstr *, 2> PHIs;
1682 SmallVector<MachineInstr *, 2> PHIs;
1948 MachineInstr *AMDGPUMachineCFGStructurizer::getDefInstr(unsigned Reg) {
1978 MachineInstr *DefInstr = getDefInstr(SourceReg);
2173 MachineInstr *PHIDefInstr = getDefInstr(SourceReg);
2430 void AMDGPUMachineCFGStructurizer::splitLoopPHI(MachineInstr &PHI,
2471 SmallVector<MachineInstr *, 2> PHIs;
2502 for (auto &II : *Succ) {
2503 MachineInstr &Instr = II;
2557 MachineInstr &Branch = *(Exit->instr_rbegin());
2862 MachineInstr &Instr = *I;
lib/Target/AMDGPU/AMDGPUMacroFusion.cpp 30 const MachineInstr *FirstMI,
31 const MachineInstr &SecondMI) {
lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp 45 SmallVector<MachineInstr *, 4> NewInsts;
52 for (MachineInstr *MI : NewInsts)
57 void applyBank(MachineInstr &MI) {
76 void erasingInstr(MachineInstr &MI) override {}
78 void createdInstr(MachineInstr &MI) override {
83 void changingInstr(MachineInstr &MI) override {}
84 void changedInstr(MachineInstr &MI) override {}
328 static bool isInstrUniformNonExtLoadAlign4(const MachineInstr &MI) {
685 for (MachineInstr &MI : Range) {
764 for (MachineInstr &MI : make_range(NewBegin, NewEnd)) {
962 SmallSet<Register, 4> &SGPROperandRegs, MachineInstr &MI,
977 MachineIRBuilder &B, MachineInstr &MI, MachineRegisterInfo &MRI,
992 MachineInstr &MI, MachineRegisterInfo &MRI,
1000 MachineInstr &MI, MachineRegisterInfo &MRI, unsigned OpIdx) const {
1025 static MachineInstr *getOtherVRegDef(const MachineRegisterInfo &MRI,
1027 const MachineInstr &MI) {
1029 for (MachineInstr &Other : MRI.def_instructions(Reg)) {
1037 bool AMDGPURegisterBankInfo::applyMappingWideLoad(MachineInstr &MI,
1065 MachineInstr *RepairInst = getOtherVRegDef(MRI, DstReg, MI);
1091 MachineInstr *LegalizedInst = getOtherVRegDef(MRI, DstReg, *RepairInst);
1111 MachineInstr &MI, const AMDGPURegisterBankInfo::OperandsMapper &OpdMapper,
1248 MachineInstr *
1250 MachineInstr &MI) const {
1328 MachineInstr &MI = OpdMapper.getMI();
1903 bool AMDGPURegisterBankInfo::isSALUMapping(const MachineInstr &MI) const {
1922 AMDGPURegisterBankInfo::getDefaultMappingSOP(const MachineInstr &MI) const {
1937 AMDGPURegisterBankInfo::getDefaultMappingVOP(const MachineInstr &MI) const {
1973 AMDGPURegisterBankInfo::getDefaultMappingAllVGPR(const MachineInstr &MI) const {
1993 const MachineInstr &MI,
2031 AMDGPURegisterBankInfo::getInstrMappingForLoad(const MachineInstr &MI) const {
2112 AMDGPURegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
lib/Target/AMDGPU/AMDGPURegisterBankInfo.h 49 MachineInstr &MI,
60 MachineInstr &MI,
63 bool executeInWaterfallLoop(MachineInstr &MI,
67 void constrainOpWithReadfirstlane(MachineInstr &MI, MachineRegisterInfo &MRI,
69 bool applyMappingWideLoad(MachineInstr &MI,
73 applyMappingImage(MachineInstr &MI,
83 MachineInstr *selectStoreIntrinsic(MachineIRBuilder &B,
84 MachineInstr &MI) const;
90 getInstrMappingForLoad(const MachineInstr &MI) const;
121 addMappingFromTable(const MachineInstr &MI, const MachineRegisterInfo &MRI,
127 const MachineInstr &MI, const MachineRegisterInfo &MRI) const;
131 const MachineInstr &MI, const MachineRegisterInfo &MRI) const;
133 bool isSALUMapping(const MachineInstr &MI) const;
134 const InstructionMapping &getDefaultMappingSOP(const MachineInstr &MI) const;
135 const InstructionMapping &getDefaultMappingVOP(const MachineInstr &MI) const;
137 const MachineInstr &MI) const;
140 const MachineInstr &MI,
156 getInstrAlternativeMappings(const MachineInstr &MI) const override;
159 getInstrMapping(const MachineInstr &MI) const override;
lib/Target/AMDGPU/AMDGPUSubtarget.cpp 729 MachineInstr &MI2 = *SU.getInstr();
739 MachineInstr &MI1 = *SUa->getInstr();
772 const MachineInstr *MI = SU->getInstr();
777 const MachineInstr *MI = SU->getInstr();
860 MachineInstr &MAI = *SU.getInstr();
lib/Target/AMDGPU/AMDILCFGStructurizer.cpp 223 MachineInstr *insertInstrBefore(MachineBasicBlock *MBB, int NewOpcode,
225 MachineInstr *insertInstrBefore(MachineBasicBlock::iterator I, int NewOpcode);
236 static MachineBasicBlock *getTrueBranch(MachineInstr *MI);
237 static void setTrueBranch(MachineInstr *MI, MachineBasicBlock *MBB);
239 MachineInstr *MI);
240 static bool isCondBranch(MachineInstr *MI);
241 static bool isUncondBranch(MachineInstr *MI);
243 static MachineInstr *getNormalBlockBranchInstr(MachineBasicBlock *MBB);
249 MachineInstr *getLoopendBlockBranchInstr(MachineBasicBlock *MBB);
251 static MachineInstr *getReturnInstr(MachineBasicBlock *MBB);
292 void mergeIfthenelseBlock(MachineInstr *BranchMI,
457 MachineInstr *MI =
464 MachineInstr *AMDGPUCFGStructurizer::insertInstrBefore(MachineBasicBlock *MBB,
467 MachineInstr *MI =
477 MachineInstr *AMDGPUCFGStructurizer::insertInstrBefore(
479 MachineInstr *OldMI = &(*I);
481 MachineInstr *NewMBB =
491 MachineInstr *OldMI = &(*I);
494 MachineInstr *NewMI = MF->CreateMachineInstr(TII->get(NewOpcode), DL);
506 MachineInstr *NewInstr = MF->CreateMachineInstr(TII->get(NewOpcode), DL);
553 MachineBasicBlock *AMDGPUCFGStructurizer::getTrueBranch(MachineInstr *MI) {
557 void AMDGPUCFGStructurizer::setTrueBranch(MachineInstr *MI,
564 MachineInstr *MI) {
573 bool AMDGPUCFGStructurizer::isCondBranch(MachineInstr *MI) {
584 bool AMDGPUCFGStructurizer::isUncondBranch(MachineInstr *MI) {
600 MachineInstr *instr = &(*It);
607 MachineInstr *AMDGPUCFGStructurizer::getNormalBlockBranchInstr(
610 MachineInstr *MI = &*It;
616 MachineInstr *AMDGPUCFGStructurizer::getLoopendBlockBranchInstr(
621 MachineInstr *MI = &*It;
632 MachineInstr *AMDGPUCFGStructurizer::getReturnInstr(MachineBasicBlock *MBB) {
635 MachineInstr *instr = &(*It);
643 MachineInstr *MI = getReturnInstr(MBB);
664 for (const MachineInstr &It : *MBB)
672 MachineInstr *BranchMI = getLoopendBlockBranchInstr(SrcMBB);
684 SmallVector<MachineInstr *, DEFAULT_VEC_SLOTS> ContInstr;
941 MachineInstr *BranchMI = getNormalBlockBranchInstr(MBB);
1377 void AMDGPUCFGStructurizer::mergeIfthenelseBlock(MachineInstr *BranchMI,
1448 MachineInstr *BranchMI = getLoopendBlockBranchInstr(ExitingMBB);
1470 MachineInstr *MI = getLoopendBlockBranchInstr(ContingMBB);
1555 MachineInstr *BranchMI = getNormalBlockBranchInstr(SrcMBB);
1582 MachineInstr *BranchMI = getLoopendBlockBranchInstr(LoopLatch);
1597 MachineInstr *BranchMI;
1617 MachineInstr *BranchMI = getNormalBlockBranchInstr(MBB);
1634 MachineInstr *MI = getReturnInstr(MBB);
lib/Target/AMDGPU/GCNDPPCombine.cpp 74 MachineInstr *createDPPInst(MachineInstr &OrigMI,
74 MachineInstr *createDPPInst(MachineInstr &OrigMI,
75 MachineInstr &MovMI,
80 MachineInstr *createDPPInst(MachineInstr &OrigMI,
80 MachineInstr *createDPPInst(MachineInstr &OrigMI,
81 MachineInstr &MovMI,
85 bool hasNoImmOrEqual(MachineInstr &MI,
90 bool combineDPPMov(MachineInstr &MI) const;
135 auto *Def = getVRegSubRegDef(getRegSubRegPair(OldOpnd), *MRI);
154 MachineInstr *GCNDPPCombine::createDPPInst(MachineInstr &OrigMI,
154 MachineInstr *GCNDPPCombine::createDPPInst(MachineInstr &OrigMI,
155 MachineInstr &MovMI,
180 auto *Def = getVRegSubRegDef(CombOldVGPR, *MRI);
313 MachineInstr *GCNDPPCombine::createDPPInst(MachineInstr &OrigMI,
313 MachineInstr *GCNDPPCombine::createDPPInst(MachineInstr &OrigMI,
314 MachineInstr &MovMI,
340 bool GCNDPPCombine::hasNoImmOrEqual(MachineInstr &MI, unsigned OpndName,
350 bool GCNDPPCombine::combineDPPMov(MachineInstr &MovMI) const {
430 SmallVector<MachineInstr*, 4> OrigMIs, DPPMIs;
431 DenseMap<MachineInstr*, SmallVector<unsigned, 4>> RegSeqWithOpNos;
454 auto &OrigMI = *Use->getParent();
508 if (auto *DPPInst = createDPPInst(OrigMI, MovMI, CombOldVGPR,
516 auto *NewMI = BB->getParent()->CloneMachineInstr(&OrigMI);
520 if (auto *DPPInst = createDPPInst(*NewMI, MovMI, CombOldVGPR,
537 for (auto *MI : *(Rollback? &DPPMIs : &OrigMIs))
567 auto &MI = *I++;
lib/Target/AMDGPU/GCNHazardRecognizer.cpp 57 void GCNHazardRecognizer::EmitInstruction(MachineInstr *MI) {
94 const MachineInstr &MI) {
119 static bool isPermlane(const MachineInstr &MI) {
125 static unsigned getHWReg(const SIInstrInfo *TII, const MachineInstr &RegInstr) {
133 MachineInstr *MI = SU->getInstr();
200 static void insertNoopInBundle(MachineInstr *MI, const SIInstrInfo &TII) {
236 unsigned GCNHazardRecognizer::PreEmitNoops(MachineInstr *MI) {
245 unsigned GCNHazardRecognizer::PreEmitNoopsCommon(MachineInstr *MI) {
356 typedef function_ref<bool(MachineInstr *, int WaitStates)> IsExpiredFn;
410 MachineInstr *MI,
427 for (MachineInstr *MI : EmittedInstrs) {
475 iterator_range<MachineInstr::const_mop_iterator> Ops,
483 void GCNHazardRecognizer::addClauseInst(const MachineInstr &MI) {
489 int GCNHazardRecognizer::checkSoftClauseHazards(MachineInstr *MEM) {
509 for (MachineInstr *MI : EmittedInstrs) {
537 int GCNHazardRecognizer::checkSMRDHazards(MachineInstr *SMRD) {
581 int GCNHazardRecognizer::checkVMEMHazards(MachineInstr* VMEM) {
603 int GCNHazardRecognizer::checkDPPHazards(MachineInstr *DPP) {
631 int GCNHazardRecognizer::checkDivFMasHazards(MachineInstr *DivFMas) {
644 int GCNHazardRecognizer::checkGetRegHazards(MachineInstr *GetRegInstr) {
657 int GCNHazardRecognizer::checkSetRegHazards(MachineInstr *SetRegInstr) {
669 int GCNHazardRecognizer::createsVALUHazard(const MachineInstr &MI) {
742 int GCNHazardRecognizer::checkVALUHazards(MachineInstr *VALU) {
758 int GCNHazardRecognizer::checkInlineAsmHazards(MachineInstr *IA) {
784 int GCNHazardRecognizer::checkRWLaneHazards(MachineInstr *RWLane) {
806 int GCNHazardRecognizer::checkRFEHazards(MachineInstr *RFE) {
821 int GCNHazardRecognizer::checkAnyInstHazards(MachineInstr *MI) {
849 int GCNHazardRecognizer::checkReadM0Hazards(MachineInstr *MI) {
859 void GCNHazardRecognizer::fixHazards(MachineInstr *MI) {
867 bool GCNHazardRecognizer::fixVcmpxPermlaneHazards(MachineInstr *MI) {
904 bool GCNHazardRecognizer::fixVMEMtoScalarWriteHazards(MachineInstr *MI) {
945 bool GCNHazardRecognizer::fixSMEMtoVectorWriteHazards(MachineInstr *MI) {
1033 bool GCNHazardRecognizer::fixVcmpxExecWARHazard(MachineInstr *MI) {
1074 bool GCNHazardRecognizer::fixLdsBranchVmemWARHazard(MachineInstr *MI) {
1136 int GCNHazardRecognizer::checkNSAtoVMEMHazard(MachineInstr *MI) {
1161 int GCNHazardRecognizer::checkFPAtomicToDenormModeHazard(MachineInstr *MI) {
1197 int GCNHazardRecognizer::checkMAIHazards(MachineInstr *MI) {
1366 int GCNHazardRecognizer::checkMAILdStHazards(MachineInstr *MI) {
lib/Target/AMDGPU/GCNHazardRecognizer.h 35 typedef function_ref<bool(MachineInstr *)> IsHazardFn;
44 MachineInstr *CurrCycleInstr;
45 std::list<MachineInstr*> EmittedInstrs;
63 void addClauseInst(const MachineInstr &MI);
73 int checkSoftClauseHazards(MachineInstr *SMEM);
74 int checkSMRDHazards(MachineInstr *SMRD);
75 int checkVMEMHazards(MachineInstr* VMEM);
76 int checkDPPHazards(MachineInstr *DPP);
77 int checkDivFMasHazards(MachineInstr *DivFMas);
78 int checkGetRegHazards(MachineInstr *GetRegInstr);
79 int checkSetRegHazards(MachineInstr *SetRegInstr);
80 int createsVALUHazard(const MachineInstr &MI);
81 int checkVALUHazards(MachineInstr *VALU);
83 int checkRWLaneHazards(MachineInstr *RWLane);
84 int checkRFEHazards(MachineInstr *RFE);
85 int checkInlineAsmHazards(MachineInstr *IA);
86 int checkAnyInstHazards(MachineInstr *MI);
87 int checkReadM0Hazards(MachineInstr *SMovRel);
88 int checkNSAtoVMEMHazard(MachineInstr *MI);
89 int checkFPAtomicToDenormModeHazard(MachineInstr *MI);
90 void fixHazards(MachineInstr *MI);
91 bool fixVcmpxPermlaneHazards(MachineInstr *MI);
92 bool fixVMEMtoScalarWriteHazards(MachineInstr *MI);
93 bool fixSMEMtoVectorWriteHazards(MachineInstr *MI);
94 bool fixVcmpxExecWARHazard(MachineInstr *MI);
95 bool fixLdsBranchVmemWARHazard(MachineInstr *MI);
97 int checkMAIHazards(MachineInstr *MI);
98 int checkMAILdStHazards(MachineInstr *MI);
105 void EmitInstruction(MachineInstr *MI) override;
109 unsigned PreEmitNoops(MachineInstr *) override;
110 unsigned PreEmitNoopsCommon(MachineInstr *);
lib/Target/AMDGPU/GCNIterativeScheduler.cpp 48 static inline MachineInstr *getMachineInstr(MachineInstr *MI) {
48 static inline MachineInstr *getMachineInstr(MachineInstr *MI) {
51 static inline MachineInstr *getMachineInstr(const SUnit *SU) {
54 static inline MachineInstr *getMachineInstr(const SUnit &SU) {
336 std::vector<MachineInstr*>
338 std::vector<MachineInstr*> Res;
408 if (!std::is_same<decltype(*Schedule.begin()), MachineInstr*>::value) {
lib/Target/AMDGPU/GCNIterativeScheduler.h 54 std::vector<MachineInstr *> Schedule;
98 std::vector<MachineInstr*> detachSchedule(ScheduleRef Schedule) const;
lib/Target/AMDGPU/GCNNSAReassign.cpp 85 NSA_Status CheckNSA(const MachineInstr &MI, bool Fast = false) const;
164 GCNNSAReassign::CheckNSA(const MachineInstr &MI, bool Fast) const {
197 const MachineInstr *Def = MRI->getUniqueVRegDef(Reg);
205 const MachineInstr *UseInst = U.getParent();
239 using Candidate = std::pair<const MachineInstr*, bool>;
242 for (const MachineInstr &MI : MBB) {
262 const MachineInstr *MI = C.first;
lib/Target/AMDGPU/GCNRegBankReassign.cpp 85 Candidate(MachineInstr *mi, unsigned reg, unsigned freebanks,
100 MachineInstr *MI;
175 unsigned analyzeInst(const MachineInstr& MI, unsigned& UsedBanks,
185 unsigned getOperandGatherWeight(const MachineInstr& MI,
201 void collectCandidates(MachineInstr& MI, unsigned UsedBanks,
349 unsigned GCNRegBankReassign::analyzeInst(const MachineInstr& MI,
400 unsigned GCNRegBankReassign::getOperandGatherWeight(const MachineInstr& MI,
426 const MachineInstr *Def = MRI->getUniqueVRegDef(Reg);
436 const MachineInstr *UseInst = U.getParent();
524 void GCNRegBankReassign::collectCandidates(MachineInstr& MI,
573 SmallSet<const MachineInstr *, 16> Visited;
575 for (auto &MI : MRI->use_nodbg_instructions(SrcReg)) {
693 for (MachineInstr &MI : MBB.instrs()) {
lib/Target/AMDGPU/GCNRegPressure.cpp 290 void GCNRPTracker::reset(const MachineInstr &MI,
306 void GCNUpwardRPTracker::reset(const MachineInstr &MI,
311 void GCNUpwardRPTracker::recede(const MachineInstr &MI) {
354 bool GCNDownwardRPTracker::reset(const MachineInstr &MI,
lib/Target/AMDGPU/GCNRegPressure.h 106 const MachineInstr *LastTrackedMI = nullptr;
111 void reset(const MachineInstr &MI, const LiveRegSet *LiveRegsCopy,
117 const MachineInstr *getLastTrackedMI() const { return LastTrackedMI; }
142 void reset(const MachineInstr &MI, const LiveRegSet *LiveRegs = nullptr);
145 void recede(const MachineInstr &MI);
166 bool reset(const MachineInstr &MI, const LiveRegSet *LiveRegs = nullptr);
202 DenseMap<MachineInstr*, GCNRPTracker::LiveRegSet>
207 for (MachineInstr *I : R) {
214 DenseMap<MachineInstr *, GCNRPTracker::LiveRegSet> LiveRegMap;
240 inline GCNRPTracker::LiveRegSet getLiveRegsAfter(const MachineInstr &MI,
246 inline GCNRPTracker::LiveRegSet getLiveRegsBefore(const MachineInstr &MI,
lib/Target/AMDGPU/GCNSchedStrategy.cpp 330 std::vector<MachineInstr*> Unsched;
332 for (auto &I : *this) {
398 for (MachineInstr *MI : Unsched) {
469 auto *NonDbgMI = &*skipDebugInstructionsForward(Rgn.first, Rgn.second);
503 DenseMap<MachineInstr *, GCNRPTracker::LiveRegSet>
506 std::vector<MachineInstr *> BBStarters;
511 auto *MI = &*skipDebugInstructionsForward(I->first, I->second);
lib/Target/AMDGPU/GCNSchedStrategy.h 96 DenseMap<MachineInstr *, GCNRPTracker::LiveRegSet> BBLiveInMap;
97 DenseMap<MachineInstr *, GCNRPTracker::LiveRegSet> getBBLiveInMap() const;
lib/Target/AMDGPU/R600AsmPrinter.cpp 52 for (const MachineInstr &MI : MBB) {
lib/Target/AMDGPU/R600AsmPrinter.h 29 void EmitInstruction(const MachineInstr *MI) override;
lib/Target/AMDGPU/R600ClauseMergePass.cpp 34 static bool isCFAlu(const MachineInstr &MI) {
49 unsigned getCFAluSize(const MachineInstr &MI) const;
50 bool isCFAluEnabled(const MachineInstr &MI) const;
56 void cleanPotentialDisabledCFAlu(MachineInstr &CFAlu) const;
60 bool mergeIfPossible(MachineInstr &RootCFAlu,
61 const MachineInstr &LatrCFAlu) const;
84 unsigned R600ClauseMergePass::getCFAluSize(const MachineInstr &MI) const {
91 bool R600ClauseMergePass::isCFAluEnabled(const MachineInstr &MI) const {
99 MachineInstr &CFAlu) const {
108 MachineInstr &MI = *I++;
116 bool R600ClauseMergePass::mergeIfPossible(MachineInstr &RootCFAlu,
117 const MachineInstr &LatrCFAlu) const {
195 MachineInstr &MI = *I++;
lib/Target/AMDGPU/R600ControlFlowFinalizer.cpp 219 using ClauseFile = std::pair<MachineInstr *, std::vector<MachineInstr *>>;
219 using ClauseFile = std::pair<MachineInstr *, std::vector<MachineInstr *>>;
240 bool IsTrivialInst(MachineInstr &MI) const {
296 bool isCompatibleWithClause(const MachineInstr &MI,
299 for (MachineInstr::const_mop_iterator I = MI.operands_begin(),
335 std::vector<MachineInstr *> ClauseContent;
352 MachineInstr *MIb = BuildMI(MBB, ClauseHead, MBB.findDebugLoc(ClauseHead),
359 void getLiteral(MachineInstr &MI, std::vector<MachineOperand *> &Lits) const {
412 MachineInstr &ClauseHead = *I;
413 std::vector<MachineInstr *> ClauseContent;
424 MachineInstr &DeleteMI = *I;
492 void CounterPropagateAddr(MachineInstr &MI, unsigned Addr) const {
495 void CounterPropagateAddr(const std::set<MachineInstr *> &MIs,
497 for (MachineInstr *MI : MIs) {
520 std::vector<std::pair<unsigned, std::set<MachineInstr *>>> LoopStack;
521 std::vector<MachineInstr * > IfThenElseStack;
528 std::vector<MachineInstr *> LastAlu(1);
529 std::vector<MachineInstr *> ToPopAfter;
571 MachineInstr *MIb = BuildMI(MBB, MI, MBB.findDebugLoc(MI),
574 std::pair<unsigned, std::set<MachineInstr *>> Pair(CfCount,
584 std::pair<unsigned, std::set<MachineInstr *>> Pair =
596 MachineInstr *MIb = BuildMI(MBB, MI, MBB.findDebugLoc(MI),
607 MachineInstr * JumpInst = IfThenElseStack.back();
610 MachineInstr *MIb = BuildMI(MBB, MI, MBB.findDebugLoc(MI),
625 MachineInstr *MIb = BuildMI(MBB, MI, MBB.findDebugLoc(MI),
634 MachineInstr *IfOrElseInst = IfThenElseStack.back();
644 MachineInstr *MIb = BuildMI(MBB, MI, MBB.findDebugLoc(MI),
652 MachineInstr *MIb = BuildMI(MBB, MI, MBB.findDebugLoc(MI),
684 MachineInstr *Alu = ToPopAfter[i];
lib/Target/AMDGPU/R600EmitClauseMarkers.cpp 52 unsigned OccupiedDwords(MachineInstr &MI) const {
75 for (MachineInstr::mop_iterator It = MI.operands_begin(),
85 bool isALU(const MachineInstr &MI) const {
103 bool IsTrivialInst(MachineInstr &MI) const {
129 SubstituteKCacheBank(MachineInstr &MI,
200 for (MachineInstr::const_mop_iterator
lib/Target/AMDGPU/R600ExpandSpecialInstrs.cpp 43 void SetFlagInNewMI(MachineInstr *NewMI, const MachineInstr *OldMI,
43 void SetFlagInNewMI(MachineInstr *NewMI, const MachineInstr *OldMI,
73 void R600ExpandSpecialInstrsPass::SetFlagInNewMI(MachineInstr *NewMI,
74 const MachineInstr *OldMI, unsigned Op) {
93 MachineInstr &MI = *I;
101 MachineInstr *Mov = TII->buildMovInstr(&MBB, I,
120 MachineInstr *PredSet = TII->buildDefaultInstruction(MBB, I,
145 MachineInstr *BMI =
263 MachineInstr *NewMI =
lib/Target/AMDGPU/R600ISelLowering.cpp 290 R600TargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
322 MachineInstr *NewMI = TII->buildDefaultInstruction(
330 MachineInstr *NewMI = TII->buildDefaultInstruction(
340 MachineInstr * defInstr = MRI.getVRegDef(maskedRegister);
369 MachineInstr *NewMI = TII->buildDefaultInstruction(
399 MachineInstr *NewMI =
413 MachineInstr *NewMI =
lib/Target/AMDGPU/R600ISelLowering.h 33 EmitInstrWithCustomInserter(MachineInstr &MI,
66 void lowerImplicitParameter(MachineInstr *MI, MachineBasicBlock &BB,
lib/Target/AMDGPU/R600InstrInfo.cpp 57 bool R600InstrInfo::isVector(const MachineInstr &MI) const {
88 MachineInstr *NewMI = buildDefaultInstruction(MBB, MI, R600::MOV,
98 for (MachineInstr::const_mop_iterator I = MBBI->operands_begin(),
159 bool R600InstrInfo::canBeConsideredALU(const MachineInstr &MI) const {
183 bool R600InstrInfo::isTransOnly(const MachineInstr &MI) const {
191 bool R600InstrInfo::isVectorOnly(const MachineInstr &MI) const {
203 bool R600InstrInfo::usesVertexCache(const MachineInstr &MI) const {
213 bool R600InstrInfo::usesTextureCache(const MachineInstr &MI) const {
230 bool R600InstrInfo::usesAddressRegister(MachineInstr &MI) const {
234 bool R600InstrInfo::definesAddressRegister(MachineInstr &MI) const {
238 bool R600InstrInfo::readsLDSSrcReg(const MachineInstr &MI) const {
242 for (MachineInstr::const_mop_iterator I = MI.operands_begin(),
341 R600InstrInfo::ExtractSrcs(MachineInstr &MI,
535 R600InstrInfo::fitsReadPortLimitations(const std::vector<MachineInstr *> &IG,
608 R600InstrInfo::fitsConstReadLimitations(const std::vector<MachineInstr *> &MIs)
613 MachineInstr &MI = *MIs[i];
651 static MachineInstr *
656 MachineInstr &MI = *I;
701 MachineInstr &LastInst = *I;
724 MachineInstr &SecondLastInst = *I;
770 MachineInstr *PredSet = findFirstPredicateSetterFrom(MBB, MBB.end());
786 MachineInstr *PredSet = findFirstPredicateSetterFrom(MBB, MBB.end());
820 MachineInstr *predSet = findFirstPredicateSetterFrom(MBB, I);
845 MachineInstr *predSet = findFirstPredicateSetterFrom(MBB, I);
862 bool R600InstrInfo::isPredicated(const MachineInstr &MI) const {
877 bool R600InstrInfo::isPredicable(const MachineInstr &MI) const {
966 bool R600InstrInfo::DefinesPredicate(MachineInstr &MI,
971 bool R600InstrInfo::PredicateInstruction(MachineInstr &MI,
1005 unsigned int R600InstrInfo::getPredicationCost(const MachineInstr &) const {
1010 const MachineInstr &,
1023 bool R600InstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
1133 MachineInstr *MOVA = buildDefaultInstruction(*MBB, I, R600::MOVA_INT_eg,
1165 MachineInstr *MOVA = buildDefaultInstruction(*MBB, I, R600::MOVA_INT_eg,
1316 MachineInstr *R600InstrInfo::buildSlotOfVectorInstruction(
1317 MachineBasicBlock &MBB, MachineInstr *MI, unsigned Slot, unsigned DstReg)
1330 MachineInstr *MIB = buildDefaultInstruction(
1364 MachineInstr *R600InstrInfo::buildMovImm(MachineBasicBlock &BB,
1368 MachineInstr *MovImm = buildDefaultInstruction(BB, I, R600::MOV, DstReg,
1374 MachineInstr *R600InstrInfo::buildMovInstr(MachineBasicBlock *MBB,
1380 int R600InstrInfo::getOperandIdx(const MachineInstr &MI, unsigned Op) const {
1388 void R600InstrInfo::setImmOperand(MachineInstr &MI, unsigned Op,
1400 MachineOperand &R600InstrInfo::getFlagOp(MachineInstr &MI, unsigned SrcIdx,
1465 void R600InstrInfo::addFlag(MachineInstr &MI, unsigned Operand,
1486 void R600InstrInfo::clearFlag(MachineInstr &MI, unsigned Operand,
lib/Target/AMDGPU/R600InstrInfo.h 45 ExtractSrcs(MachineInstr &MI, const DenseMap<unsigned, unsigned> &PV,
92 bool canBeConsideredALU(const MachineInstr &MI) const;
95 bool isTransOnly(const MachineInstr &MI) const;
97 bool isVectorOnly(const MachineInstr &MI) const;
101 bool usesVertexCache(const MachineInstr &MI) const;
103 bool usesTextureCache(const MachineInstr &MI) const;
106 bool usesAddressRegister(MachineInstr &MI) const;
107 bool definesAddressRegister(MachineInstr &MI) const;
108 bool readsLDSSrcReg(const MachineInstr &MI) const;
120 getSrcs(MachineInstr &MI) const;
143 bool fitsReadPortLimitations(const std::vector<MachineInstr *> &MIs,
151 bool fitsConstReadLimitations(const std::vector<MachineInstr *> &) const;
157 bool isVector(const MachineInstr &MI) const;
180 bool isPredicated(const MachineInstr &MI) const override;
182 bool isPredicable(const MachineInstr &MI) const override;
197 bool DefinesPredicate(MachineInstr &MI,
203 bool PredicateInstruction(MachineInstr &MI,
206 unsigned int getPredicationCost(const MachineInstr &) const override;
209 const MachineInstr &MI,
212 bool expandPostRAPseudo(MachineInstr &MI) const override;
273 MachineInstr *buildSlotOfVectorInstruction(MachineBasicBlock &MBB,
274 MachineInstr *MI,
278 MachineInstr *buildMovImm(MachineBasicBlock &BB,
283 MachineInstr *buildMovInstr(MachineBasicBlock *MBB,
290 int getOperandIdx(const MachineInstr &MI, unsigned Op) const;
298 void setImmOperand(MachineInstr &MI, unsigned Op, int64_t Imm) const;
301 void addFlag(MachineInstr &MI, unsigned Operand, unsigned Flag) const;
304 bool isFlagSet(const MachineInstr &MI, unsigned Operand, unsigned Flag) const;
310 MachineOperand &getFlagOp(MachineInstr &MI, unsigned SrcIdx = 0,
314 void clearFlag(MachineInstr &MI, unsigned Operand, unsigned Flag) const;
317 bool isRegisterStore(const MachineInstr &MI) const {
321 bool isRegisterLoad(const MachineInstr &MI) const {
lib/Target/AMDGPU/R600MachineScheduler.cpp 161 for (MachineInstr::mop_iterator It = SU->getInstr()->operands_begin(),
182 isPhysicalRegCopy(MachineInstr *MI) {
220 MachineInstr *MI = SU->getInstr();
355 void R600SchedStrategy::AssignSlot(MachineInstr* MI, unsigned Slot) {
363 for (MachineInstr::mop_iterator It = MI->operands_begin(),
lib/Target/AMDGPU/R600MachineScheduler.h 79 std::vector<MachineInstr *> InstructionsGroupCandidate;
91 void AssignSlot(MachineInstr *MI, unsigned Slot);
lib/Target/AMDGPU/R600OptimizeVectorRegisters.cpp 63 const MachineInstr *MI = MRI.getUniqueVRegDef(Reg);
71 MachineInstr *Instr;
75 RegSeqInfo(MachineRegisterInfo &MRI, MachineInstr *MI) : Instr(MI) {
96 using InstructionSetMap = DenseMap<unsigned, std::vector<MachineInstr *>>;
100 DenseMap<MachineInstr *, RegSeqInfo> PreviousRegSeq;
104 bool canSwizzle(const MachineInstr &MI) const;
106 void SwizzleInput(MachineInstr &,
114 MachineInstr *RebuildVector(RegSeqInfo *MI, const RegSeqInfo *BaseVec,
116 void RemoveMI(MachineInstr *);
151 bool R600VectorRegMerger::canSwizzle(const MachineInstr &MI)
197 MachineInstr *R600VectorRegMerger::RebuildVector(
215 MachineInstr *Tmp = BuildMI(MBB, Pos, DL, TII->get(R600::INSERT_SUBREG),
230 MachineInstr *NewMI =
251 void R600VectorRegMerger::RemoveMI(MachineInstr *MI) {
254 std::vector<MachineInstr *> &MIs = (*It).second;
259 std::vector<MachineInstr *> &MIs = (*It).second;
264 void R600VectorRegMerger::SwizzleInput(MachineInstr &MI,
294 for (MachineInstr::mop_iterator MOp = RSI.Instr->operands_begin(),
300 for (MachineInstr *MI : PreviousRegSeqByReg[MOp->getReg()]) {
317 std::vector<MachineInstr *> &MIs =
350 MachineInstr &MI = *MII;
lib/Target/AMDGPU/R600Packetizer.cpp 62 unsigned getSlot(const MachineInstr &MI) const {
128 void substitutePV(MachineInstr &MI, const DenseMap<unsigned, unsigned> &PVs)
161 bool ignorePseudoInstruction(const MachineInstr &MI,
168 bool isSoloInstruction(const MachineInstr &MI) override {
183 MachineInstr *MII = SUI->getInstr(), *MIJ = SUJ->getInstr();
221 void setIsLastBit(MachineInstr *MI, unsigned Bit) const {
226 bool isBundlableWithCurrentPMI(MachineInstr &MI,
301 MachineInstr *MI = CurrentPacketMIs[i];
lib/Target/AMDGPU/SIAddIMGInit.cpp 75 MachineInstr &MI = *I;
lib/Target/AMDGPU/SIFixSGPRCopies.cpp 124 void processPHINode(MachineInstr &MI);
152 static bool hasVectorOperands(const MachineInstr &MI,
167 getCopyRegClasses(const MachineInstr &Copy,
201 static bool tryChangeVGPRtoSGPRinCopy(MachineInstr &MI,
213 const auto *UseMI = MO.getParent();
239 static bool foldVGPRCopyIntoRegSequence(MachineInstr &MI,
252 MachineInstr &CopyUse = *MRI.use_instr_begin(DstReg);
322 static bool isSafeToFoldImmIntoCopy(const MachineInstr *Copy,
323 const MachineInstr *MoveImm,
386 static bool isReachable(const MachineInstr *From,
387 const MachineInstr *To,
427 using InitListMap = std::map<unsigned, std::list<MachineInstr *>>;
430 SmallVector<MachineInstr*, 8> Clobbers;
432 SmallSet<MachineInstr*, 8> MergedInstrs;
436 for (auto &MI : MRI.def_instructions(Reg)) {
456 MachineInstr *MI1 = *I1;
459 MachineInstr *MI2 = *I2;
561 MachineInstr &BoundaryMI = *getFirstNonPrologue(MBB, TII);
595 SmallVector<MachineInstr *, 16> Worklist;
602 MachineInstr &MI = *I;
641 MachineInstr *DefMI = MRI->getVRegDef(SrcReg);
719 MachineInstr *DefMI = MRI->getVRegDef(MO->getReg());
758 void SIFixSGPRCopies::processPHINode(MachineInstr &MI) {
761 SetVector<const MachineInstr *> worklist;
762 SmallSet<const MachineInstr *, 4> Visited;
766 const MachineInstr *Instr = worklist.pop_back_val();
769 const MachineInstr *UseMI = Use.getParent();
812 MachineInstr *Def = MRI->getVRegDef(InputReg);
lib/Target/AMDGPU/SIFixVGPRCopies.cpp 55 for (MachineInstr &MI : MBB) {
lib/Target/AMDGPU/SIFixupVectorISel.cpp 96 MachineInstr *DefInst = MRI.getUniqueVRegDef(WOp->getReg());
120 MachineInstr *MI = MRI.getUniqueVRegDef(IndexReg);
167 MachineInstr &MI = *I;
185 MachineInstr *NewGlob = nullptr;
lib/Target/AMDGPU/SIFoldOperands.cpp 32 MachineInstr *UseMI;
43 FoldCandidate(MachineInstr *MI, unsigned OpNo, MachineOperand *FoldOp,
96 MachineInstr *UseMI,
99 SmallVectorImpl<MachineInstr *> &CopiesToReplace) const;
101 void foldInstOperand(MachineInstr &MI, MachineOperand &OpToFold) const;
103 const MachineOperand *isClamp(const MachineInstr &MI) const;
104 bool tryFoldClamp(MachineInstr &MI);
106 std::pair<const MachineOperand *, int> isOMod(const MachineInstr &MI) const;
107 bool tryFoldOMod(MachineInstr &MI);
136 const MachineInstr &UseMI,
173 const MachineInstr &UseMI,
189 MachineInstr *MI = Fold.UseMI;
260 MachineInstr *Inst32 = TII.buildShrunkInst(*MI, Op32);
308 const MachineInstr *MI) {
317 MachineInstr *MI, unsigned OpNo,
330 MachineInstr *MI, unsigned OpNo,
439 const MachineInstr &MI,
452 MachineInstr *Def = MRI.getUniqueVRegDef(UseReg);
460 for (MachineInstr *SubDef = MRI.getUniqueVRegDef(Sub->getReg());
483 MachineInstr *UseMI,
543 MachineInstr *UseMI,
546 SmallVectorImpl<MachineInstr *> &CopiesToReplace) const {
571 MachineInstr *RSUseMI = RSUse->getParent();
660 MachineInstr::mop_iterator ImpOpI = UseMI->implicit_operands().begin();
661 MachineInstr::mop_iterator ImpOpE = UseMI->implicit_operands().end();
663 MachineInstr::mop_iterator Tmp = ImpOpI;
928 static void stripExtraCopyOperands(MachineInstr &MI) {
938 static void mutateCopyOp(MachineInstr &MI, const MCInstrDesc &NewDesc) {
951 MachineInstr *Def = MRI.getVRegDef(Op.getReg());
967 MachineInstr *MI,
1080 MachineInstr *MI) {
1113 void SIFoldOperands::foldInstOperand(MachineInstr &MI,
1118 SmallVector<MachineInstr *, 4> CopiesToReplace;
1133 MachineInstr *UseMI = Use->getParent();
1186 MachineInstr *UseMI = NonInlineUse->getParent();
1198 MachineInstr *UseMI = U->getParent();
1207 for (MachineInstr *Copy : CopiesToReplace)
1213 MachineInstr *DefMI = Fold.OpToFold->getParent();
1240 const MachineOperand *SIFoldOperands::isClamp(const MachineInstr &MI) const {
1295 bool SIFoldOperands::tryFoldClamp(MachineInstr &MI) {
1300 MachineInstr *Def = MRI->getVRegDef(ClampSrc->getReg());
1355 SIFoldOperands::isOMod(const MachineInstr &MI) const {
1415 bool SIFoldOperands::tryFoldOMod(MachineInstr &MI) {
1424 MachineInstr *Def = MRI->getVRegDef(RegOp->getReg());
1465 MachineInstr &MI = *I;
1476 if (IsIEEEMode || (!HasNSZ && !MI.getFlag(MachineInstr::FmNsz)) ||
lib/Target/AMDGPU/SIFormMemoryClauses.cpp 66 bool canBundle(const MachineInstr &MI, RegUse &Defs, RegUse &Uses) const;
67 bool checkPressure(const MachineInstr &MI, GCNDownwardRPTracker &RPT);
68 void collectRegUses(const MachineInstr &MI, RegUse &Defs, RegUse &Uses) const;
69 bool processRegUses(const MachineInstr &MI, RegUse &Defs, RegUse &Uses,
99 static bool isVMEMClauseInst(const MachineInstr &MI) {
103 static bool isSMEMClauseInst(const MachineInstr &MI) {
109 static bool isValidClauseInst(const MachineInstr &MI, bool IsVMEMClause) {
207 bool SIFormMemoryClauses::canBundle(const MachineInstr &MI,
244 bool SIFormMemoryClauses::checkPressure(const MachineInstr &MI,
263 void SIFormMemoryClauses::collectRegUses(const MachineInstr &MI,
291 bool SIFormMemoryClauses::processRegUses(const MachineInstr &MI,
328 MachineInstr &MI = *I;
lib/Target/AMDGPU/SIFrameLowering.cpp 714 .setMIFlag(MachineInstr::FrameSetup);
796 .setMIFlag(MachineInstr::FrameSetup);
800 .setMIFlag(MachineInstr::FrameSetup);
809 .setMIFlag(MachineInstr::FrameSetup);
816 .setMIFlag(MachineInstr::FrameSetup);
851 .setMIFlag(MachineInstr::FrameDestroy);
857 .setMIFlag(MachineInstr::FrameSetup);
lib/Target/AMDGPU/SIISelLowering.cpp 3030 MachineBasicBlock *SITargetLowering::splitKillBlock(MachineInstr &MI,
3063 splitBlockForLoop(MachineInstr &MI, MachineBasicBlock &MBB, bool InstInLoop) {
3101 void SITargetLowering::bundleInstWithWaitcnt(MachineInstr &MI) const {
3115 SITargetLowering::emitGWSMemViolTestLoop(MachineInstr &MI,
3230 MachineInstr *SetOn =
3249 MachineInstr *InsertPt =
3334 MachineInstr &MI,
3354 MachineInstr *SetOn =
3365 MachineInstr *SetOn =
3389 static MachineBasicBlock *emitIndirectSrc(MachineInstr &MI,
3480 static MachineBasicBlock *emitIndirectDst(MachineInstr &MI,
3581 MachineInstr &MI, MachineBasicBlock *BB) const {
3676 MachineInstr *FirstMI = &*BB->begin();
3790 MachineInstr *Br = BuildMI(*BB, MI, DL, TII->get(AMDGPU::S_CBRANCH_SCC1))
10386 void SITargetLowering::AdjustInstrPostInstrSelection(MachineInstr &MI,
10412 auto *Src = MRI.getUniqueVRegDef(Op.getReg());
10718 for (auto &MI : MBB) {
10773 for (const MachineInstr &MI : *MBB) {
lib/Target/AMDGPU/SIISelLowering.h 335 MachineBasicBlock *splitKillBlock(MachineInstr &MI,
338 void bundleInstWithWaitcnt(MachineInstr &MI) const;
339 MachineBasicBlock *emitGWSMemViolTestLoop(MachineInstr &MI,
343 EmitInstrWithCustomInserter(MachineInstr &MI,
362 void AdjustInstrPostInstrSelection(MachineInstr &MI,
lib/Target/AMDGPU/SIInsertSkips.cpp 59 bool skipIfDead(MachineInstr &MI, MachineBasicBlock &NextBB);
61 void kill(MachineInstr &MI);
66 bool skipMaskBranch(MachineInstr &MI, MachineBasicBlock &MBB);
68 bool optimizeVccBranch(MachineInstr &MI) const;
95 static bool opcodeEmitsNoInsts(const MachineInstr &MI) {
149 bool SIInsertSkips::skipIfDead(MachineInstr &MI, MachineBasicBlock &NextBB) {
184 void SIInsertSkips::kill(MachineInstr &MI) {
321 bool SIInsertSkips::skipMaskBranch(MachineInstr &MI,
337 bool SIInsertSkips::optimizeVccBranch(MachineInstr &MI) const {
466 MachineInstr &MI = *I;
lib/Target/AMDGPU/SIInsertWaitcnts.cpp 263 RegInterval getRegInterval(const MachineInstr *MI, const SIInstrInfo *TII,
280 MachineInstr &MI);
346 void setExpScore(const MachineInstr *MI, const SIInstrInfo *TII,
374 DenseSet<MachineInstr *> TrackedWaitcntSet;
375 DenseSet<MachineInstr *> VCCZBugHandledSet;
447 bool mayAccessLDSThroughFlat(const MachineInstr &MI) const;
448 bool generateWaitcntInstBefore(MachineInstr &MI,
450 MachineInstr *OldWaitcntInstr);
451 void updateEventWaitcntAfter(MachineInstr &Inst,
459 RegInterval WaitcntBrackets::getRegInterval(const MachineInstr *MI,
493 const MachineInstr &MIA = *MI;
501 void WaitcntBrackets::setExpScore(const MachineInstr *MI,
519 WaitEventType E, MachineInstr &Inst) {
804 static bool readsVCCZ(const MachineInstr &MI) {
811 static bool callWaitsOnFunctionEntry(const MachineInstr &MI) {
821 static bool callWaitsOnFunctionReturn(const MachineInstr &MI) {
836 MachineInstr &MI, WaitcntBrackets &ScoreBrackets,
837 MachineInstr *OldWaitcntInstr) {
1184 bool SIInsertWaitcnts::mayAccessLDSThroughFlat(const MachineInstr &MI) const {
1197 void SIInsertWaitcnts::updateEventWaitcntAfter(MachineInstr &Inst,
1372 MachineInstr *OldWaitcntInstr = nullptr;
1377 MachineInstr &Inst = *Iter;
lib/Target/AMDGPU/SIInstrInfo.cpp 128 bool SIInstrInfo::isReallyTriviallyReMaterializable(const MachineInstr &MI,
259 bool SIInstrInfo::getMemOperandWithOffset(const MachineInstr &LdSt,
394 static bool memOpsHaveSameBasePtr(const MachineInstr &MI1,
396 const MachineInstr &MI2,
432 const MachineInstr &FirstLdSt = *BaseOp1.getParent();
433 const MachineInstr &SecondLdSt = *BaseOp2.getParent();
1229 MachineBasicBlock &MBB, MachineInstr &MI, RegScavenger *RS, unsigned TmpReg,
1362 unsigned SIInstrInfo::getNumWaitStates(const MachineInstr &MI) {
1371 bool SIInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
1467 MachineInstr *Copy = BuildMI(MBB, MI, DL, get(AMDGPU::V_MOV_B64_PSEUDO),
1487 MachineInstr *MovRel =
1563 std::pair<MachineInstr*, MachineInstr*>
1563 std::pair<MachineInstr*, MachineInstr*>
1564 SIInstrInfo::expandMovDPP64(MachineInstr &MI) const {
1573 MachineInstr *Split[2];
1621 bool SIInstrInfo::swapSourceModifiers(MachineInstr &MI,
1642 static MachineInstr *swapRegAndNonRegOperand(MachineInstr &MI,
1642 static MachineInstr *swapRegAndNonRegOperand(MachineInstr &MI,
1665 MachineInstr *SIInstrInfo::commuteInstructionImpl(MachineInstr &MI, bool NewMI,
1665 MachineInstr *SIInstrInfo::commuteInstructionImpl(MachineInstr &MI, bool NewMI,
1684 MachineInstr *CommutedMI = nullptr;
1717 bool SIInstrInfo::findCommutedOpIndices(const MachineInstr &MI,
1757 const MachineInstr &MI) const {
1788 MachineInstr *GetPC = BuildMI(MBB, I, DL, get(AMDGPU::S_GETPC_B64), PCReg);
2073 MachineInstr *CondBr =
2087 MachineInstr *CondBr =
2176 MachineInstr *Select =
2186 MachineInstr *Select =
2240 MachineInstr *Select =
2252 bool SIInstrInfo::isFoldableCopy(const MachineInstr &MI) const {
2292 static void removeModOperands(MachineInstr &MI) {
2306 bool SIInstrInfo::FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
2306 bool SIInstrInfo::FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
2433 MachineInstr *Def = MRI->getUniqueVRegDef(Src0->getReg());
2451 MachineInstr *Def = MRI->getUniqueVRegDef(Src1->getReg());
2519 bool SIInstrInfo::checkInstOffsetsDoNotOverlap(const MachineInstr &MIa,
2520 const MachineInstr &MIb) const {
2543 bool SIInstrInfo::areMemAccessesTriviallyDisjoint(const MachineInstr &MIa,
2544 const MachineInstr &MIb) const {
2605 MachineInstr *SIInstrInfo::convertToThreeAddress(MachineFunction::iterator &MBB,
2712 static bool changesVGPRIndexingMode(const MachineInstr &MI) {
2723 bool SIInstrInfo::isSchedulingBoundary(const MachineInstr &MI,
2749 bool SIInstrInfo::hasUnwantedEffectsWhenEXECEmpty(const MachineInstr &MI) const {
2786 const MachineInstr &MI) const {
2924 bool SIInstrInfo::isImmOperandLegal(const MachineInstr &MI, unsigned OpNo,
2973 bool SIInstrInfo::hasModifiersSet(const MachineInstr &MI,
2979 bool SIInstrInfo::hasAnyModifiersSet(const MachineInstr &MI) const {
2987 bool SIInstrInfo::canShrink(const MachineInstr &MI,
3046 static void copyFlagsToImplicitVCC(MachineInstr &MI,
3058 MachineInstr *SIInstrInfo::buildShrunkInst(MachineInstr &MI,
3058 MachineInstr *SIInstrInfo::buildShrunkInst(MachineInstr &MI,
3132 static unsigned findImplicitSGPRRead(const MachineInstr &MI) {
3154 static bool shouldReadExec(const MachineInstr &MI) {
3190 bool SIInstrInfo::verifyInstruction(const MachineInstr &MI,
3727 unsigned SIInstrInfo::getVALUOp(const MachineInstr &MI) const {
3807 const TargetRegisterClass *SIInstrInfo::getOpRegClass(const MachineInstr &MI,
3824 void SIInstrInfo::legalizeOpWithMove(MachineInstr &MI, unsigned OpIdx) const {
3906 void SIInstrInfo::swapOperands(MachineInstr &Inst) const {
3949 bool SIInstrInfo::isOperandLegal(const MachineInstr &MI, unsigned OpIdx,
4013 MachineInstr &MI) const {
4125 MachineInstr &MI) const {
4211 unsigned SIInstrInfo::readlaneVGPRToSGPR(unsigned SrcReg, MachineInstr &UseMI,
4254 MachineInstr &MI) const {
4289 MachineInstr *Copy =
4295 MachineInstr *Def = MRI.getVRegDef(OpReg);
4402 static void loadSRsrcFromVGPR(const SIInstrInfo &TII, MachineInstr &MI,
4472 extractRsrcPtr(const SIInstrInfo &TII, MachineInstr &MI, MachineOperand &Rsrc) {
4513 void SIInstrInfo::legalizeOperands(MachineInstr &MI,
4753 MachineInstr *Addr64;
4816 void SIInstrInfo::moveToVALU(MachineInstr &TopInst,
4822 MachineInstr &Inst = *Worklist.pop_back_val();
5101 bool SIInstrInfo::moveScalarAddSub(SetVectorType &Worklist, MachineInstr &Inst,
5137 MachineInstr &Inst) const {
5164 MachineInstr &Inst) const {
5194 MachineInstr *Xor;
5215 MachineInstr *Not =
5229 MachineInstr &Inst,
5243 MachineInstr &Op = *BuildMI(MBB, MII, DL, get(Opcode), Interm)
5247 MachineInstr &Not = *BuildMI(MBB, MII, DL, get(AMDGPU::S_NOT_B32), NewDest)
5258 MachineInstr &Inst,
5272 MachineInstr &Not = *BuildMI(MBB, MII, DL, get(AMDGPU::S_NOT_B32), Interm)
5275 MachineInstr &Op = *BuildMI(MBB, MII, DL, get(Opcode), NewDest)
5287 SetVectorType &Worklist, MachineInstr &Inst,
5313 MachineInstr &LoHalf = *BuildMI(MBB, MII, DL, InstDesc, DestSub0).add(SrcReg0Sub0);
5319 MachineInstr &HiHalf = *BuildMI(MBB, MII, DL, InstDesc, DestSub1).add(SrcReg0Sub1);
5341 MachineInstr &Inst,
5379 MachineInstr *LoHalf =
5387 MachineInstr *HiHalf =
5413 MachineInstr &Inst, unsigned Opcode,
5451 MachineInstr &LoHalf = *BuildMI(MBB, MII, DL, InstDesc, DestSub0)
5456 MachineInstr &HiHalf = *BuildMI(MBB, MII, DL, InstDesc, DestSub1)
5477 MachineInstr &Inst,
5509 MachineInstr &Xor = *BuildMI(MBB, MII, DL, get(AMDGPU::S_XOR_B64), NewDest)
5519 SetVectorType &Worklist, MachineInstr &Inst) const {
5556 MachineInstr &Inst) const {
5622 MachineInstr &UseMI = *I->getParent();
5654 MachineInstr &Inst) const {
5715 MachineInstr &SCCDefInst,
5722 for (MachineInstr &MI : // Skip the def inst itself.
5735 const MachineInstr &Inst) const {
5783 unsigned SIInstrInfo::findUsedSGPR(const MachineInstr &MI,
5852 MachineOperand *SIInstrInfo::getNamedOperand(MachineInstr &MI,
5907 bool SIInstrInfo::isLowLatencyInstruction(const MachineInstr &MI) const {
5913 bool SIInstrInfo::isHighLatencyInstruction(const MachineInstr &MI) const {
5919 unsigned SIInstrInfo::isStackAccess(const MachineInstr &MI,
5932 unsigned SIInstrInfo::isSGPRStackAccess(const MachineInstr &MI,
5940 unsigned SIInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
5954 unsigned SIInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
5968 unsigned SIInstrInfo::getInstBundleSize(const MachineInstr &MI) const {
5980 unsigned SIInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
6047 bool SIInstrInfo::mayAccessFlatAddressSpace(const MachineInstr &MI) const {
6061 bool SIInstrInfo::isNonUniformBranchInstr(MachineInstr &Branch) const {
6070 MachineInstr *Branch = &(*TI);
6076 MachineInstr *SIIF =
6080 MachineInstr *SIEND =
6096 MachineInstr *Branch = &(*TI);
6120 MachineInstr *HeaderPhi = HeaderPHIBuilder;
6121 MachineInstr *SIIFBREAK = BuildMI(*(MF), Branch->getDebugLoc(),
6125 MachineInstr *SILOOP =
6183 bool SIInstrInfo::isBasicBlockPrologue(const MachineInstr &MI) const {
6242 void SIInstrInfo::fixImplicitOperands(MachineInstr &MI) const {
6256 bool SIInstrInfo::isBufferSMRD(const MachineInstr &MI) const {
6379 llvm::getRegSequenceSubReg(MachineInstr &MI, unsigned SubReg) {
6391 static bool followSubRegDef(MachineInstr &MI,
6416 MachineInstr *llvm::getVRegSubRegDef(const TargetInstrInfo::RegSubRegPair &P,
6423 auto *DefInst = MRI.getVRegDef(RSR.Reg);
6424 while (auto *MI = DefInst) {
6453 const MachineInstr &DefMI,
6454 const MachineInstr &UseMI) {
6486 const MachineInstr &DefMI) {
6495 for (auto &UseInst : MRI.use_nodbg_instructions(VReg)) {
6525 MachineInstr *SIInstrInfo::createPHIDestinationCopy(
6540 MachineInstr *SIInstrInfo::createPHISourceCopy(
lib/Target/AMDGPU/SIInstrInfo.h 61 using SetVectorType = SmallSetVector<MachineInstr *, 32>;
80 void swapOperands(MachineInstr &Inst) const;
82 bool moveScalarAddSub(SetVectorType &Worklist, MachineInstr &Inst,
86 MachineInstr &Inst) const;
89 MachineInstr &Inst) const;
92 MachineInstr &Inst,
96 MachineInstr &Inst,
100 MachineInstr &Inst, unsigned Opcode) const;
102 void splitScalar64BitAddSub(SetVectorType &Worklist, MachineInstr &Inst,
105 void splitScalar64BitBinaryOp(SetVectorType &Worklist, MachineInstr &Inst,
109 void splitScalar64BitXnor(SetVectorType &Worklist, MachineInstr &Inst,
113 MachineInstr &Inst) const;
115 MachineInstr &Inst) const;
118 MachineInstr &Inst) const;
124 MachineInstr &SCCDefInst,
128 getDestEquivalentVGPRClass(const MachineInstr &Inst) const;
130 bool checkInstOffsetsDoNotOverlap(const MachineInstr &MIa,
131 const MachineInstr &MIb) const;
133 unsigned findUsedSGPR(const MachineInstr &MI, int OpIndices[3]) const;
136 bool swapSourceModifiers(MachineInstr &MI,
140 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
140 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
175 bool isReallyTriviallyReMaterializable(const MachineInstr &MI,
182 bool getMemOperandWithOffset(const MachineInstr &LdSt,
198 unsigned calculateLDSSpillAddress(MachineBasicBlock &MBB, MachineInstr &MI,
230 bool expandPostRAPseudo(MachineInstr &MI) const override;
237 std::pair<MachineInstr*, MachineInstr*>
237 std::pair<MachineInstr*, MachineInstr*>
238 expandMovDPP64(MachineInstr &MI) const;
249 inline int commuteOpcode(const MachineInstr &MI) const {
253 bool findCommutedOpIndices(const MachineInstr &MI, unsigned &SrcOpIdx1,
262 MachineBasicBlock *getBranchDestBlock(const MachineInstr &MI) const override;
313 areMemAccessesTriviallyDisjoint(const MachineInstr &MIa,
314 const MachineInstr &MIb) const override;
316 bool isFoldableCopy(const MachineInstr &MI) const;
318 bool FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, unsigned Reg,
318 bool FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, unsigned Reg,
323 MachineInstr *convertToThreeAddress(MachineFunction::iterator &MBB,
327 bool isSchedulingBoundary(const MachineInstr &MI,
331 static bool isSALU(const MachineInstr &MI) {
339 static bool isVALU(const MachineInstr &MI) {
347 static bool isVMEM(const MachineInstr &MI) {
355 static bool isSOP1(const MachineInstr &MI) {
363 static bool isSOP2(const MachineInstr &MI) {
371 static bool isSOPC(const MachineInstr &MI) {
379 static bool isSOPK(const MachineInstr &MI) {
387 static bool isSOPP(const MachineInstr &MI) {
395 static bool isPacked(const MachineInstr &MI) {
403 static bool isVOP1(const MachineInstr &MI) {
411 static bool isVOP2(const MachineInstr &MI) {
419 static bool isVOP3(const MachineInstr &MI) {
427 static bool isSDWA(const MachineInstr &MI) {
435 static bool isVOPC(const MachineInstr &MI) {
443 static bool isMUBUF(const MachineInstr &MI) {
451 static bool isMTBUF(const MachineInstr &MI) {
459 static bool isSMRD(const MachineInstr &MI) {
467 bool isBufferSMRD(const MachineInstr &MI) const;
469 static bool isDS(const MachineInstr &MI) {
479 static bool isMIMG(const MachineInstr &MI) {
487 static bool isGather4(const MachineInstr &MI) {
495 static bool isFLAT(const MachineInstr &MI) {
501 static bool isSegmentSpecificFLAT(const MachineInstr &MI) {
507 static bool isFLATScratch(const MachineInstr &MI) {
516 static bool isEXP(const MachineInstr &MI) {
524 static bool isWQM(const MachineInstr &MI) {
532 static bool isDisableWQM(const MachineInstr &MI) {
540 static bool isVGPRSpill(const MachineInstr &MI) {
548 static bool isSGPRSpill(const MachineInstr &MI) {
556 static bool isDPP(const MachineInstr &MI) {
564 static bool isVOP3P(const MachineInstr &MI) {
572 static bool isVINTRP(const MachineInstr &MI) {
580 static bool isMAI(const MachineInstr &MI) {
588 static bool isDOT(const MachineInstr &MI) {
596 static bool isScalarUnit(const MachineInstr &MI) {
600 static bool usesVM_CNT(const MachineInstr &MI) {
604 static bool usesLGKM_CNT(const MachineInstr &MI) {
608 static bool sopkIsZext(const MachineInstr &MI) {
618 static bool isScalarStore(const MachineInstr &MI) {
626 static bool isFixedSize(const MachineInstr &MI) {
634 static bool hasFPClamp(const MachineInstr &MI) {
642 static bool hasIntClamp(const MachineInstr &MI) {
646 uint64_t getClampMask(const MachineInstr &MI) const {
654 static bool usesFPDPRounding(const MachineInstr &MI) {
662 static bool isFPAtomic(const MachineInstr &MI) {
670 bool isVGPRCopy(const MachineInstr &MI) const {
678 bool hasVGPRUses(const MachineInstr &MI) const {
687 bool hasUnwantedEffectsWhenEXECEmpty(const MachineInstr &MI) const;
691 bool mayReadEXEC(const MachineRegisterInfo &MRI, const MachineInstr &MI) const;
704 bool isInlineConstant(const MachineInstr &MI,
718 bool isInlineConstant(const MachineInstr &MI, unsigned OpIdx) const {
723 bool isInlineConstant(const MachineInstr &MI, unsigned OpIdx,
741 const MachineInstr *Parent = MO.getParent();
750 bool isLiteralConstant(const MachineInstr &MI, int OpIdx) const {
762 bool isImmOperandLegal(const MachineInstr &MI, unsigned OpNo,
778 bool hasModifiersSet(const MachineInstr &MI,
780 bool hasAnyModifiersSet(const MachineInstr &MI) const;
782 bool canShrink(const MachineInstr &MI,
785 MachineInstr *buildShrunkInst(MachineInstr &MI,
785 MachineInstr *buildShrunkInst(MachineInstr &MI,
788 bool verifyInstruction(const MachineInstr &MI,
791 unsigned getVALUOp(const MachineInstr &MI) const;
798 const TargetRegisterClass *getOpRegClass(const MachineInstr &MI,
817 unsigned getOpSize(const MachineInstr &MI, unsigned OpNo) const {
840 void legalizeOpWithMove(MachineInstr &MI, unsigned OpIdx) const;
844 bool isOperandLegal(const MachineInstr &MI, unsigned OpIdx,
862 void legalizeOperandsVOP2(MachineRegisterInfo &MRI, MachineInstr &MI) const;
865 void legalizeOperandsVOP3(MachineRegisterInfo &MRI, MachineInstr &MI) const;
871 unsigned readlaneVGPRToSGPR(unsigned SrcReg, MachineInstr &UseMI,
874 void legalizeOperandsSMRD(MachineRegisterInfo &MRI, MachineInstr &MI) const;
885 void legalizeOperands(MachineInstr &MI,
891 void moveToVALU(MachineInstr &MI, MachineDominatorTree *MDT = nullptr) const;
902 static unsigned getNumWaitStates(const MachineInstr &MI);
907 MachineOperand *getNamedOperand(MachineInstr &MI, unsigned OperandName) const;
910 const MachineOperand *getNamedOperand(const MachineInstr &MI,
916 int64_t getNamedImmOperand(const MachineInstr &MI, unsigned OpName) const {
924 bool isLowLatencyInstruction(const MachineInstr &MI) const;
925 bool isHighLatencyInstruction(const MachineInstr &MI) const;
933 unsigned isStackAccess(const MachineInstr &MI, int &FrameIndex) const;
934 unsigned isSGPRStackAccess(const MachineInstr &MI, int &FrameIndex) const;
936 unsigned isLoadFromStackSlot(const MachineInstr &MI,
938 unsigned isStoreToStackSlot(const MachineInstr &MI,
941 unsigned getInstBundleSize(const MachineInstr &MI) const;
942 unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
944 bool mayAccessFlatAddressSpace(const MachineInstr &MI) const;
946 bool isNonUniformBranchInstr(MachineInstr &Instr) const;
970 bool isBasicBlockPrologue(const MachineInstr &MI) const override;
972 MachineInstr *createPHIDestinationCopy(MachineBasicBlock &MBB,
977 MachineInstr *createPHISourceCopy(MachineBasicBlock &MBB,
1029 void fixImplicitOperands(MachineInstr &MI) const;
1051 TargetInstrInfo::RegSubRegPair getRegSequenceSubReg(MachineInstr &MI,
1057 MachineInstr *getVRegSubRegDef(const TargetInstrInfo::RegSubRegPair &P,
1065 const MachineInstr &DefMI,
1066 const MachineInstr &UseMI);
1073 const MachineInstr &DefMI);
lib/Target/AMDGPU/SILoadStoreOptimizer.cpp 132 SmallVector<MachineInstr *, 8> InstsToMove;
137 bool hasSameBaseAddress(const MachineInstr &MI) {
202 using MemInfoMap = DenseMap<MachineInstr *, MemAddress>;
233 void updateBaseAndOffset(MachineInstr &I, unsigned NewBase,
235 unsigned computeBase(MachineInstr &MI, const MemAddress &Addr) const;
236 MachineOperand createRegOrImm(int32_t Val, MachineInstr &MI) const;
242 bool promoteConstantOffsetToImm(MachineInstr &CI,
244 SmallPtrSet<MachineInstr *, 4> &Promoted) const;
258 const MachineInstr &MI);
275 static unsigned getOpcodeWidth(const MachineInstr &MI, const SIInstrInfo &TII) {
553 for (MachineInstr *MI : InstsToMove) {
559 static void addDefsUsesToList(const MachineInstr &MI,
583 static bool addToListsIfDependent(MachineInstr &MI, DenseSet<unsigned> &RegDefs,
585 SmallVectorImpl<MachineInstr *> &Insts) {
609 static bool canMoveInstsAcrossMemOp(MachineInstr &MemOp,
610 ArrayRef<MachineInstr *> InstsToMove,
614 for (MachineInstr *InstToMove : InstsToMove) {
941 MachineInstr *Copy1 = BuildMI(*MBB, CI.Paired, DL, CopyDesc)
1066 MachineInstr *New = MIB.addMemOperand(combineKnownAdjacentMMOs(*MBB->getParent(), MMOa, MMOb));
1080 MachineInstr *Copy1 = BuildMI(*MBB, CI.Paired, DL, CopyDesc)
1110 MachineInstr *New =
1130 MachineInstr *Copy1 = BuildMI(*MBB, CI.Paired, DL, CopyDesc)
1169 MachineInstr *New =
1192 MachineInstr *Copy1 = BuildMI(*MBB, CI.Paired, DL, CopyDesc)
1336 MachineInstr *New =
1355 SILoadStoreOptimizer::createRegOrImm(int32_t Val, MachineInstr &MI) const {
1361 MachineInstr *Mov =
1371 unsigned SILoadStoreOptimizer::computeBase(MachineInstr &MI,
1396 MachineInstr *LoHalf =
1405 MachineInstr *HiHalf =
1416 MachineInstr *FullBase =
1429 void SILoadStoreOptimizer::updateBaseAndOffset(MachineInstr &MI,
1444 MachineInstr *Def = MRI->getUniqueVRegDef(Op.getReg());
1467 MachineInstr *Def = MRI->getUniqueVRegDef(Base.getReg());
1477 MachineInstr *BaseLoDef = MRI->getUniqueVRegDef(BaseLo.getReg());
1478 MachineInstr *BaseHiDef = MRI->getUniqueVRegDef(BaseHi.getReg());
1516 MachineInstr &MI,
1518 SmallPtrSet<MachineInstr *, 4> &AnchorList) const {
1583 MachineInstr *AnchorInst = nullptr;
1586 SmallVector<std::pair<MachineInstr *, int64_t>, 4> InstsWCommonBase;
1596 MachineInstr &MINext = *MBBI;
1685 SmallPtrSet<MachineInstr *, 4> AnchorList;
1688 for (MachineInstr &MI : MBB.instrs()) {
1746 const MachineInstr &MI) {
lib/Target/AMDGPU/SILowerControlFlow.cpp 95 void emitIf(MachineInstr &MI);
96 void emitElse(MachineInstr &MI);
97 void emitIfBreak(MachineInstr &MI);
98 void emitLoop(MachineInstr &MI);
99 void emitEndCf(MachineInstr &MI);
101 Register getSaveExec(MachineInstr* MI);
103 void findMaskOperands(MachineInstr &MI, unsigned OpNo,
106 void combineMasks(MachineInstr &MI);
138 static void setImpSCCDefDead(MachineInstr &MI, bool IsDead) {
147 static bool isSimpleIf(const MachineInstr &MI, const MachineRegisterInfo *MRI,
170 for(auto &Term : MBB->terminators())
180 Register SILowerControlFlow::getSaveExec(MachineInstr *MI) {
198 void SILowerControlFlow::emitIf(MachineInstr &MI) {
218 MachineInstr *CopyExec =
225 MachineInstr *And =
232 MachineInstr *Xor = nullptr;
243 MachineInstr *SetExec =
249 MachineInstr *NewBr = BuildMI(MBB, I, DL, TII->get(AMDGPU::SI_MASK_BRANCH))
281 void SILowerControlFlow::emitElse(MachineInstr &MI) {
294 MachineInstr *CopyExec =
302 MachineInstr *OrSaveExec =
311 MachineInstr *And =
320 MachineInstr *Xor =
325 MachineInstr *Branch =
354 void SILowerControlFlow::emitIfBreak(MachineInstr &MI) {
365 if (MachineInstr *Def = MRI->getUniqueVRegDef(MI.getOperand(1).getReg())) {
373 MachineInstr *And = nullptr, *Or = nullptr;
395 void SILowerControlFlow::emitLoop(MachineInstr &MI) {
399 MachineInstr *AndN2 =
404 MachineInstr *Branch =
416 void SILowerControlFlow::emitEndCf(MachineInstr &MI) {
420 MachineInstr *Def = MRI.getUniqueVRegDef(CFMask);
426 MachineInstr *NewMI = BuildMI(MBB, InsPt, DL, TII->get(OrOpc), Exec)
441 void SILowerControlFlow::findMaskOperands(MachineInstr &MI, unsigned OpNo,
449 MachineInstr *Def = MRI->getUniqueVRegDef(Op.getReg());
472 void SILowerControlFlow::combineMasks(MachineInstr &MI) {
534 MachineInstr &MI = *I;
lib/Target/AMDGPU/SILowerI1Copies.cpp 177 for (MachineInstr &MI : MBB->terminators()) {
502 SmallVector<MachineInstr *, 4> DeadCopies;
505 for (MachineInstr &MI : MBB) {
534 for (MachineInstr *MI : DeadCopies)
544 SmallVector<MachineInstr *, 4> Vreg1Phis;
553 for (MachineInstr &MI : MBB.phis()) {
560 for (MachineInstr *MI : Vreg1Phis) {
578 MachineInstr *IncomingDef = MRI->getUniqueVRegDef(IncomingReg);
601 for (MachineInstr &Use : MRI->use_instructions(DstReg))
670 SmallVector<MachineInstr *, 4> DeadCopies;
675 for (MachineInstr &MI : MBB) {
714 for (MachineInstr &Use : MRI->use_instructions(DstReg))
731 for (MachineInstr *MI : DeadCopies)
738 const MachineInstr *MI;
770 static void instrDefsUsesSCC(const MachineInstr &MI, bool &Def, bool &Use) {
lib/Target/AMDGPU/SILowerSGPRSpills.cpp 109 MachineInstr &Inst = *std::prev(I);
144 MachineInstr &Inst = *std::prev(I);
272 MachineInstr &MI = *I;
lib/Target/AMDGPU/SIMachineScheduler.cpp 315 const MachineInstr* MI = &*UI;
1362 MachineInstr *MI = SU->getInstr();
lib/Target/AMDGPU/SIMemoryLegalizer.cpp 400 bool isAtomicRet(const MachineInstr &MI) const {
lib/Target/AMDGPU/SIModeRegister.cpp 111 MachineInstr *FirstInsertionPoint;
150 Status getInstructionMode(MachineInstr &MI, const SIInstrInfo *TII);
152 void insertSetreg(MachineBasicBlock &MBB, MachineInstr *I,
170 Status SIModeRegister::getInstructionMode(MachineInstr &MI,
192 void SIModeRegister::insertSetreg(MachineBasicBlock &MBB, MachineInstr *MI,
230 MachineInstr *InsertionPoint = nullptr;
238 for (MachineInstr &MI : MBB) {
lib/Target/AMDGPU/SIOptimizeExecMasking.cpp 59 static unsigned isCopyFromExec(const MachineInstr &MI, const GCNSubtarget &ST) {
77 static unsigned isCopyToExec(const MachineInstr &MI, const GCNSubtarget &ST) {
99 static unsigned isLogicalOpOnExec(const MachineInstr &MI) {
180 static bool removeTerminatorBit(const SIInstrInfo &TII, MachineInstr &MI) {
326 MachineInstr *SaveExecInst = nullptr;
327 SmallVector<MachineInstr *, 4> OtherUseInsts;
415 for (MachineInstr *OtherInst : OtherUseInsts) {
lib/Target/AMDGPU/SIOptimizeExecMaskingPreRA.cpp 85 static bool isEndCF(const MachineInstr &MI, const SIRegisterInfo *TRI,
96 static bool isFullExecCopy(const MachineInstr& MI, const GCNSubtarget& ST) {
107 static unsigned getOrNonExecReg(const MachineInstr &MI,
120 static MachineInstr* getOrExecSource(const MachineInstr &MI,
120 static MachineInstr* getOrExecSource(const MachineInstr &MI,
207 auto *And = TRI->findReachingDef(CondReg, AMDGPU::NoSubRegister,
224 auto *Cmp = TRI->findReachingDef(CmpReg, CmpSubReg, *And, MRI, LIS);
238 auto *Sel = TRI->findReachingDef(SelReg, Op1->getSubReg(), *Cmp, MRI, LIS);
258 MachineInstr *Andn2 =
327 MachineInstr &Term = MBB.back();
418 for (auto& U : MRI.use_nodbg_instructions(SavedExec)) {
lib/Target/AMDGPU/SIPeepholeSDWA.cpp 76 std::unordered_map<MachineInstr *, std::unique_ptr<SDWAOperand>> SDWAOperands;
77 std::unordered_map<MachineInstr *, SDWAOperandsVector> PotentialMatches;
78 SmallVector<MachineInstr *, 8> ConvertedInstructions;
91 std::unique_ptr<SDWAOperand> matchSDWAOperand(MachineInstr &MI);
92 bool isConvertibleToSDWA(MachineInstr &MI, const GCNSubtarget &ST) const;
93 void pseudoOpConvertToVOP2(MachineInstr &MI,
95 bool convertToSDWA(MachineInstr &MI, const SDWAOperandsVector &SDWAOperands);
96 void legalizeScalarOperands(MachineInstr &MI, const GCNSubtarget &ST) const;
120 virtual MachineInstr *potentialToConvert(const SIInstrInfo *TII) = 0;
121 virtual bool convertToSDWA(MachineInstr &MI, const SIInstrInfo *TII) = 0;
125 MachineInstr *getParentInst() const { return Target->getParent(); }
153 MachineInstr *potentialToConvert(const SIInstrInfo *TII) override;
154 bool convertToSDWA(MachineInstr &MI, const SIInstrInfo *TII) override;
180 MachineInstr *potentialToConvert(const SIInstrInfo *TII) override;
181 bool convertToSDWA(MachineInstr &MI, const SIInstrInfo *TII) override;
201 bool convertToSDWA(MachineInstr &MI, const SIInstrInfo *TII) override;
321 MachineInstr *DefInstr = MRI->getUniqueVRegDef(Reg->getReg());
337 const auto *MI = SrcOp->getParent();
359 MachineInstr *SDWASrcOperand::potentialToConvert(const SIInstrInfo *TII) {
369 bool SDWASrcOperand::convertToSDWA(MachineInstr &MI, const SIInstrInfo *TII) {
443 MachineInstr *SDWADstOperand::potentialToConvert(const SIInstrInfo *TII) {
447 MachineInstr *ParentMI = getParentInst();
454 for (MachineInstr &UseInst : MRI->use_nodbg_instructions(PotentialMO->getReg())) {
462 bool SDWADstOperand::convertToSDWA(MachineInstr &MI, const SIInstrInfo *TII) {
492 bool SDWADstPreserveOperand::convertToSDWA(MachineInstr &MI,
534 const MachineInstr *DefInst = Def.getParent();
550 SIPeepholeSDWA::matchSDWAOperand(MachineInstr &MI) {
738 MachineInstr *Op1Inst = Op1Def->getParent();
766 MachineInstr *SDWAInst = OrSDWADef->getParent();
767 MachineInstr *OtherInst = OrOtherDef->getParent();
853 for (MachineInstr &MI : MBB) {
880 void SIPeepholeSDWA::pseudoOpConvertToVOP2(MachineInstr &MI,
897 MachineInstr &MISucc = *NextOp->getParent();
937 bool SIPeepholeSDWA::isConvertibleToSDWA(MachineInstr &MI,
989 bool SIPeepholeSDWA::convertToSDWA(MachineInstr &MI,
1173 void SIPeepholeSDWA::legalizeScalarOperands(MachineInstr &MI,
1226 MachineInstr *PotentialMI = Operand->potentialToConvert(TII);
1239 MachineInstr *PotentialMI = Operand->potentialToConvert(TII);
1246 MachineInstr &PotentialMI = *PotentialPair.first;
lib/Target/AMDGPU/SIPreAllocateWWMRegs.cpp 122 for (MachineInstr &MI : MBB) {
189 for (MachineInstr &MI : *MBB) {
lib/Target/AMDGPU/SIRegisterInfo.cpp 313 int64_t SIRegisterInfo::getMUBUFInstrOffset(const MachineInstr *MI) const {
321 int64_t SIRegisterInfo::getFrameIndexInstrOffset(const MachineInstr *MI,
333 bool SIRegisterInfo::needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const {
377 void SIRegisterInfo::resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
413 bool SIRegisterInfo::isFrameOffsetLegal(const MachineInstr *MI,
1712 bool SIRegisterInfo::shouldCoalesce(MachineInstr *MI,
1864 MachineInstr *SIRegisterInfo::findReachingDef(unsigned Reg, unsigned SubReg,
1865 MachineInstr &Use,
1907 MachineInstr *Def = LIS->getInstructionFromIndex(DefIdx);
lib/Target/AMDGPU/SIRegisterInfo.h 82 int64_t getMUBUFInstrOffset(const MachineInstr *MI) const;
84 int64_t getFrameIndexInstrOffset(const MachineInstr *MI,
87 bool needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const override;
93 void resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
96 bool isFrameOffsetLegal(const MachineInstr *MI, unsigned BaseReg,
231 bool shouldCoalesce(MachineInstr *MI,
280 MachineInstr *findReachingDef(unsigned Reg, unsigned SubReg,
281 MachineInstr &Use,
lib/Target/AMDGPU/SIShrinkInstructions.cpp 41 void shrinkMIMG(MachineInstr &MI);
71 static bool foldImmediates(MachineInstr &MI, const SIInstrInfo *TII,
82 MachineInstr *Def = MRI.getUniqueVRegDef(Reg);
170 static void copyExtraImplicitOps(MachineInstr &NewMI, MachineFunction &MF,
171 const MachineInstr &MI) {
182 static void shrinkScalarCompare(const SIInstrInfo *TII, MachineInstr &MI) {
221 void SIShrinkInstructions::shrinkMIMG(MachineInstr &MI) {
318 MachineInstr &MI) {
389 static bool instAccessReg(iterator_range<MachineInstr::const_mop_iterator> &&R,
410 static bool instReadsReg(const MachineInstr *MI,
416 static bool instModifiesReg(const MachineInstr *MI,
455 static MachineInstr* matchSwap(MachineInstr &MovT, MachineRegisterInfo &MRI,
455 static MachineInstr* matchSwap(MachineInstr &MovT, MachineRegisterInfo &MRI,
479 MachineInstr &MovY = *YTop.getParent();
491 MachineInstr *MovX = nullptr;
537 MachineInstr *Next = &*std::next(MovT.getIterator());
567 MachineInstr &MI = *I;
592 if (auto *NextMI = matchSwap(MI, MRI, TII)) {
609 MachineInstr &NextMI = *Next;
785 MachineInstr *Inst32 = TII->buildShrunkInst(MI, Op32);
lib/Target/AMDGPU/SIWholeQuadMode.cpp 139 MachineInstr *MI = nullptr;
143 WorkItem(MachineInstr *MI) : MI(MI) {}
155 DenseMap<const MachineInstr *, InstrInfo> Instructions;
157 SmallVector<MachineInstr *, 1> LiveMaskQueries;
158 SmallVector<MachineInstr *, 4> LowerToCopyInstrs;
162 void markInstruction(MachineInstr &MI, char Flag,
164 void markInstructionUses(const MachineInstr &MI, char Flag,
167 void propagateInstruction(MachineInstr &MI, std::vector<WorkItem> &Worklist);
171 bool requiresCorrectState(const MachineInstr &MI) const;
236 for (const MachineInstr &MI : *BII.first) {
248 void SIWholeQuadMode::markInstruction(MachineInstr &MI, char Flag,
270 void SIWholeQuadMode::markInstructionUses(const MachineInstr &MI, char Flag,
303 for (MachineInstr &DefMI : MRI->def_instructions(Use.getReg()))
314 SmallVector<MachineInstr *, 4> SetInactiveInstrs;
315 SmallVector<MachineInstr *, 4> SoftWQMInstrs;
327 MachineInstr &MI = *II;
366 for (MachineInstr &DefMI : MRI->def_instructions(Reg))
417 for (MachineInstr *MI : SetInactiveInstrs)
419 for (MachineInstr *MI : SoftWQMInstrs)
426 void SIWholeQuadMode::propagateInstruction(MachineInstr &MI,
450 if (MachineInstr *PrevMI = MI.getPrevNode()) {
479 MachineInstr *LastMI = &*MBB.rbegin();
531 bool SIWholeQuadMode::requiresCorrectState(const MachineInstr &MI) const {
561 MachineInstr *Save =
564 MachineInstr *Restore =
613 if (MachineInstr *MI = LIS->getInstructionFromIndex(Idx))
629 MachineInstr *MI;
651 MachineInstr *MI;
670 MachineInstr *MI;
681 MachineInstr *MI;
740 MachineInstr &MI = *II;
841 for (MachineInstr *MI : LiveMaskQueries) {
844 MachineInstr *Copy =
854 for (MachineInstr *MI : LowerToCopyInstrs) {
904 MachineInstr *MI = BuildMI(Entry, EntryMI, DebugLoc(),
lib/Target/ARC/ARCAsmPrinter.cpp 44 void EmitInstruction(const MachineInstr *MI) override;
49 void ARCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/ARC/ARCBranchFinalize.cpp 50 void replaceWithBRcc(MachineInstr *MI) const;
51 void replaceWithCmpBcc(MachineInstr *MI) const;
94 static bool isBRccPseudo(MachineInstr *MI) {
99 static unsigned getBRccForPseudo(MachineInstr *MI) {
106 static unsigned getCmpForPseudo(MachineInstr *MI) {
113 void ARCBranchFinalize::replaceWithBRcc(MachineInstr *MI) const {
129 void ARCBranchFinalize::replaceWithCmpBcc(MachineInstr *MI) const {
145 std::vector<MachineInstr *> Branches;
150 std::vector<std::pair<MachineInstr *, unsigned>> BranchToPCList;
155 for (auto &MI : MBB) {
lib/Target/ARC/ARCExpandPseudos.cpp 61 MachineInstr &SI = *SII;
lib/Target/ARC/ARCFrameLowering.cpp 203 .setMIFlags(MachineInstr::FrameSetup);
211 .setMIFlags(MachineInstr::FrameSetup);
220 .setMIFlags(MachineInstr::FrameSetup);
233 .setMIFlags(MachineInstr::FrameSetup);
474 MachineInstr &Old = *I;
lib/Target/ARC/ARCInstrInfo.cpp 68 unsigned ARCInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
87 unsigned ARCInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
233 MachineInstr &InstToDelete = *DI;
403 unsigned ARCInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
412 bool ARCInstrInfo::isPostIncrement(const MachineInstr &MI) const {
418 bool ARCInstrInfo::isPreIncrement(const MachineInstr &MI) const {
424 bool ARCInstrInfo::getBaseAndOffsetPosition(const MachineInstr &MI,
lib/Target/ARC/ARCInstrInfo.h 40 unsigned isLoadFromStackSlot(const MachineInstr &MI,
48 unsigned isStoreToStackSlot(const MachineInstr &MI,
51 unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
85 bool isPostIncrement(const MachineInstr &MI) const override;
88 bool isPreIncrement(const MachineInstr &MI) const;
90 virtual bool getBaseAndOffsetPosition(const MachineInstr &MI,
lib/Target/ARC/ARCMCInstLower.cpp 104 void ARCMCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
lib/Target/ARC/ARCMCInstLower.h 33 void Lower(const MachineInstr *MI, MCInst &OutMI) const;
lib/Target/ARC/ARCOptAddrMode.cpp 65 MachineInstr *tryToCombine(MachineInstr &Ldst);
65 MachineInstr *tryToCombine(MachineInstr &Ldst);
68 bool noUseOfAddBeforeLoadOrStore(const MachineInstr *Add,
69 const MachineInstr *Ldst);
73 bool canHoistLoadStoreTo(MachineInstr *Ldst, MachineInstr *To);
73 bool canHoistLoadStoreTo(MachineInstr *Ldst, MachineInstr *To);
77 bool canSinkLoadStoreTo(MachineInstr *Ldst, MachineInstr *To);
77 bool canSinkLoadStoreTo(MachineInstr *Ldst, MachineInstr *To);
83 MachineInstr *canJoinInstructions(MachineInstr *Ldst, MachineInstr *Add,
83 MachineInstr *canJoinInstructions(MachineInstr *Ldst, MachineInstr *Add,
83 MachineInstr *canJoinInstructions(MachineInstr *Ldst, MachineInstr *Add,
84 SmallVectorImpl<MachineInstr *> *Uses);
88 bool canFixPastUses(const ArrayRef<MachineInstr *> &Uses,
93 void fixPastUses(ArrayRef<MachineInstr *> Uses, unsigned BaseReg,
99 void changeToAddrMode(MachineInstr &Ldst, unsigned NewOpcode,
122 static bool isAddConstantOp(const MachineInstr &MI, int64_t &Amount) {
138 static bool dominatesAllUsesOf(const MachineInstr *MI, unsigned VReg,
146 MachineInstr *User = it->getParent();
169 const MachineInstr &MI,
181 bool ARCOptAddrMode::noUseOfAddBeforeLoadOrStore(const MachineInstr *Add,
182 const MachineInstr *Ldst) {
187 MachineInstr *ARCOptAddrMode::tryToCombine(MachineInstr &Ldst) {
187 MachineInstr *ARCOptAddrMode::tryToCombine(MachineInstr &Ldst) {
219 for (auto &Add : MRI->use_nodbg_instructions(B)) {
226 SmallVector<MachineInstr *, 8> Uses;
227 MachineInstr *MoveTo = canJoinInstructions(&Ldst, &Add, &Uses);
242 MachineInstr *Result = Ldst.getNextNode();
263 MachineInstr *
264 ARCOptAddrMode::canJoinInstructions(MachineInstr *Ldst, MachineInstr *Add,
264 ARCOptAddrMode::canJoinInstructions(MachineInstr *Ldst, MachineInstr *Add,
265 SmallVectorImpl<MachineInstr *> *Uses) {
268 MachineInstr *First = Add;
269 MachineInstr *Last = Ldst;
302 SmallVector<MachineInstr *, 4> UsesAfterLdst;
303 SmallVector<MachineInstr *, 4> UsesAfterAdd;
304 for (MachineInstr &MI : MRI->use_nodbg_instructions(BaseReg)) {
315 MachineInstr *Result = nullptr;
341 bool ARCOptAddrMode::canFixPastUses(const ArrayRef<MachineInstr *> &Uses,
346 for (MachineInstr *MI : Uses) {
362 void ARCOptAddrMode::fixPastUses(ArrayRef<MachineInstr *> Uses,
365 for (MachineInstr *MI : Uses) {
388 bool ARCOptAddrMode::canHoistLoadStoreTo(MachineInstr *Ldst, MachineInstr *To) {
388 bool ARCOptAddrMode::canHoistLoadStoreTo(MachineInstr *Ldst, MachineInstr *To) {
408 MachineInstr *OpDef = MRI->getVRegDef(O.getReg());
415 bool ARCOptAddrMode::canSinkLoadStoreTo(MachineInstr *Ldst, MachineInstr *To) {
415 bool ARCOptAddrMode::canSinkLoadStoreTo(MachineInstr *Ldst, MachineInstr *To) {
440 void ARCOptAddrMode::changeToAddrMode(MachineInstr &Ldst, unsigned NewOpcode,
476 MachineInstr *Res = tryToCombine(*MI);
lib/Target/ARC/ARCRegisterInfo.cpp 43 MachineInstr &MI = *II;
169 MachineInstr &MI = *II;
lib/Target/ARM/A15SDOptimizer.cpp 61 bool runOnInstruction(MachineInstr *MI);
98 bool hasPartialWrite(MachineInstr *MI);
106 MachineInstr *elideCopies(MachineInstr *MI);
106 MachineInstr *elideCopies(MachineInstr *MI);
107 void elideCopiesAndPHIs(MachineInstr *MI,
108 SmallVectorImpl<MachineInstr*> &Outs);
113 unsigned optimizeAllLanesPattern(MachineInstr *MI, unsigned Reg);
114 unsigned optimizeSDPattern(MachineInstr *MI);
120 void eraseInstrWithNoUses(MachineInstr *MI);
125 std::map<MachineInstr*, unsigned> Replacements;
126 std::set<MachineInstr *> DeadInstr;
157 MachineInstr *MI = MRI->getVRegDef(SReg);
178 void A15SDOptimizer::eraseInstrWithNoUses(MachineInstr *MI) {
179 SmallVector<MachineInstr *, 8> Front;
202 MachineInstr *Def = Op->getParent();
221 for (MachineInstr &Use : MRI->use_instructions(Reg)) {
242 unsigned A15SDOptimizer::optimizeSDPattern(MachineInstr *MI) {
252 MachineInstr *DPRMI = MRI->getVRegDef(MI->getOperand(1).getReg());
253 MachineInstr *SPRMI = MRI->getVRegDef(MI->getOperand(2).getReg());
257 MachineInstr *ECDef = elideCopies(DPRMI);
262 MachineInstr *EC = elideCopies(SPRMI);
304 MachineInstr *Def = MRI->getVRegDef(OpReg);
324 bool A15SDOptimizer::hasPartialWrite(MachineInstr *MI) {
342 MachineInstr *A15SDOptimizer::elideCopies(MachineInstr *MI) {
342 MachineInstr *A15SDOptimizer::elideCopies(MachineInstr *MI) {
347 MachineInstr *Def = MRI->getVRegDef(MI->getOperand(1).getReg());
355 void A15SDOptimizer::elideCopiesAndPHIs(MachineInstr *MI,
356 SmallVectorImpl<MachineInstr*> &Outs) {
359 std::set<MachineInstr *> Reached;
360 SmallVector<MachineInstr *, 8> Front;
376 MachineInstr *NewMI = MRI->getVRegDef(Reg);
384 MachineInstr *NewMI = MRI->getVRegDef(MI->getOperand(1).getReg());
509 A15SDOptimizer::optimizeAllLanesPattern(MachineInstr *MI, unsigned Reg) {
564 bool A15SDOptimizer::runOnInstruction(MachineInstr *MI) {
604 SmallVector<MachineInstr *, 8> DefSrcs;
607 MachineInstr *Def = MRI->getVRegDef(*I);
613 for (MachineInstr *MI : DefSrcs) {
676 for (MachineInstr &MI : MBB) {
681 for (MachineInstr *MI : DeadInstr) {
lib/Target/ARM/ARM.h 58 void LowerARMMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI,
lib/Target/ARM/ARMAsmPrinter.cpp 199 void ARMAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
262 bool ARMAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum,
436 bool ARMAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
937 void ARMAsmPrinter::EmitJumpTableAddrs(const MachineInstr *MI) {
983 void ARMAsmPrinter::EmitJumpTableInsts(const MachineInstr *MI) {
1011 void ARMAsmPrinter::EmitJumpTableTBInst(const MachineInstr *MI,
1064 void ARMAsmPrinter::EmitUnwindingInstruction(const MachineInstr *MI) {
1238 void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) {
1255 MI->getFlag(MachineInstr::FrameSetup))
lib/Target/ARM/ARMAsmPrinter.h 76 void printOperand(const MachineInstr *MI, int OpNum, raw_ostream &O);
79 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNum,
81 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum,
87 void EmitJumpTableAddrs(const MachineInstr *MI);
88 void EmitJumpTableInsts(const MachineInstr *MI);
89 void EmitJumpTableTBInst(const MachineInstr *MI, unsigned OffsetWidth);
90 void EmitInstruction(const MachineInstr *MI) override;
113 void LowerPATCHABLE_FUNCTION_ENTER(const MachineInstr &MI);
114 void LowerPATCHABLE_FUNCTION_EXIT(const MachineInstr &MI);
115 void LowerPATCHABLE_TAIL_CALL(const MachineInstr &MI);
118 void EmitSled(const MachineInstr &MI, SledKind Kind);
124 void EmitPatchedInstruction(const MachineInstr *MI, unsigned TargetOpc);
126 void EmitUnwindingInstruction(const MachineInstr *MI);
130 const MachineInstr *MI);
lib/Target/ARM/ARMBaseInstrInfo.cpp 141 MachineInstr *ARMBaseInstrInfo::convertToThreeAddress(
166 MachineInstr *UpdateMI = nullptr;
167 MachineInstr *MemMI = nullptr;
238 std::vector<MachineInstr*> NewMIs;
284 MachineInstr *NewMI = (Reg == WBReg) ? UpdateMI : MemMI;
291 MachineInstr *NewMI = NewMIs[j];
380 MachineInstr &InstToDelete = *DI;
482 bool ARMBaseInstrInfo::isPredicated(const MachineInstr &MI) const {
499 MachineInstr &MI, ArrayRef<MachineOperand> Pred) const {
546 MachineInstr &MI, std::vector<MachineOperand> &Pred) const {
560 bool ARMBaseInstrInfo::isCPSRDefined(const MachineInstr &MI) {
567 bool ARMBaseInstrInfo::isAddrMode3OpImm(const MachineInstr &MI,
575 bool ARMBaseInstrInfo::isAddrMode3OpMinusReg(const MachineInstr &MI,
587 bool ARMBaseInstrInfo::isLdstScaledReg(const MachineInstr &MI,
595 bool ARMBaseInstrInfo::isLdstScaledRegNotPlusLsl2(const MachineInstr &MI,
609 bool ARMBaseInstrInfo::isLdstSoMinusReg(const MachineInstr &MI,
616 bool ARMBaseInstrInfo::isAm2ScaledReg(const MachineInstr &MI,
622 static bool isEligibleForITBlock(const MachineInstr *MI) {
654 bool ARMBaseInstrInfo::isPredicable(const MachineInstr &MI) const {
682 template <> bool IsCPSRDead<MachineInstr>(const MachineInstr *MI) {
682 template <> bool IsCPSRDead<MachineInstr>(const MachineInstr *MI) {
700 unsigned ARMBaseInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
757 unsigned ARMBaseInstrInfo::getInstBundleLength(const MachineInstr &MI) const {
996 bool ARMBaseInstrInfo::isCopyInstrImpl(const MachineInstr &MI,
1205 unsigned ARMBaseInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
1255 unsigned ARMBaseInstrInfo::isStoreToStackSlotPostFE(const MachineInstr &MI,
1442 unsigned ARMBaseInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
1498 unsigned ARMBaseInstrInfo::isLoadFromStackSlotPostFE(const MachineInstr &MI,
1567 bool ARMBaseInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
1700 MachineInstr *MI = MBB.getParent()->CloneMachineInstr(&Orig);
1719 MachineInstr &
1723 MachineInstr &Cloned = TargetInstrInfo::duplicate(MBB, InsertBefore, Orig);
1744 bool ARMBaseInstrInfo::produceSameValue(const MachineInstr &MI0,
1745 const MachineInstr &MI1,
1809 MachineInstr *Def0 = MRI->getVRegDef(Addr0);
1810 MachineInstr *Def1 = MRI->getVRegDef(Addr1);
1827 return MI0.isIdenticalTo(MI1, MachineInstr::IgnoreVRegDefs);
1949 bool ARMBaseInstrInfo::isSchedulingBoundary(const MachineInstr &MI,
2005 MachineInstr *LastMI = &*Pred->rbegin();
2008 MachineInstr *CmpMI = findCMPToFoldIntoCBZ(LastMI, TRI);
2092 ARMBaseInstrInfo::predictBranchSizeForIfCvt(MachineInstr &MI) const {
2125 ARMCC::CondCodes llvm::getInstrPredicate(const MachineInstr &MI,
2148 MachineInstr *ARMBaseInstrInfo::commuteInstructionImpl(MachineInstr &MI,
2148 MachineInstr *ARMBaseInstrInfo::commuteInstructionImpl(MachineInstr &MI,
2161 MachineInstr *CommutedMI =
2176 MachineInstr *
2183 MachineInstr *MI = MRI.getVRegDef(Reg);
2212 bool ARMBaseInstrInfo::analyzeSelect(const MachineInstr &MI,
2233 MachineInstr *
2234 ARMBaseInstrInfo::optimizeSelect(MachineInstr &MI,
2235 SmallPtrSetImpl<MachineInstr *> &SeenMIs,
2240 MachineInstr *DefMI = canFoldIntoMOVCC(MI.getOperand(2).getReg(), MRI, this);
2399 MachineFunction &MF, MachineInstr *MI,
2520 bool llvm::rewriteARMFrameIndex(MachineInstr &MI, unsigned FrameRegIdx,
2677 bool ARMBaseInstrInfo::analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
2714 static bool isSuitableForMask(MachineInstr *&MI, unsigned SrcReg,
2767 inline static bool isRedundantFlagInstr(const MachineInstr *CmpI,
2769 int ImmValue, const MachineInstr *OI,
2828 static bool isOptimizeCompareCandidate(MachineInstr *MI, bool &IsThumb1) {
2904 MachineInstr &CmpInstr, unsigned SrcReg, unsigned SrcReg2, int CmpMask,
2907 MachineInstr *MI = MRI->getUniqueVRegDef(SrcReg);
2919 MachineInstr *PotentialAND = &*UI;
2942 MachineInstr *SubAdd = nullptr;
3000 const MachineInstr &Instr = *--I;
3055 const MachineInstr &Instr = *I;
3183 bool ARMBaseInstrInfo::shouldSink(const MachineInstr &MI) const {
3201 bool ARMBaseInstrInfo::FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
3201 bool ARMBaseInstrInfo::FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
3333 const MachineInstr &MI) {
3580 unsigned ARMBaseInstrInfo::getNumLDMAddresses(const MachineInstr &MI) const {
3582 for (MachineInstr::mmo_iterator I = MI.memoperands_begin(),
3635 const MachineInstr &MI) const {
3788 bool ARMBaseInstrInfo::isLDMBaseRegInList(const MachineInstr &MI) const {
3798 ARMBaseInstrInfo::getLDMVariableDefsSize(const MachineInstr &MI) const {
4020 static const MachineInstr *getBundledDefMI(const TargetRegisterInfo *TRI,
4021 const MachineInstr *MI, unsigned Reg,
4043 static const MachineInstr *getBundledUseMI(const TargetRegisterInfo *TRI,
4044 const MachineInstr &MI, unsigned Reg,
4076 const MachineInstr &DefMI,
4254 const MachineInstr &DefMI,
4256 const MachineInstr &UseMI,
4265 const MachineInstr *ResolvedDefMI = &DefMI;
4275 const MachineInstr *ResolvedUseMI = &UseMI;
4290 const InstrItineraryData *ItinData, const MachineInstr &DefMI,
4292 const MachineOperand &DefMO, unsigned Reg, const MachineInstr &UseMI,
4606 unsigned ARMBaseInstrInfo::getPredicationCost(const MachineInstr &MI) const {
4626 const MachineInstr &MI,
4696 const MachineInstr &DefMI,
4698 const MachineInstr &UseMI,
4716 const MachineInstr &DefMI,
4731 bool ARMBaseInstrInfo::verifyInstruction(const MachineInstr &MI,
4838 ARMBaseInstrInfo::getExecutionDomain(const MachineInstr &MI) const {
4902 MachineInstr &MI, unsigned DReg,
4928 void ARMBaseInstrInfo::setExecutionDomain(MachineInstr &MI,
5137 const MachineInstr &MI, unsigned OpNum,
5198 MachineInstr &MI, unsigned OpNum, const TargetRegisterInfo *TRI) const {
5235 bool ARMBaseInstrInfo::isSwiftFastImmShift(const MachineInstr *MI) const {
5250 const MachineInstr &MI, unsigned DefIdx,
5277 const MachineInstr &MI, unsigned DefIdx,
5300 const MachineInstr &MI, unsigned DefIdx, RegSubRegPair &BaseReg,
5363 MachineInstr *llvm::findCMPToFoldIntoCBZ(MachineInstr *Br,
5363 MachineInstr *llvm::findCMPToFoldIntoCBZ(MachineInstr *Br,
lib/Target/ARM/ARMBaseInstrInfo.h 59 const MachineInstr &MI, unsigned DefIdx,
72 bool getExtractSubregLikeInputs(const MachineInstr &MI, unsigned DefIdx,
88 getInsertSubregLikeInputs(const MachineInstr &MI, unsigned DefIdx,
99 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
99 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
106 bool isCopyInstrImpl(const MachineInstr &MI, const MachineOperand *&Source,
117 MachineInstr *convertToThreeAddress(MachineFunction::iterator &MFI,
148 bool isPredicated(const MachineInstr &MI) const override;
150 ARMCC::CondCodes getPredicate(const MachineInstr &MI) const {
156 bool PredicateInstruction(MachineInstr &MI,
162 bool DefinesPredicate(MachineInstr &MI,
165 bool isPredicable(const MachineInstr &MI) const override;
168 static bool isCPSRDefined(const MachineInstr &MI);
169 bool isAddrMode3OpImm(const MachineInstr &MI, unsigned Op) const;
170 bool isAddrMode3OpMinusReg(const MachineInstr &MI, unsigned Op) const;
173 bool isLdstScaledReg(const MachineInstr &MI, unsigned Op) const;
175 bool isLdstScaledRegNotPlusLsl2(const MachineInstr &MI, unsigned Op) const;
177 bool isLdstSoMinusReg(const MachineInstr &MI, unsigned Op) const;
179 bool isAm2ScaledReg(const MachineInstr &MI, unsigned Op) const;
181 bool isLDMBaseRegInList(const MachineInstr &MI) const;
183 unsigned getLDMVariableDefsSize(const MachineInstr &MI) const;
187 unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
189 unsigned isLoadFromStackSlot(const MachineInstr &MI,
191 unsigned isStoreToStackSlot(const MachineInstr &MI,
193 unsigned isLoadFromStackSlotPostFE(const MachineInstr &MI,
195 unsigned isStoreToStackSlotPostFE(const MachineInstr &MI,
221 bool expandPostRAPseudo(MachineInstr &MI) const override;
223 bool shouldSink(const MachineInstr &MI) const override;
230 MachineInstr &
238 bool produceSameValue(const MachineInstr &MI0, const MachineInstr &MI1,
238 bool produceSameValue(const MachineInstr &MI0, const MachineInstr &MI1,
261 bool isSchedulingBoundary(const MachineInstr &MI,
281 unsigned predictBranchSizeForIfCvt(MachineInstr &MI) const override;
290 bool analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
298 bool optimizeCompareInstr(MachineInstr &CmpInstr, unsigned SrcReg,
302 bool analyzeSelect(const MachineInstr &MI,
306 MachineInstr *optimizeSelect(MachineInstr &MI,
306 MachineInstr *optimizeSelect(MachineInstr &MI,
307 SmallPtrSetImpl<MachineInstr *> &SeenMIs,
312 bool FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, unsigned Reg,
312 bool FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, unsigned Reg,
316 const MachineInstr &MI) const override;
319 const MachineInstr &DefMI, unsigned DefIdx,
320 const MachineInstr &UseMI,
328 getExecutionDomain(const MachineInstr &MI) const override;
329 void setExecutionDomain(MachineInstr &MI, unsigned Domain) const override;
332 getPartialRegUpdateClearance(const MachineInstr &, unsigned,
334 void breakPartialRegDependency(MachineInstr &, unsigned,
338 unsigned getNumLDMAddresses(const MachineInstr &MI) const;
348 unsigned getInstBundleLength(const MachineInstr &MI) const;
373 const MachineInstr &DefMI, unsigned DefIdx,
376 const MachineInstr &UseMI, unsigned UseIdx,
379 unsigned getPredicationCost(const MachineInstr &MI) const override;
382 const MachineInstr &MI,
390 const MachineInstr &DefMI, unsigned DefIdx,
391 const MachineInstr &UseMI,
394 const MachineInstr &DefMI,
398 bool verifyInstruction(const MachineInstr &MI,
407 MachineInstr *canFoldIntoMOVCC(unsigned Reg, const MachineRegisterInfo &MRI,
444 bool isSwiftFastImmShift(const MachineInstr *MI) const;
447 unsigned getFramePred(const MachineInstr &MI) const {
556 ARMCC::CondCodes getInstrPredicate(const MachineInstr &MI, unsigned &PredReg);
595 MachineFunction &MF, MachineInstr *MI,
602 bool rewriteARMFrameIndex(MachineInstr &MI, unsigned FrameRegIdx,
606 bool rewriteT2FrameIndex(MachineInstr &MI, unsigned FrameRegIdx,
618 MachineInstr *findCMPToFoldIntoCBZ(MachineInstr *Br,
618 MachineInstr *findCMPToFoldIntoCBZ(MachineInstr *Br,
lib/Target/ARM/ARMBaseRegisterInfo.cpp 498 getFrameIndexInstrOffset(const MachineInstr *MI, int Idx) const {
549 needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const {
655 void ARMBaseRegisterInfo::resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
683 bool ARMBaseRegisterInfo::isFrameOffsetLegal(const MachineInstr *MI, unsigned BaseReg,
752 MachineInstr &MI = *II;
836 bool ARMBaseRegisterInfo::shouldCoalesce(MachineInstr *MI,
lib/Target/ARM/ARMBaseRegisterInfo.h 165 int64_t getFrameIndexInstrOffset(const MachineInstr *MI,
167 bool needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const override;
171 void resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
173 bool isFrameOffsetLegal(const MachineInstr *MI, unsigned BaseReg,
190 unsigned MIFlags = MachineInstr::NoFlags) const;
206 bool shouldCoalesce(MachineInstr *MI,
lib/Target/ARM/ARMBasicBlockInfo.cpp 30 mayOptimizeThumb2Instruction(const MachineInstr *MI) {
54 for (MachineInstr &I : *MBB) {
75 unsigned ARMBasicBlockUtils::getOffsetOf(MachineInstr *MI) const {
93 bool ARMBasicBlockUtils::isBBInRange(MachineInstr *MI,
lib/Target/ARM/ARMBasicBlockInfo.h 132 unsigned getOffsetOf(MachineInstr *MI) const;
144 bool isBBInRange(MachineInstr *MI, MachineBasicBlock *DestBB,
lib/Target/ARM/ARMConstantIslandPass.cpp 129 MachineInstr *MI;
130 MachineInstr *CPEMI;
137 CPUser(MachineInstr *mi, MachineInstr *cpemi, unsigned maxdisp,
137 CPUser(MachineInstr *mi, MachineInstr *cpemi, unsigned maxdisp,
159 MachineInstr *CPEMI;
163 CPEntry(MachineInstr *cpemi, unsigned cpi, unsigned rc = 0)
191 MachineInstr *MI;
196 ImmBranch(MachineInstr *mi, unsigned maxdisp, bool cond, unsigned ubr)
204 SmallVector<MachineInstr*, 4> PushPopMIs;
207 SmallVector<MachineInstr*, 4> T2JumpTables;
246 void doInitialConstPlacement(std::vector<MachineInstr *> &CPEMIs);
247 void doInitialJumpTablePlacement(std::vector<MachineInstr *> &CPEMIs);
249 CPEntry *findConstPoolEntry(unsigned CPI, const MachineInstr *CPEMI);
250 Align getCPEAlign(const MachineInstr *CPEMI);
252 void initializeFunctionInfo(const std::vector<MachineInstr*> &CPEMIs);
253 MachineBasicBlock *splitBlockBeforeInstr(MachineInstr *MI);
255 bool decrementCPEReferenceCount(unsigned CPI, MachineInstr* CPEMI);
256 unsigned getCombinedIndex(const MachineInstr *CPEMI);
263 void removeDeadCPEMI(MachineInstr *CPEMI);
265 bool isCPEntryInRange(MachineInstr *MI, unsigned UserOffset,
266 MachineInstr *CPEMI, unsigned Disp, bool NegOk,
277 bool preserveBaseRegister(MachineInstr *JumpMI, MachineInstr *LEAMI,
277 bool preserveBaseRegister(MachineInstr *JumpMI, MachineInstr *LEAMI,
387 std::vector<MachineInstr*> CPEMIs;
491 ARMConstantIslands::doInitialConstPlacement(std::vector<MachineInstr*> &CPEMIs) {
530 MachineInstr *CPEMI =
556 std::vector<MachineInstr *> &CPEMIs) {
598 MachineInstr *CPEMI = BuildMI(*JumpTableBB, JumpTableBB->begin(),
640 const MachineInstr *CPEMI) {
653 Align ARMConstantIslands::getCPEAlign(const MachineInstr *CPEMI) {
679 for (MachineInstr &I : MBB)
690 initializeFunctionInfo(const std::vector<MachineInstr*> &CPEMIs) {
708 for (MachineInstr &I : MBB) {
842 MachineInstr *CPEMI = CPEMIs[CPI];
886 MachineBasicBlock *ARMConstantIslands::splitBlockBeforeInstr(MachineInstr *MI) {
893 for (MachineInstr &LiveMI : make_range(OrigBB->rbegin(), LivenessEnd))
1061 bool ARMConstantIslands::isCPEntryInRange(MachineInstr *MI, unsigned UserOffset,
1062 MachineInstr *CPEMI, unsigned MaxDisp,
1093 MachineInstr *PredMI = &Pred->back();
1106 MachineInstr *CPEMI) {
1119 unsigned ARMConstantIslands::getCombinedIndex(const MachineInstr *CPEMI) {
1133 MachineInstr *UserMI = U.MI;
1134 MachineInstr *CPEMI = U.CPEMI;
1269 MachineInstr *UserMI = U.MI;
1270 MachineInstr *CPEMI = U.CPEMI;
1384 MachineInstr *LastIT = nullptr;
1450 MachineInstr *UserMI = U.MI;
1451 MachineInstr *CPEMI = U.CPEMI;
1558 void ARMConstantIslands::removeDeadCPEMI(MachineInstr *CPEMI) {
1604 MachineInstr *MI = Br.MI;
1622 MachineInstr *MI = Br.MI;
1649 MachineInstr *MI = Br.MI;
1667 MachineInstr *BMI = &MBB->back();
1744 MachineInstr *MI = PushPopMIs[i];
1857 MachineInstr* MI = nullptr;
1891 MachineInstr *CmpMI = findCMPToFoldIntoCBZ(Br.MI, TRI);
1972 MachineInstr *NewBR =
1988 MachineInstr *LastMI = &MBB->back();
2002 static bool isSimpleIndexCalc(MachineInstr &I, unsigned EntryReg,
2023 bool ARMConstantIslands::preserveBaseRegister(MachineInstr *JumpMI,
2024 MachineInstr *LEAMI,
2052 MachineInstr *RemovableAdd = nullptr;
2109 static bool jumpTableFollowsTB(MachineInstr *JTMI, MachineInstr *CPEMI) {
2109 static bool jumpTableFollowsTB(MachineInstr *JTMI, MachineInstr *CPEMI) {
2118 static void RemoveDeadAddBetweenLEAAndJT(MachineInstr *LEAMI,
2119 MachineInstr *JumpMI,
2124 MachineInstr *RemovableAdd = nullptr;
2168 MachineInstr *MI = T2JumpTables[i];
2226 MachineInstr *Shift = User.MI->getPrevNode();
2240 MachineInstr *Load = User.MI->getNextNode();
2260 MachineInstr *Add = Load->getNextNode();
2289 MachineInstr *CPEMI = User.CPEMI;
2295 MachineInstr *NewJTMI =
2362 MachineInstr *MI = T2JumpTables[i];
lib/Target/ARM/ARMExpandPseudoInsts.cpp 61 void TransferImpOps(MachineInstr &OldMI,
91 void ARMExpandPseudo::TransferImpOps(MachineInstr &OldMI,
470 MachineInstr &MI = *MBBI;
581 MachineInstr &MI = *MBBI;
657 MachineInstr &MI = *MBBI;
748 MachineInstr &MI = *MBBI;
828 MachineInstr &MI = *MBBI;
933 MachineInstr &MI = *MBBI;
1052 MachineInstr &MI = *MBBI;
1156 MachineInstr &MI = *MBBI;
lib/Target/ARM/ARMFastISel.cpp 159 bool tryToFoldLoadIntoMI(MachineInstr *MI, unsigned OpNo,
237 bool isARMNEONPred(const MachineInstr *MI);
238 bool DefinesOptionalPredicate(MachineInstr *MI, bool *CPSR);
250 bool ARMFastISel::DefinesOptionalPredicate(MachineInstr *MI, bool *CPSR) {
263 bool ARMFastISel::isARMNEONPred(const MachineInstr *MI) {
285 MachineInstr *MI = &*MIB;
2909 bool ARMFastISel::tryToFoldLoadIntoMI(MachineInstr *MI, unsigned OpNo,
lib/Target/ARM/ARMFeatures.h 24 inline bool isV8EligibleForIT(const InstrType *Instr) {
lib/Target/ARM/ARMFrameLowering.cpp 145 static bool isCSRestore(MachineInstr &MI, const ARMBaseInstrInfo &TII,
169 unsigned SrcReg, int NumBytes, unsigned MIFlags = MachineInstr::NoFlags,
182 unsigned MIFlags = MachineInstr::NoFlags,
189 static int sizeOfSPAdjustment(const MachineInstr &MI) {
265 .setMIFlags(MachineInstr::FrameSetup);
398 MachineInstr::FrameSetup);
406 MachineInstr::FrameSetup);
492 MachineInstr::FrameSetup);
524 .setMIFlags(MachineInstr::FrameSetup)
529 .setMIFlags(MachineInstr::FrameSetup);
541 .setMIFlags(MachineInstr::FrameSetup);
546 .setMIFlags(MachineInstr::FrameSetup);
552 .setMIFlags(MachineInstr::FrameSetup);
559 .setMIFlags(MachineInstr::FrameSetup)
572 MachineInstr::FrameSetup);
600 MachineInstr::FrameSetup);
607 .setMIFlags(MachineInstr::FrameSetup);
614 .setMIFlags(MachineInstr::FrameSetup);
649 .setMIFlags(MachineInstr::FrameSetup);
673 .setMIFlags(MachineInstr::FrameSetup);
695 .setMIFlags(MachineInstr::FrameSetup);
1441 MachineInstr::FrameSetup);
1443 MachineInstr::FrameSetup);
1445 NumAlignedDPRCS2Regs, MachineInstr::FrameSetup);
1514 for (auto &MI : MBB) {
2154 MachineInstr &Old = *I;
2176 emitSPUpdate(isARM, MBB, I, dl, TII, -Amount, MachineInstr::NoFlags,
2180 emitSPUpdate(isARM, MBB, I, dl, TII, Amount, MachineInstr::NoFlags,
lib/Target/ARM/ARMHazardRecognizer.cpp 18 static bool hasRAWHazard(MachineInstr *DefMI, MachineInstr *MI,
18 static bool hasRAWHazard(MachineInstr *DefMI, MachineInstr *MI,
37 MachineInstr *MI = SU->getInstr();
44 MachineInstr *DefMI = LastMI;
82 MachineInstr *MI = SU->getInstr();
lib/Target/ARM/ARMHazardRecognizer.h 30 MachineInstr *LastMI;
lib/Target/ARM/ARMISelLowering.cpp 2517 MachineInstr *Def = MRI->getVRegDef(VR);
9336 void ARMTargetLowering::SetupEntryBlockForSjLj(MachineInstr &MI,
9464 void ARMTargetLowering::EmitSjLjDispatchBlock(MachineInstr &MI,
9840 for (MachineInstr::mop_iterator
10008 ARMTargetLowering::EmitStructByval(MachineInstr &MI,
10255 ARMTargetLowering::EmitLowered__chkstk(MachineInstr &MI,
10321 .setMIFlags(MachineInstr::FrameSetup)
10330 ARMTargetLowering::EmitLowered__dbzchk(MachineInstr &MI,
10372 const MachineInstr& mi = *miI;
10398 ARMTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
10691 MachineInstr &MI, const SDNode *Node) {
10715 void ARMTargetLowering::AdjustInstrPostInstrSelection(MachineInstr &MI,
lib/Target/ARM/ARMISelLowering.h 325 EmitInstrWithCustomInserter(MachineInstr &MI,
328 void AdjustInstrPostInstrSelection(MachineInstr &MI,
833 void SetupEntryBlockForSjLj(MachineInstr &MI, MachineBasicBlock *MBB,
836 void EmitSjLjDispatchBlock(MachineInstr &MI, MachineBasicBlock *MBB) const;
838 bool RemapAddSubWithFlags(MachineInstr &MI, MachineBasicBlock *BB) const;
840 MachineBasicBlock *EmitStructByval(MachineInstr &MI,
843 MachineBasicBlock *EmitLowered__chkstk(MachineInstr &MI,
845 MachineBasicBlock *EmitLowered__dbzchk(MachineInstr &MI,
lib/Target/ARM/ARMInstructionSelector.cpp 37 bool select(MachineInstr &I) override;
41 bool selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const;
140 void renderVFPF32Imm(MachineInstrBuilder &New, const MachineInstr &Old) const;
141 void renderVFPF64Imm(MachineInstrBuilder &New, const MachineInstr &Old) const;
210 static bool selectCopy(MachineInstr &I, const TargetInstrInfo &TII,
813 MachineInstrBuilder &NewInstBuilder, const MachineInstr &OldInst) const {
825 MachineInstrBuilder &NewInstBuilder, const MachineInstr &OldInst) const {
836 bool ARMInstructionSelector::select(MachineInstr &I) {
lib/Target/ARM/ARMLegalizerInfo.cpp 360 bool ARMLegalizerInfo::legalizeCustom(MachineInstr &MI,
lib/Target/ARM/ARMLegalizerInfo.h 31 bool legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI,
lib/Target/ARM/ARMLoadStoreOptimizer.cpp 130 MachineInstr *MI;
134 MemOpQueueEntry(MachineInstr &MI, int Offset, unsigned Position)
143 SmallVector<MachineInstr*, 4> Instrs;
163 SmallVector<MachineInstr*,4> MergeBaseCandidates;
172 MachineInstr *CreateLoadStoreMulti(
178 MachineInstr *CreateLoadStoreDouble(
185 MachineInstr *MergeOpsUpdate(const MergeCandidate &Cand);
188 bool MergeBaseUpdateLoadStore(MachineInstr *MI);
189 bool MergeBaseUpdateLSMultiple(MachineInstr *MI);
190 bool MergeBaseUpdateLSDouble(MachineInstr &MI) const;
203 static bool definesCPSR(const MachineInstr &MI) {
216 static int getMemoryOpOffset(const MachineInstr &MI) {
244 static const MachineOperand &getLoadStoreBaseOp(const MachineInstr &MI) {
248 static const MachineOperand &getLoadStoreRegOp(const MachineInstr &MI) {
436 static unsigned getLSMultipleTransferSize(const MachineInstr *MI) {
623 MachineInstr *ARMLoadStoreOpt::CreateLoadStoreMulti(
825 MachineInstr *ARMLoadStoreOpt::CreateLoadStoreDouble(
851 MachineInstr *ARMLoadStoreOpt::MergeOpsUpdate(const MergeCandidate &Cand) {
852 const MachineInstr *First = Cand.Instrs.front();
860 for (const MachineInstr *MI : Cand.Instrs) {
892 MachineInstr *LatestMI = Cand.Instrs[Cand.LatestMIIdx];
901 MachineInstr *Merged = nullptr;
923 for (MachineInstr *MI : Cand.Instrs)
936 for (MachineInstr &MI : FixupRange) {
955 for (MachineInstr &MI : FixupRange) {
979 const MachineInstr &MI) {
996 const MachineInstr *FirstMI = MemOps[0].MI;
1005 const MachineInstr *MI = MemOps[SIndex].MI;
1181 static int isIncrementOrDecrement(const MachineInstr &MI, unsigned Reg,
1259 bool ARMLoadStoreOpt::MergeBaseUpdateLSMultiple(MachineInstr *MI) {
1385 bool ARMLoadStoreOpt::MergeBaseUpdateLoadStore(MachineInstr *MI) {
1505 bool ARMLoadStoreOpt::MergeBaseUpdateLSDouble(MachineInstr &MI) const {
1565 static bool isMemoryOp(const MachineInstr &MI) {
1650 MachineInstr *MI = &*MBBI;
1884 MachineInstr *Merged = MergeOpsUpdate(*Candidate);
1894 for (MachineInstr *MI : Candidate->Instrs) {
1907 for (MachineInstr *MI : MergeBaseCandidates)
1938 MachineInstr &PrevMI = *PrevI;
2058 bool CanFormLdStDWord(MachineInstr *Op0, MachineInstr *Op1, DebugLoc &dl,
2058 bool CanFormLdStDWord(MachineInstr *Op0, MachineInstr *Op1, DebugLoc &dl,
2065 SmallVectorImpl<MachineInstr *> &Ops,
2067 DenseMap<MachineInstr*, unsigned> &MI2LocMap);
2117 for (MachineInstr *MemOp : MemOps)
2140 ARMPreAllocLoadStoreOpt::CanFormLdStDWord(MachineInstr *Op0, MachineInstr *Op1,
2140 ARMPreAllocLoadStoreOpt::CanFormLdStDWord(MachineInstr *Op0, MachineInstr *Op1,
2216 SmallVectorImpl<MachineInstr *> &Ops,
2218 DenseMap<MachineInstr*, unsigned> &MI2LocMap) {
2236 MachineInstr *FirstOp = nullptr;
2237 MachineInstr *LastOp = nullptr;
2244 MachineInstr *Op = Ops[i];
2282 SmallPtrSet<MachineInstr*, 4> MemOps;
2307 MachineInstr *Op0 = Ops.back();
2308 MachineInstr *Op1 = Ops[Ops.size()-2];
2367 MachineInstr *Op = Ops.back();
2386 DenseMap<MachineInstr*, unsigned> MI2LocMap;
2387 using MapIt = DenseMap<unsigned, SmallVector<MachineInstr *, 4>>::iterator;
2388 using Base2InstMap = DenseMap<unsigned, SmallVector<MachineInstr *, 4>>;
2400 MachineInstr &MI = *MBBI;
2454 SmallVectorImpl<MachineInstr *> &Lds = Base2LdsMap[Base];
2462 SmallVectorImpl<MachineInstr *> &Sts = Base2StsMap[Base];
lib/Target/ARM/ARMLowOverheadLoops.cpp 67 MachineInstr * IsSafeToDefineLR(MachineInstr *MI);
67 MachineInstr * IsSafeToDefineLR(MachineInstr *MI);
71 void RevertWhile(MachineInstr *MI) const;
73 bool RevertLoopDec(MachineInstr *MI, bool AllowFlags = false) const;
75 void RevertLoopEnd(MachineInstr *MI, bool SkipCmp = false) const;
77 void Expand(MachineLoop *ML, MachineInstr *Start,
78 MachineInstr *InsertPt, MachineInstr *Dec,
78 MachineInstr *InsertPt, MachineInstr *Dec,
79 MachineInstr *End, bool Revert);
114 static bool IsLoopStart(MachineInstr &MI) {
120 static MachineInstr* SearchForDef(MachineInstr *Begin, T End, unsigned Reg) {
120 static MachineInstr* SearchForDef(MachineInstr *Begin, T End, unsigned Reg) {
121 for(auto &MI : make_range(T(Begin), End)) {
131 static MachineInstr* SearchForUse(MachineInstr *Begin,
131 static MachineInstr* SearchForUse(MachineInstr *Begin,
134 for(auto &MI : make_range(MachineBasicBlock::iterator(Begin), End)) {
147 MachineInstr *ARMLowOverheadLoops::IsSafeToDefineLR(MachineInstr *Start) {
147 MachineInstr *ARMLowOverheadLoops::IsSafeToDefineLR(MachineInstr *Start) {
160 MachineInstr *PredLRDef = SearchForDef(Start, MBB->rend(), ARM::LR);
164 MachineInstr *SuccLRDef = SearchForDef(Start, MBB->end(), ARM::LR);
225 std::function<MachineInstr*(MachineBasicBlock*)> SearchForStart =
227 for (auto &MI : *MBB) {
236 MachineInstr *Start = nullptr;
237 MachineInstr *Dec = nullptr;
238 MachineInstr *End = nullptr;
267 for (auto &MI : *MBB) {
344 MachineInstr *InsertPt = Revert ? nullptr : IsSafeToDefineLR(Start);
359 void ARMLowOverheadLoops::RevertWhile(MachineInstr *MI) const {
380 bool ARMLowOverheadLoops::RevertLoopDec(MachineInstr *MI,
388 if (auto *Def = SearchForDef(MI, MBB->end(), ARM::CPSR)) {
414 void ARMLowOverheadLoops::RevertLoopEnd(MachineInstr *MI, bool SkipCmp) const {
441 void ARMLowOverheadLoops::Expand(MachineLoop *ML, MachineInstr *Start,
442 MachineInstr *InsertPt,
443 MachineInstr *Dec, MachineInstr *End,
443 MachineInstr *Dec, MachineInstr *End,
489 MachineInstr *Terminator = &BB->instr_back();
519 SmallVector<MachineInstr*, 4> Starts;
520 SmallVector<MachineInstr*, 4> Decs;
521 SmallVector<MachineInstr*, 4> Ends;
523 for (auto &I : MBB) {
537 for (auto *Start : Starts) {
543 for (auto *Dec : Decs)
546 for (auto *End : Ends)
lib/Target/ARM/ARMMCInstLower.cpp 123 void llvm::LowerARMMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI,
168 void ARMAsmPrinter::EmitSled(const MachineInstr &MI, SledKind Kind)
219 void ARMAsmPrinter::LowerPATCHABLE_FUNCTION_ENTER(const MachineInstr &MI)
224 void ARMAsmPrinter::LowerPATCHABLE_FUNCTION_EXIT(const MachineInstr &MI)
229 void ARMAsmPrinter::LowerPATCHABLE_TAIL_CALL(const MachineInstr &MI)
lib/Target/ARM/ARMMacroFusion.cpp 22 static bool isAESPair(const MachineInstr *FirstMI,
23 const MachineInstr &SecondMI) {
38 static bool isLiteralsPair(const MachineInstr *FirstMI,
39 const MachineInstr &SecondMI) {
53 const MachineInstr *FirstMI,
54 const MachineInstr &SecondMI) {
lib/Target/ARM/ARMOptimizeBarriersPass.cpp 42 static bool CanMovePastDMB(const MachineInstr *MI) {
55 std::vector<MachineInstr *> ToRemove;
66 for (auto &MI : MBB) {
lib/Target/ARM/ARMRegisterBankInfo.cpp 211 ARMRegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
lib/Target/ARM/ARMRegisterBankInfo.h 39 getInstrMapping(const MachineInstr &MI) const override;
lib/Target/ARM/MLxExpansionPass.cpp 57 MachineInstr* LastMIs[4];
58 SmallPtrSet<MachineInstr*, 4> IgnoreStall;
61 void pushStack(MachineInstr *MI);
62 MachineInstr *getAccDefMI(MachineInstr *MI) const;
62 MachineInstr *getAccDefMI(MachineInstr *MI) const;
63 unsigned getDefReg(MachineInstr *MI) const;
64 bool hasLoopHazard(MachineInstr *MI) const;
65 bool hasRAWHazard(unsigned Reg, MachineInstr *MI) const;
66 bool FindMLxHazard(MachineInstr *MI);
67 void ExpandFPMLxInstruction(MachineBasicBlock &MBB, MachineInstr *MI,
80 void MLxExpansion::pushStack(MachineInstr *MI) {
86 MachineInstr *MLxExpansion::getAccDefMI(MachineInstr *MI) const {
86 MachineInstr *MLxExpansion::getAccDefMI(MachineInstr *MI) const {
94 MachineInstr *DefMI = MRI->getVRegDef(Reg);
116 unsigned MLxExpansion::getDefReg(MachineInstr *MI) const {
122 MachineInstr *UseMI = &*MRI->use_instr_nodbg_begin(Reg);
140 bool MLxExpansion::hasLoopHazard(MachineInstr *MI) const {
146 MachineInstr *DefMI = MRI->getVRegDef(Reg);
182 bool MLxExpansion::hasRAWHazard(unsigned Reg, MachineInstr *MI) const {
210 bool MLxExpansion::FindMLxHazard(MachineInstr *MI) {
217 MachineInstr *DefMI = getAccDefMI(MI);
249 MachineInstr *NextMI = LastMIs[Idx];
269 MLxExpansion::ExpandFPMLxInstruction(MachineBasicBlock &MBB, MachineInstr *MI,
334 MachineInstr *MI = &*MII++;
lib/Target/ARM/MVEVPTBlockPass.cpp 137 static MachineInstr *findVCMPToFoldIntoVPST(MachineBasicBlock::iterator MI,
174 MachineInstr *MI = &*MBIter;
233 MachineInstr *VCMP = findVCMPToFoldIntoVPST(MI, TRI, NewOpcode);
lib/Target/ARM/Thumb1FrameLowering.cpp 106 unsigned MIFlags = MachineInstr::NoFlags) {
123 MachineInstr &Old = *I;
182 ARM::NoRegister, MachineInstr::FrameSetup);
188 .setMIFlags(MachineInstr::FrameSetup);
195 ARM::NoRegister, MachineInstr::FrameSetup);
201 .setMIFlags(MachineInstr::FrameSetup);
265 .setMIFlags(MachineInstr::FrameSetup);
293 .setMIFlags(MachineInstr::FrameSetup);
305 .setMIFlags(MachineInstr::FrameSetup)
313 .setMIFlags(MachineInstr::FrameSetup);
320 .setMIFlags(MachineInstr::FrameSetup);
362 .setMIFlags(MachineInstr::FrameSetup);
385 ScratchRegister, MachineInstr::FrameSetup);
392 .setMIFlags(MachineInstr::FrameSetup);
455 static bool isCSRestore(MachineInstr &MI, const MCPhysReg *CSRegs) {
492 MachineInstr::NoFlags);
544 ScratchRegister, MachineInstr::NoFlags);
547 ScratchRegister, MachineInstr::NoFlags);
736 MachineInstr::NoFlags);
778 ARM::NoRegister, MachineInstr::NoFlags);
862 MIB.setMIFlags(MachineInstr::FrameSetup);
894 .setMIFlags(MachineInstr::FrameSetup);
908 .setMIFlags(MachineInstr::FrameSetup);
lib/Target/ARM/Thumb2ITBlockPass.cpp 66 bool MoveCopyOutOfITBlock(MachineInstr *MI,
81 static void TrackDefUses(MachineInstr *MI, RegisterSet &Defs, RegisterSet &Uses,
113 static void ClearKillFlags(MachineInstr *MI, RegisterSet &Uses) {
123 static bool isCopy(MachineInstr *MI) {
136 Thumb2ITBlock::MoveCopyOutOfITBlock(MachineInstr *MI,
200 MachineInstr *MI = &*MBBI;
221 MachineInstr *LastITMI = MI;
239 MachineInstr *NMI = &*MBBI;
lib/Target/ARM/Thumb2InstrInfo.cpp 464 bool llvm::rewriteT2FrameIndex(MachineInstr &MI, unsigned FrameRegIdx,
697 ARMCC::CondCodes llvm::getITInstrPredicate(const MachineInstr &MI,
705 int llvm::findFirstVPTPredOperandIdx(const MachineInstr &MI) {
718 ARMVCC::VPTCodes llvm::getVPTInstrPredicate(const MachineInstr &MI,
lib/Target/ARM/Thumb2InstrInfo.h 70 ARMCC::CondCodes getITInstrPredicate(const MachineInstr &MI, unsigned &PredReg);
74 int findFirstVPTPredOperandIdx(const MachineInstr &MI);
75 ARMVCC::VPTCodes getVPTInstrPredicate(const MachineInstr &MI,
lib/Target/ARM/Thumb2SizeReduction.cpp 183 bool canAddPseudoFlagDep(MachineInstr *Use, bool IsSelfLoop);
185 bool VerifyPredAndCC(MachineInstr *MI, const ReduceEntry &Entry,
189 bool ReduceLoadStore(MachineBasicBlock &MBB, MachineInstr *MI,
192 bool ReduceSpecial(MachineBasicBlock &MBB, MachineInstr *MI,
197 bool ReduceTo2Addr(MachineBasicBlock &MBB, MachineInstr *MI,
203 bool ReduceToNarrow(MachineBasicBlock &MBB, MachineInstr *MI,
208 bool ReduceMI(MachineBasicBlock &MBB, MachineInstr *MI,
218 MachineInstr *CPSRDef;
262 static bool isHighLatencyCPSR(MachineInstr *Def) {
289 Thumb2SizeReduce::canAddPseudoFlagDep(MachineInstr *Use, bool FirstInSelfLoop) {
332 Thumb2SizeReduce::VerifyPredAndCC(MachineInstr *MI, const ReduceEntry &Entry,
374 static bool VerifyLowRegs(MachineInstr *MI) {
404 Thumb2SizeReduce::ReduceLoadStore(MachineBasicBlock &MBB, MachineInstr *MI,
622 Thumb2SizeReduce::ReduceSpecial(MachineBasicBlock &MBB, MachineInstr *MI,
735 Thumb2SizeReduce::ReduceTo2Addr(MachineBasicBlock &MBB, MachineInstr *MI,
761 MachineInstr *CommutedMI = TII->commuteInstruction(*MI);
772 MachineInstr *CommutedMI =
850 Thumb2SizeReduce::ReduceToNarrow(MachineBasicBlock &MBB, MachineInstr *MI,
972 static bool UpdateCPSRDef(MachineInstr &MI, bool LiveCPSR, bool &DefCPSR) {
988 static bool UpdateCPSRUse(MachineInstr &MI, bool LiveCPSR) {
1004 bool Thumb2SizeReduce::ReduceMI(MachineBasicBlock &MBB, MachineInstr *MI,
1034 MachineInstr *BundleMI = nullptr;
1060 MachineInstr *MI = &*MII;
lib/Target/ARM/ThumbRegisterInfo.cpp 128 const ARMBaseRegisterInfo &MRI, unsigned MIFlags = MachineInstr::NoFlags) {
339 static void removeOperands(MachineInstr &MI, unsigned i) {
363 MachineInstr &MI = *II;
430 void ThumbRegisterInfo::resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
453 MachineInstr &MI = *II;
lib/Target/ARM/ThumbRegisterInfo.h 44 unsigned MIFlags = MachineInstr::NoFlags) const override;
52 void resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
lib/Target/AVR/AVRAsmPrinter.cpp 46 void printOperand(const MachineInstr *MI, unsigned OpNo, raw_ostream &O);
48 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNum,
51 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum,
54 void EmitInstruction(const MachineInstr *MI) override;
60 void AVRAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
85 bool AVRAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum,
136 bool AVRAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
171 void AVRAsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/AVR/AVRExpandPseudoInsts.cpp 92 unsigned scavengeGPR8(MachineInstr &MI);
141 MachineInstr &MI = *MBBI;
174 MachineInstr &MI = *MBBI;
221 MachineInstr &MI = *MBBI;
273 MachineInstr &MI = *MBBI;
325 MachineInstr &MI = *MBBI;
388 MachineInstr &MI = *MBBI;
418 MachineInstr &MI = *MBBI;
451 MachineInstr &MI = *MBBI;
486 MachineInstr &MI = *MBBI;
535 MachineInstr &MI = *MBBI;
579 MachineInstr &MI = *MBBI;
628 MachineInstr &MI = *MBBI;
659 MachineInstr &MI = *MBBI;
690 MachineInstr &MI = *MBBI;
745 MachineInstr &MI = *MBBI;
799 MachineInstr &MI = *MBBI;
829 MachineInstr &NewInst =
863 unsigned AVRExpandPseudo::scavengeGPR8(MachineInstr &MI) {
968 MachineInstr &MI = *MBBI;
1014 MachineInstr &MI = *MBBI;
1042 MachineInstr &MI = *MBBI;
1076 MachineInstr &MI = *MBBI;
1110 MachineInstr &MI = *MBBI;
1144 MachineInstr &MI = *MBBI;
1174 MachineInstr &MI = *MBBI;
1205 MachineInstr &MI = *MBBI;
1230 MachineInstr &MI = *MBBI;
1247 MachineInstr &MI = *MBBI;
1280 MachineInstr &MI = *MBBI;
1323 MachineInstr &MI = *MBBI;
1353 MachineInstr &MI = *MBBI;
1412 MachineInstr &MI = *MBBI;
1449 MachineInstr &MI = *MBBI;
1476 MachineInstr &MI = *MBBI;
1510 MachineInstr &MI = *MBBI;
lib/Target/AVR/AVRFrameLowering.cpp 66 .setMIFlag(MachineInstr::FrameSetup);
73 .setMIFlag(MachineInstr::FrameSetup);
82 .setMIFlag(MachineInstr::FrameSetup);
86 .setMIFlag(MachineInstr::FrameSetup);
89 .setMIFlag(MachineInstr::FrameSetup);
94 .setMIFlag(MachineInstr::FrameSetup);
108 (MBBI != MBB.end()) && MBBI->getFlag(MachineInstr::FrameSetup) &&
116 .setMIFlag(MachineInstr::FrameSetup);
131 MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(Opcode), AVR::R29R28)
134 .setMIFlag(MachineInstr::FrameSetup);
141 .setMIFlag(MachineInstr::FrameSetup);
208 MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(Opcode), AVR::R29R28)
267 .setMIFlag(MachineInstr::FrameSetup);
314 MachineInstr &MI = *I;
403 MachineInstr *New = BuildMI(MBB, MI, DL, TII.get(addOpcode), AVR::R31R30)
461 for (const MachineInstr &MI : BB) {
lib/Target/AVR/AVRISelLowering.cpp 1436 MachineBasicBlock *AVRTargetLowering::insertShift(MachineInstr &MI,
1581 MachineBasicBlock *AVRTargetLowering::insertMul(MachineInstr &MI,
1597 AVRTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
lib/Target/AVR/AVRISelLowering.h 109 EmitInstrWithCustomInserter(MachineInstr &MI,
178 MachineBasicBlock *insertShift(MachineInstr &MI, MachineBasicBlock *BB) const;
179 MachineBasicBlock *insertMul(MachineInstr &MI, MachineBasicBlock *BB) const;
lib/Target/AVR/AVRInstrInfo.cpp 82 unsigned AVRInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
101 unsigned AVRInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
413 auto &MI = *BuildMI(&MBB, DL, get(AVR::RJMPk)).addMBB(TBB);
422 auto &CondMI = *BuildMI(&MBB, DL, getBrCond(CC)).addMBB(TBB);
429 auto &MI = *BuildMI(&MBB, DL, get(AVR::RJMPk)).addMBB(FBB);
476 unsigned AVRInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
504 AVRInstrInfo::getBranchDestBlock(const MachineInstr &MI) const {
568 auto &MI = *BuildMI(&MBB, DL, get(AVR::JMPk)).addMBB(&NewDestBB);
lib/Target/AVR/AVRInstrInfo.h 72 unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
86 unsigned isLoadFromStackSlot(const MachineInstr &MI,
88 unsigned isStoreToStackSlot(const MachineInstr &MI,
105 MachineBasicBlock *getBranchDestBlock(const MachineInstr &MI) const override;
lib/Target/AVR/AVRMCInstLower.cpp 62 void AVRMCInstLower::lowerInstruction(const MachineInstr &MI, MCInst &OutMI) const {
lib/Target/AVR/AVRMCInstLower.h 31 void lowerInstruction(const MachineInstr &MI, MCInst &OutMI) const;
lib/Target/AVR/AVRRegisterInfo.cpp 99 MachineInstr &MI = *II;
133 MachineInstr &MI = *II;
196 MachineInstr *New = BuildMI(MBB, II, dl, TII.get(Opcode), DstReg)
224 MachineInstr *New = BuildMI(MBB, II, dl, TII.get(AddOpc), AVR::R29R28)
276 bool AVRRegisterInfo::shouldCoalesce(MachineInstr *MI,
lib/Target/AVR/AVRRegisterInfo.h 58 bool shouldCoalesce(MachineInstr *MI,
lib/Target/AVR/AVRRelaxMemOperations.cpp 89 MachineInstr &MI = *MBBI;
125 MachineInstr &MI = *MBBI;
lib/Target/BPF/BPFAsmPrinter.cpp 45 void printOperand(const MachineInstr *MI, int OpNum, raw_ostream &O);
46 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
48 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum,
51 void EmitInstruction(const MachineInstr *MI) override;
72 void BPFAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
110 bool BPFAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
119 bool BPFAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
140 void BPFAsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/BPF/BPFISelLowering.cpp 564 BPFTargetLowering::EmitSubregExt(MachineInstr &MI, MachineBasicBlock *BB,
586 BPFTargetLowering::EmitInstrWithCustomInserterMemcpy(MachineInstr &MI,
617 BPFTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
lib/Target/BPF/BPFISelLowering.h 54 EmitInstrWithCustomInserter(MachineInstr &MI,
113 unsigned EmitSubregExt(MachineInstr &MI, MachineBasicBlock *BB, unsigned Reg,
116 MachineBasicBlock * EmitInstrWithCustomInserterMemcpy(MachineInstr &MI,
lib/Target/BPF/BPFInstrInfo.cpp 115 bool BPFInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
lib/Target/BPF/BPFInstrInfo.h 36 bool expandPostRAPseudo(MachineInstr &MI) const override;
lib/Target/BPF/BPFMCInstLower.cpp 47 void BPFMCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
lib/Target/BPF/BPFMCInstLower.h 34 void Lower(const MachineInstr *MI, MCInst &OutMI) const;
lib/Target/BPF/BPFMIChecking.cpp 106 static bool hasLiveDefs(const MachineInstr &MI, const TargetRegisterInfo *TRI) {
158 for (MachineInstr &MI : MBB) {
lib/Target/BPF/BPFMIPeephole.cpp 54 bool isMovFrom32Def(MachineInstr *MovMI);
78 bool BPFMIPeephole::isMovFrom32Def(MachineInstr *MovMI)
80 MachineInstr *DefInsn = MRI->getVRegDef(MovMI->getOperand(1).getReg());
95 MachineInstr *PhiDef = MRI->getVRegDef(opnd.getReg());
120 MachineInstr* ToErase = nullptr;
124 for (MachineInstr &MI : MBB) {
140 MachineInstr *SllMI = MRI->getVRegDef(ShfReg);
154 MachineInstr *MovMI = MRI->getVRegDef(SllMI->getOperand(1).getReg());
237 MachineInstr* ToErase = nullptr;
241 for (MachineInstr &MI : MBB) {
358 MachineInstr* ToErase = nullptr;
362 for (MachineInstr &MI : MBB) {
364 MachineInstr *MI2 = nullptr;
366 MachineInstr *DefMI;
423 MachineInstr *PhiDef = MRI->getVRegDef(opnd.getReg());
lib/Target/BPF/BPFMISimplifyPatchable.cpp 77 MachineInstr *ToErase = nullptr;
81 for (MachineInstr &MI : MBB) {
103 MachineInstr *DefInst = MRI->getUniqueVRegDef(SrcReg);
lib/Target/BPF/BPFRegisterInfo.cpp 62 MachineInstr &MI = *II;
69 for (auto &I : MBB)
lib/Target/BPF/BTFDebug.cpp 940 void BTFDebug::generateFieldReloc(const MachineInstr *MI,
962 void BTFDebug::processLDimm64(const MachineInstr *MI) {
1003 void BTFDebug::beginInstruction(const MachineInstr *MI) {
1007 MI->getFlag(MachineInstr::FrameSetup))
1123 bool BTFDebug::InstLower(const MachineInstr *MI, MCInst &OutMI) {
lib/Target/BPF/BTFDebug.h 297 void generateFieldReloc(const MachineInstr *MI, const MCSymbol *ORSym,
304 void processLDimm64(const MachineInstr *MI);
326 bool InstLower(const MachineInstr *MI, MCInst &OutMI);
348 void beginInstruction(const MachineInstr *MI) override;
lib/Target/Hexagon/BitTracker.cpp 720 bool BT::MachineEvaluator::evaluate(const MachineInstr &MI,
766 bool BT::UseQueueType::Cmp::operator()(const MachineInstr *InstA,
767 const MachineInstr *InstB) const {
798 void BT::visitPHI(const MachineInstr &PI) {
843 void BT::visitNonBranch(const MachineInstr &MI) {
919 void BT::visitBranchesFrom(const MachineInstr &BI) {
928 const MachineInstr &MI = *It;
985 for (MachineInstr &UseI : MRI.use_nodbg_instructions(Reg))
1032 void BT::visit(const MachineInstr &MI) {
1067 const MachineInstr &PI = *It++;
1081 const MachineInstr &MI = *It++;
1104 MachineInstr &UseI = *UseQ.front();
lib/Target/Hexagon/BitTracker.h 57 void visit(const MachineInstr &MI);
62 void visitPHI(const MachineInstr &PI);
63 void visitNonBranch(const MachineInstr &MI);
64 void visitBranchesFrom(const MachineInstr &BI);
69 using InstrSetType = std::set<const MachineInstr *>;
83 MachineInstr *front() const {
86 void push(MachineInstr *MI) {
99 Cmp(DenseMap<const MachineInstr*,unsigned> &Map) : Dist(Map) {}
100 bool operator()(const MachineInstr *MI, const MachineInstr *MJ) const;
100 bool operator()(const MachineInstr *MI, const MachineInstr *MJ) const;
101 DenseMap<const MachineInstr*,unsigned> &Dist;
103 std::priority_queue<MachineInstr*, std::vector<MachineInstr*>, Cmp> Uses;
103 std::priority_queue<MachineInstr*, std::vector<MachineInstr*>, Cmp> Uses;
104 DenseSet<const MachineInstr*> Set; // Set to avoid adding duplicate entries.
105 DenseMap<const MachineInstr*,unsigned> Dist;
470 virtual bool evaluate(const MachineInstr &MI, const CellMapType &Inputs,
476 virtual bool evaluate(const MachineInstr &BI, const CellMapType &Inputs,
lib/Target/Hexagon/HexagonAsmPrinter.cpp 58 void HexagonLowerToMC(const MCInstrInfo &MCII, const MachineInstr *MI,
75 void HexagonAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
114 bool HexagonAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
155 bool HexagonAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
180 static MCSymbol *smallData(AsmPrinter &AP, const MachineInstr &MI,
266 const MachineInstr &MI) {
743 void HexagonAsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/Hexagon/HexagonAsmPrinter.h 49 void EmitInstruction(const MachineInstr *MI) override;
50 void HexagonProcessInstruction(MCInst &Inst, const MachineInstr &MBB);
52 void printOperand(const MachineInstr *MI, unsigned OpNo, raw_ostream &O);
53 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
55 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
lib/Target/Hexagon/HexagonBitSimplify.cpp 200 static void getInstrDefs(const MachineInstr &MI, RegisterSet &Defs);
201 static void getInstrUses(const MachineInstr &MI, RegisterSet &Uses);
216 static bool parseRegSequence(const MachineInstr &I,
271 for (auto &I : B)
288 void HexagonBitSimplify::getInstrDefs(const MachineInstr &MI,
300 void HexagonBitSimplify::getInstrUses(const MachineInstr &MI,
431 bool HexagonBitSimplify::parseRegSequence(const MachineInstr &I,
974 MachineInstr *UseI = I->getParent();
995 std::vector<MachineInstr*> Instrs;
1058 bool isLossyShiftLeft(const MachineInstr &MI, unsigned OpN,
1060 bool isLossyShiftRight(const MachineInstr &MI, unsigned OpN,
1063 bool computeUsedBits(const MachineInstr &MI, unsigned OpN, BitVector &Bits,
1078 bool RedundantInstrElimination::isLossyShiftLeft(const MachineInstr &MI,
1138 bool RedundantInstrElimination::isLossyShiftRight(const MachineInstr &MI,
1218 MachineInstr &UseI = *I->getParent();
1248 bool RedundantInstrElimination::computeUsedBits(const MachineInstr &MI,
1308 MachineInstr *MI = &*I;
1346 MachineInstr *CopyI =
1379 static bool isTfrConst(const MachineInstr &MI);
1392 bool ConstGeneration::isTfrConst(const MachineInstr &MI) {
1525 bool propagateRegCopy(MachineInstr &MI);
1663 bool CopyPropagation::propagateRegCopy(MachineInstr &MI) {
1717 std::vector<MachineInstr*> Instrs;
1760 bool genStoreUpperHalf(MachineInstr *MI);
1761 bool genStoreImmediate(MachineInstr *MI);
1762 bool genPackhl(MachineInstr *MI, BitTracker::RegisterRef RD,
1764 bool genExtractHalf(MachineInstr *MI, BitTracker::RegisterRef RD,
1766 bool genCombineHalf(MachineInstr *MI, BitTracker::RegisterRef RD,
1768 bool genExtractLow(MachineInstr *MI, BitTracker::RegisterRef RD,
1770 bool genBitSplit(MachineInstr *MI, BitTracker::RegisterRef RD,
1772 bool simplifyTstbit(MachineInstr *MI, BitTracker::RegisterRef RD,
1774 bool simplifyExtractLow(MachineInstr *MI, BitTracker::RegisterRef RD,
1776 bool simplifyRCmp0(MachineInstr *MI, BitTracker::RegisterRef RD);
1780 std::vector<MachineInstr*> NewMIs;
1913 bool BitSimplification::genStoreUpperHalf(MachineInstr *MI) {
1936 bool BitSimplification::genStoreImmediate(MachineInstr *MI) {
2012 bool BitSimplification::genPackhl(MachineInstr *MI,
2039 bool BitSimplification::genExtractHalf(MachineInstr *MI,
2078 bool BitSimplification::genCombineHalf(MachineInstr *MI,
2110 bool BitSimplification::genExtractLow(MachineInstr *MI,
2170 bool BitSimplification::genBitSplit(MachineInstr *MI,
2263 MachineInstr *DefS = MRI.getVRegDef(S);
2277 for (MachineInstr *In : NewMIs) {
2287 MachineInstr *DefI = MRI.getVRegDef(Op0.getReg());
2323 bool BitSimplification::simplifyTstbit(MachineInstr *MI,
2383 bool BitSimplification::simplifyExtractLow(MachineInstr *MI,
2575 bool BitSimplification::simplifyRCmp0(MachineInstr *MI,
2659 MachineInstr *InpDef = MRI.getVRegDef(SR.Reg);
2705 MachineInstr *MI = &*I;
2810 for (auto &I : B)
2910 using InstrList = std::vector<MachineInstr *>;
2916 PhiInfo(MachineInstr &P, MachineBasicBlock &B);
2923 static unsigned getDefReg(const MachineInstr *MI);
2925 bool isBitShuffle(const MachineInstr *MI, unsigned DefR) const;
2926 bool isStoreInput(const MachineInstr *MI, unsigned DefR) const;
2942 HexagonLoopRescheduling::PhiInfo::PhiInfo(MachineInstr &P,
2958 unsigned HexagonLoopRescheduling::getDefReg(const MachineInstr *MI) {
2978 bool HexagonLoopRescheduling::isBitShuffle(const MachineInstr *MI,
3008 bool HexagonLoopRescheduling::isStoreInput(const MachineInstr *MI,
3080 const MachineInstr *SI = G.Ins[i-1];
3108 for (auto &I : *C.LB) {
3116 MachineInstr *UseI = UI->getParent();
3169 MachineInstr *UseI = UI->getParent();
3210 MachineInstr *SI = ShufIns[i];
3221 MachineInstr *MI = ShufIns[j];
3274 const MachineInstr *DefPrehR = MRI->getVRegDef(F->PR.Reg);
lib/Target/Hexagon/HexagonBitTracker.cpp 166 RegisterRefs(const MachineInstr &MI) : Vector(MI.getNumOperands()) {
187 bool HexagonEvaluator::evaluate(const MachineInstr &MI,
982 bool HexagonEvaluator::evaluate(const MachineInstr &BI,
1040 unsigned HexagonEvaluator::getUniqueDefVReg(const MachineInstr &MI) const {
1055 bool HexagonEvaluator::evaluateLoad(const MachineInstr &MI,
1213 bool HexagonEvaluator::evaluateFormalCopy(const MachineInstr &MI,
lib/Target/Hexagon/HexagonBitTracker.h 34 bool evaluate(const MachineInstr &MI, const CellMapType &Inputs,
36 bool evaluate(const MachineInstr &BI, const CellMapType &Inputs,
51 unsigned getUniqueDefVReg(const MachineInstr &MI) const;
52 bool evaluateLoad(const MachineInstr &MI, const CellMapType &Inputs,
54 bool evaluateFormalCopy(const MachineInstr &MI, const CellMapType &Inputs,
lib/Target/Hexagon/HexagonBlockRanges.cpp 161 for (auto &In : B) {
171 MachineInstr *HexagonBlockRanges::InstrIndexMap::getInstr(IndexType Idx) const {
177 MachineInstr *MI) const {
206 void HexagonBlockRanges::InstrIndexMap::replaceInstr(MachineInstr *OldMI,
207 MachineInstr *NewMI) {
315 for (auto &In : B) {
522 for (auto &In : M.Block) {
lib/Target/Hexagon/HexagonBlockRanges.h 126 MachineInstr *getInstr(IndexType Idx) const;
127 IndexType getIndex(MachineInstr *MI) const;
131 void replaceInstr(MachineInstr *OldMI, MachineInstr *NewMI);
131 void replaceInstr(MachineInstr *OldMI, MachineInstr *NewMI);
139 std::map<IndexType,MachineInstr*> Map;
lib/Target/Hexagon/HexagonBranchRelaxation.cpp 76 bool isJumpOutOfRange(MachineInstr &MI,
115 for (auto &MI : B.instrs()) {
143 bool HexagonBranchRelaxation::isJumpOutOfRange(MachineInstr &MI,
198 for (auto &MI : B) {
lib/Target/Hexagon/HexagonCFGOptimizer.cpp 38 void InvertAndChangeJumpTarget(MachineInstr &, MachineBasicBlock *);
81 MachineInstr &MI, MachineBasicBlock *NewTarget) {
127 MachineInstr &MI = *MII;
lib/Target/Hexagon/HexagonConstExtenders.cpp 318 MachineInstr *UseMI = nullptr;
392 OffsetRange getOffsetRange(Register R, const MachineInstr &MI) const;
396 void recordExtender(MachineInstr &MI, unsigned OpNum);
397 void collectInstr(MachineInstr &MI);
410 unsigned getOperandIndex(const MachineInstr &MI,
412 const MachineOperand &getPredicateOp(const MachineInstr &MI) const;
413 const MachineOperand &getLoadResultOp(const MachineInstr &MI) const;
414 const MachineOperand &getStoredValueOp(const MachineInstr &MI) const;
1047 OffsetRange HCE::getOffsetRange(Register Rb, const MachineInstr &MI) const {
1140 void HCE::recordExtender(MachineInstr &MI, unsigned OpNum) {
1227 void HCE::collectInstr(MachineInstr &MI) {
1250 for (MachineInstr &MI : MBB)
1487 DenseSet<MachineInstr*> RefMIs;
1504 const MachineInstr *DefI = Rs.isVReg() ? MRI->getVRegDef(Rs.Reg) : nullptr;
1536 const MachineInstr *InitI = nullptr;
1584 MachineInstr &MI = *ED.UseMI;
1702 MachineInstr &MI = *ED.UseMI;
1839 const MachineInstr &MI = *ED.UseMI;
1856 std::vector<std::pair<MachineInstr*,unsigned>> RegOps;
1859 MachineInstr &UI = *Op.getParent();
1873 for (std::pair<MachineInstr*,unsigned> P : RegOps) {
1914 unsigned HCE::getOperandIndex(const MachineInstr &MI,
1922 const MachineOperand &HCE::getPredicateOp(const MachineInstr &MI) const {
1934 const MachineOperand &HCE::getLoadResultOp(const MachineInstr &MI) const {
1939 const MachineOperand &HCE::getStoredValueOp(const MachineInstr &MI) const {
1965 const MachineInstr *MA = A.UseMI;
1966 const MachineInstr *MB = B.UseMI;
lib/Target/Hexagon/HexagonConstPropagation.cpp 252 void visitPHI(const MachineInstr &PN);
253 void visitNonBranch(const MachineInstr &MI);
254 void visitBranchesFrom(const MachineInstr &BrI);
268 using SetOfInstr = std::set<const MachineInstr *>;
304 virtual bool evaluate(const MachineInstr &MI, const CellMap &Inputs,
308 virtual bool evaluate(const MachineInstr &BrI, const CellMap &Inputs,
311 virtual bool rewrite(MachineInstr &MI, const CellMap &Inputs) = 0;
619 void MachineConstPropagator::visitPHI(const MachineInstr &PN) {
676 void MachineConstPropagator::visitNonBranch(const MachineInstr &MI) {
723 void MachineConstPropagator::visitBranchesFrom(const MachineInstr &BrI) {
732 const MachineInstr &MI = *It;
786 for (MachineInstr &MI : MRI->use_nodbg_instructions(Reg)) {
804 for (const MachineInstr &MI : *MB) {
818 const MachineInstr &MI = *I;
852 MachineInstr *PN = &*I;
985 MachineInstr &MI = *I;
1836 bool evaluate(const MachineInstr &MI, const CellMap &Inputs,
1840 bool evaluate(const MachineInstr &BrI, const CellMap &Inputs,
1843 bool rewrite(MachineInstr &MI, const CellMap &Inputs) override;
1851 void replaceWithNop(MachineInstr &MI);
1855 bool evaluateHexCompare(const MachineInstr &MI, const CellMap &Inputs,
1860 bool evaluateHexLogical(const MachineInstr &MI, const CellMap &Inputs,
1862 bool evaluateHexCondMove(const MachineInstr &MI, const CellMap &Inputs,
1864 bool evaluateHexExt(const MachineInstr &MI, const CellMap &Inputs,
1866 bool evaluateHexVector1(const MachineInstr &MI, const CellMap &Inputs,
1868 bool evaluateHexVector2(const MachineInstr &MI, const CellMap &Inputs,
1872 bool rewriteHexBranch(MachineInstr &BrI, const CellMap &Inputs);
1873 bool rewriteHexConstDefs(MachineInstr &MI, const CellMap &Inputs,
1875 bool rewriteHexConstUses(MachineInstr &MI, const CellMap &Inputs);
1916 bool HexagonConstEvaluator::evaluate(const MachineInstr &MI,
2250 bool HexagonConstEvaluator::evaluate(const MachineInstr &BrI,
2319 bool HexagonConstEvaluator::rewrite(MachineInstr &MI, const CellMap &Inputs) {
2501 void HexagonConstEvaluator::replaceWithNop(MachineInstr &MI) {
2544 bool HexagonConstEvaluator::evaluateHexCompare(const MachineInstr &MI,
2619 bool HexagonConstEvaluator::evaluateHexLogical(const MachineInstr &MI,
2666 bool HexagonConstEvaluator::evaluateHexCondMove(const MachineInstr &MI,
2709 bool HexagonConstEvaluator::evaluateHexExt(const MachineInstr &MI,
2753 bool HexagonConstEvaluator::evaluateHexVector1(const MachineInstr &MI,
2782 bool HexagonConstEvaluator::rewriteHexConstDefs(MachineInstr &MI,
2846 SmallVector<const MachineInstr*,4> NewInstrs;
2897 const MachineInstr *NewMI;
2946 bool HexagonConstEvaluator::rewriteHexConstUses(MachineInstr &MI,
2953 MachineInstr *NewMI = nullptr;
3123 bool HexagonConstEvaluator::rewriteHexBranch(MachineInstr &BrI,
lib/Target/Hexagon/HexagonCopyToCombine.cpp 65 DenseSet<MachineInstr *> PotentiallyNewifiableTFR;
66 SmallVector<MachineInstr *, 8> DbgMItoMove;
91 MachineInstr *findPairable(MachineInstr &I1, bool &DoInsertAtI1,
91 MachineInstr *findPairable(MachineInstr &I1, bool &DoInsertAtI1,
96 void combine(MachineInstr &I1, MachineInstr &I2,
96 void combine(MachineInstr &I1, MachineInstr &I2,
100 bool isSafeToMoveTogether(MachineInstr &I1, MachineInstr &I2,
100 bool isSafeToMoveTogether(MachineInstr &I1, MachineInstr &I2,
127 static bool isCombinableInstType(MachineInstr &MI, const HexagonInstrInfo *TII,
172 template <unsigned N> static bool isGreaterThanNBitTFRI(const MachineInstr &I) {
184 MachineInstr &HighRegInst,
185 MachineInstr &LowRegInst, bool AllowC64) {
237 static void removeKillInfo(MachineInstr &MI, unsigned RegNotKilled) {
248 static bool isUnsafeToMoveAcross(MachineInstr &MI, unsigned UseReg,
263 bool HexagonCopyToCombine::isSafeToMoveTogether(MachineInstr &I1,
264 MachineInstr &I2,
293 MachineInstr *KillingInstr = nullptr;
339 MachineInstr *KillingInstr = nullptr;
343 MachineInstr &MI = *I;
396 DenseMap<unsigned, MachineInstr *> LastDef;
397 for (MachineInstr &MI : BB) {
414 MachineInstr *DefInst = LastDef[Reg];
489 MachineInstr &I1 = *MI++;
509 MachineInstr *I2 = findPairable(I1, DoInsertAtI1, OptForSize);
524 MachineInstr *HexagonCopyToCombine::findPairable(MachineInstr &I1,
524 MachineInstr *HexagonCopyToCombine::findPairable(MachineInstr &I1,
573 void HexagonCopyToCombine::combine(MachineInstr &I1, MachineInstr &I2,
573 void HexagonCopyToCombine::combine(MachineInstr &I1, MachineInstr &I2,
lib/Target/Hexagon/HexagonEarlyIfConv.cpp 185 bool usesUndefVReg(const MachineInstr *MI) const;
191 bool isPredicableStore(const MachineInstr *MI) const;
192 bool isSafeToSpeculate(const MachineInstr *MI) const;
400 bool HexagonEarlyIfConversion::usesUndefVReg(const MachineInstr *MI) const {
407 const MachineInstr *DefI = MRI->getVRegDef(R);
454 for (const MachineInstr &MI : *B) {
479 const MachineInstr *Def1 = MRI->getVRegDef(RA.getReg());
480 const MachineInstr *Def3 = MRI->getVRegDef(RB.getReg());
659 bool HexagonEarlyIfConversion::isPredicableStore(const MachineInstr *MI)
683 bool HexagonEarlyIfConversion::isSafeToSpeculate(const MachineInstr *MI)
723 MachineInstr::mop_iterator MOI = MI->operands_begin();
815 MachineInstr *PN = &*I;
988 MachineInstr *PN = &*I;
lib/Target/Hexagon/HexagonExpandCondsets.cpp 197 bool isCondset(const MachineInstr &MI);
207 void removeInstr(MachineInstr &MI);
212 MachineInstr *genCondTfrFor(MachineOperand &SrcOp,
216 bool split(MachineInstr &MI, std::set<unsigned> &UpdRegs);
218 bool isPredicable(MachineInstr *MI);
219 MachineInstr *getReachingDefForPred(RegisterRef RD,
221 bool canMoveOver(MachineInstr &MI, ReferenceMap &Defs, ReferenceMap &Uses);
222 bool canMoveMemTo(MachineInstr &MI, MachineInstr &ToI, bool IsDown);
222 bool canMoveMemTo(MachineInstr &MI, MachineInstr &ToI, bool IsDown);
223 void predicateAt(const MachineOperand &DefOp, MachineInstr &MI,
230 bool predicate(MachineInstr &TfrI, bool Cond, std::set<unsigned> &UpdRegs);
237 bool coalesceSegments(const SmallVectorImpl<MachineInstr*> &Condsets,
273 bool HexagonExpandCondsets::isCondset(const MachineInstr &MI) {
317 MachineInstr *MI = LIS->getInstructionFromIndex(K);
341 MachineInstr *DefI = LIS->getInstructionFromIndex(NextI->start);
418 MachineInstr *DefI = LIS->getInstructionFromIndex(Seg.start);
472 MachineInstr *DefI = LIS->getInstructionFromIndex(Seg.start);
489 MachineInstr *DefI = LIS->getInstructionFromIndex(Seg.start);
545 void HexagonExpandCondsets::removeInstr(MachineInstr &MI) {
622 MachineInstr *HexagonExpandCondsets::genCondTfrFor(MachineOperand &SrcOp,
626 MachineInstr *MI = SrcOp.getParent();
662 bool HexagonExpandCondsets::split(MachineInstr &MI,
707 MachineInstr *TfrT =
709 MachineInstr *TfrF =
721 bool HexagonExpandCondsets::isPredicable(MachineInstr *MI) {
744 MachineInstr *HexagonExpandCondsets::getReachingDefForPred(RegisterRef RD,
754 MachineInstr *MI = &*I;
793 bool HexagonExpandCondsets::canMoveOver(MachineInstr &MI, ReferenceMap &Defs,
819 bool HexagonExpandCondsets::canMoveMemTo(MachineInstr &TheI, MachineInstr &ToI,
819 bool HexagonExpandCondsets::canMoveMemTo(MachineInstr &TheI, MachineInstr &ToI,
835 MachineInstr *MI = &*I;
854 MachineInstr &MI,
895 MachineInstr *NewI = MB;
912 MachineInstr *MI = &*I;
934 bool HexagonExpandCondsets::predicate(MachineInstr &TfrI, bool Cond,
958 MachineInstr *DefI = getReachingDefForPred(RT, TfrI, PredR, Cond);
982 MachineInstr *MI = &*I;
1189 const SmallVectorImpl<MachineInstr*> &Condsets,
1191 SmallVector<MachineInstr*,16> TwoRegs;
1192 for (MachineInstr *MI : Condsets) {
1200 for (MachineInstr *CI : TwoRegs) {
1225 MachineInstr *RDef = getReachingDefForPred(RS, CI, RP.Reg, true);
1236 MachineInstr *RDef = getReachingDefForPred(RS, CI, RP.Reg, false);
1266 SmallVector<MachineInstr*,16> Condsets;
1268 for (auto &I : B)
1282 for (MachineInstr *MI : Condsets)
1295 for (MachineInstr *MI : Condsets)
lib/Target/Hexagon/HexagonFixupHwLoops.cpp 84 static bool isHardwareLoop(const MachineInstr &MI) {
125 for (const MachineInstr &MI : MBB)
lib/Target/Hexagon/HexagonFrameLowering.cpp 285 const MachineInstr *MI = &I;
354 static MachineInstr *getReturn(MachineBasicBlock &MBB) {
355 for (auto &I : MBB)
534 MachineInstr *RetI = getReturn(B);
611 SmallVector<MachineInstr *, 4> AdjustRegs;
613 for (auto &MI : MBB)
666 MachineInstr *RetI = getReturn(MBB);
725 MachineInstr *NewI = BuildMI(MBB, RetI, dl, HII.get(NewOpc))
817 MachineInstr &RetI = MBB.back();
849 for (MachineInstr &I : B) {
1251 MachineInstr *SaveRegsCall =
1300 MachineInstr *DeallocCall = nullptr;
1345 MachineInstr &MI = *I;
1388 if (const MachineInstr *AI = getAlignaInstr(MF))
1571 MachineInstr *MI = &*It;
1592 MachineInstr *MI = &*It;
1625 MachineInstr *MI = &*It;
1656 MachineInstr *MI = &*It;
1693 MachineInstr *MI = &*It;
1731 MachineInstr *MI = &*It;
1791 MachineInstr *MI = &*It;
1831 MachineInstr *MI = &*It;
1860 MachineInstr *MI = &*It;
1892 MachineInstr *MI = &*I;
2063 for (auto &In : B) {
2247 MachineInstr &SI = *IM.getInstr(Range.start());
2248 MachineInstr &EI = *IM.getInstr(Range.end());
2272 MachineInstr *CopyIn = nullptr;
2297 MachineInstr &MI = *It;
2304 MachineInstr *CopyOut = nullptr;
2330 void HexagonFrameLowering::expandAlloca(MachineInstr *AI,
2398 const MachineInstr *HexagonFrameLowering::getAlignaInstr(
2409 void HexagonFrameLowering::addCalleeSaveRegistersAsImpOperand(MachineInstr *MI,
2502 for (const MachineInstr &MI : B) {
lib/Target/Hexagon/HexagonFrameLowering.h 103 const MachineInstr *getAlignaInstr(const MachineFunction &MF) const;
110 void expandAlloca(MachineInstr *AI, const HexagonInstrInfo &TII,
168 void addCalleeSaveRegistersAsImpOperand(MachineInstr *MI, const CSIVect &CSI,
lib/Target/Hexagon/HexagonGenInsert.cpp 533 void getInstrDefs(const MachineInstr *MI, RegisterSet &Defs) const;
534 void getInstrUses(const MachineInstr *MI, RegisterSet &Uses) const;
605 const MachineInstr *MI = &*I;
721 void HexagonGenInsert::getInstrDefs(const MachineInstr *MI,
734 void HexagonGenInsert::getInstrUses(const MachineInstr *MI,
944 MachineInstr *MI = &*I;
1020 const MachineInstr *DefI = MRI->getVRegDef(R);
1072 MachineInstr *DefVR = MRI->getVRegDef(VR);
1153 const MachineInstr *DefV = MRI->getVRegDef(VR);
1157 const MachineInstr *DefS = MRI->getVRegDef(SR);
1158 const MachineInstr *DefI = MRI->getVRegDef(IR);
1301 using InstrSet = SmallSet<const MachineInstr *, 16>;
1346 const MachineInstr *DefI = MRI->getVRegDef(I->first);
1410 MachineInstr *MI = MRI->getVRegDef(I->first);
1444 MachineInstr *DefI = MRI->getVRegDef(I->first);
1459 std::vector<MachineInstr*> Instrs;
1464 MachineInstr *MI = *I;
lib/Target/Hexagon/HexagonGenMux.cpp 110 MachineInstr *Def1, *Def2;
119 using InstrIndexMap = DenseMap<MachineInstr *, unsigned>;
129 void getDefsUses(const MachineInstr *MI, BitVector &Defs,
158 void HexagonGenMux::getDefsUses(const MachineInstr *MI, BitVector &Defs,
187 MachineInstr *MI = &*I;
237 MachineInstr *MI = &*I;
304 MachineInstr &Def1 = *It1, &Def2 = *It2;
lib/Target/Hexagon/HexagonGenPredicate.cpp 102 using VectOfInst = SetVector<MachineInstr *>;
117 bool isConvertibleToPredForm(const MachineInstr *MI);
121 bool convertToPredForm(MachineInstr *MI);
186 bool HexagonGenPredicate::isConvertibleToPredForm(const MachineInstr *MI) {
209 MachineInstr *MI = &*I;
232 MachineInstr *DefI = MRI->getVRegDef(Reg.R);
238 MachineInstr *UseI = I->getParent();
254 MachineInstr *DefI = MRI->getVRegDef(Reg.R);
328 const MachineInstr *DefI = MRI->getVRegDef(PR.R);
367 bool HexagonGenPredicate::convertToPredForm(MachineInstr *MI) {
469 for (MachineInstr &MI : MBB) {
520 MachineInstr *MI = *I;
lib/Target/Hexagon/HexagonHardwareLoops.cpp 126 using LoopFeederMap = std::map<unsigned, MachineInstr *>;
183 int64_t &IVBump, MachineInstr *&IVOp) const;
195 SmallVectorImpl<MachineInstr *> &OldInsts);
210 bool isInvalidLoopOperation(const MachineInstr *MI,
222 bool isDead(const MachineInstr *MI,
223 SmallVectorImpl<MachineInstr *> &DeadPhis) const;
226 void removeIfDead(MachineInstr *MI);
232 bool orderBumpCompare(MachineInstr *BumpI, MachineInstr *CmpI);
232 bool orderBumpCompare(MachineInstr *BumpI, MachineInstr *CmpI);
237 bool isLoopFeeder(MachineLoop *L, MachineBasicBlock *A, MachineInstr *MI,
243 bool phiMayWrapOrUnderflow(MachineInstr *Phi, const MachineOperand *EndVal,
404 MachineInstr *&IVOp
429 MachineInstr *Phi = &*I;
439 MachineInstr *DI = MRI->getVRegDef(PhiOpReg);
465 MachineInstr *PredI = MRI->getVRegDef(PredR);
566 SmallVectorImpl<MachineInstr *> &OldInsts) {
596 MachineInstr *IVOp;
604 MachineInstr *IV_Phi = MRI->getVRegDef(IVReg);
650 MachineInstr *CondI = MRI->getVRegDef(PredReg);
737 const MachineInstr *StartValInstr = MRI->getVRegDef(Start->getReg());
743 const MachineInstr *EndValInstr = MRI->getVRegDef(End->getReg());
928 const MachineInstr *EndValInstr = MRI->getVRegDef(End->getReg());
988 bool HexagonHardwareLoops::isInvalidLoopOperation(const MachineInstr *MI,
1018 const MachineInstr *MI = &*MII;
1033 bool HexagonHardwareLoops::isDead(const MachineInstr *MI,
1034 SmallVectorImpl<MachineInstr *> &DeadPhis) const {
1055 MachineInstr *OnePhi = I->getParent();
1067 MachineInstr *UseMI = Use.getParent();
1081 void HexagonHardwareLoops::removeIfDead(MachineInstr *MI) {
1084 SmallVector<MachineInstr*, 1> DeadPhis;
1101 MachineInstr *UseMI = I->getParent();
1202 SmallVector<MachineInstr*, 2> OldInsts;
1212 MachineInstr *TCDef = MRI->getVRegDef(TripCount->getReg());
1320 bool HexagonHardwareLoops::orderBumpCompare(MachineInstr *BumpI,
1321 MachineInstr *CmpI) {
1340 MachineInstr *In = &*I;
1365 MachineInstr *MI,
1376 MachineInstr *Def = MRI->getVRegDef(MO->getReg());
1387 MachineInstr *Phi, const MachineOperand *EndVal, MachineBasicBlock *MBB,
1437 MachineInstr *Def = MRI->getVRegDef(Reg);
1456 MachineInstr *MI = &*I;
1514 MachineInstr *DI = MRI->getVRegDef(R);
1586 MachineInstr *DI = MRI->getVRegDef(R);
1630 MachineInstr *Phi = &*I;
1638 MachineInstr *DI = MRI->getVRegDef(PhiReg);
1706 MachineInstr *PredDef = MRI->getVRegDef(P);
1762 MachineInstr *IndI = nullptr;
1763 MachineInstr *nonIndI = nullptr;
1827 MachineInstr *BumpI = MRI->getVRegDef(I->first);
1900 MachineInstr *PN = &*I;
1903 MachineInstr *NewPN = MF->CreateMachineInstr(PD, DL);
1948 MachineInstr *PN = &*I;
lib/Target/Hexagon/HexagonHazardRecognizer.cpp 40 MachineInstr *MI = SU->getInstr();
56 MachineInstr *NewMI =
109 MachineInstr *MI = SU->getInstr();
127 MachineInstr *NewMI =
lib/Target/Hexagon/HexagonInstrInfo.cpp 146 MachineInstr *HexagonInstrInfo::findLoopInstr(MachineBasicBlock *BB,
176 if (MachineInstr *Loop = findLoopInstr(PB, EndLoopOp, TargetBB, Visited))
185 static inline void parseOperands(const MachineInstr &MI,
239 unsigned HexagonInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
287 unsigned HexagonInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
338 const MachineInstr &MI,
356 const MachineInstr &MI,
443 MachineInstr *LastInst = &*I;
444 MachineInstr *SecondLastInst = nullptr;
619 MachineInstr *Loop = findLoopInstr(TBB, EndLoopOp, Cond[1].getMBB(),
661 MachineInstr *Loop = findLoopInstr(TBB, EndLoopOp, Cond[1].getMBB(),
679 MachineInstr *Loop, *EndLoop;
687 HexagonPipelinerLoopInfo(MachineInstr *Loop, MachineInstr *EndLoop)
687 HexagonPipelinerLoopInfo(MachineInstr *Loop, MachineInstr *EndLoop)
700 bool shouldIgnoreForPipelining(const MachineInstr *MI) const override {
711 MachineInstr *NewCmp = BuildMI(&MBB, DL,
761 MachineInstr *LoopInst = findLoopInstr(
1007 static void getLiveRegsAt(LivePhysRegs &Regs, const MachineInstr &MI) {
1021 bool HexagonInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
1098 MachineInstr *MI1New = BuildMI(MBB, MI, DL, get(NewOpc))
1120 MachineInstr *MI1New = BuildMI(MBB, MI, DL, get(NewOpc),
1543 bool HexagonInstrInfo::isPostIncrement(const MachineInstr &MI) const {
1555 bool HexagonInstrInfo::isPredicated(const MachineInstr &MI) const {
1561 MachineInstr &MI, ArrayRef<MachineOperand> Cond) const {
1617 bool HexagonInstrInfo::DefinesPredicate(MachineInstr &MI,
1644 bool HexagonInstrInfo::isPredicable(const MachineInstr &MI) const {
1680 bool HexagonInstrInfo::isSchedulingBoundary(const MachineInstr &MI,
1763 bool HexagonInstrInfo::analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
1853 const MachineInstr &MI,
1869 const MachineInstr &MIa, const MachineInstr &MIb) const {
1869 const MachineInstr &MIa, const MachineInstr &MIb) const {
1926 bool HexagonInstrInfo::getIncrementValue(const MachineInstr &MI,
2000 bool HexagonInstrInfo::isAbsoluteSet(const MachineInstr &MI) const {
2004 bool HexagonInstrInfo::isAccumulator(const MachineInstr &MI) const {
2009 bool HexagonInstrInfo::isBaseImmOffset(const MachineInstr &MI) const {
2013 bool HexagonInstrInfo::isComplex(const MachineInstr &MI) const {
2022 bool HexagonInstrInfo::isCompoundBranchInstr(const MachineInstr &MI) const {
2028 bool HexagonInstrInfo::isConstExtended(const MachineInstr &MI) const {
2071 bool HexagonInstrInfo::isDeallocRet(const MachineInstr &MI) const {
2086 bool HexagonInstrInfo::isDependent(const MachineInstr &ProdMI,
2087 const MachineInstr &ConsMI) const {
2121 bool HexagonInstrInfo::isDotCurInst(const MachineInstr &MI) const {
2132 bool HexagonInstrInfo::isDotNewInst(const MachineInstr &MI) const {
2140 bool HexagonInstrInfo::isDuplexPair(const MachineInstr &MIa,
2141 const MachineInstr &MIb) const {
2147 bool HexagonInstrInfo::isEarlySourceInstr(const MachineInstr &MI) const {
2175 bool HexagonInstrInfo::isExtendable(const MachineInstr &MI) const {
2197 bool HexagonInstrInfo::isExtended(const MachineInstr &MI) const {
2210 bool HexagonInstrInfo::isFloat(const MachineInstr &MI) const {
2217 bool HexagonInstrInfo::isHVXMemWithAIndirect(const MachineInstr &I,
2218 const MachineInstr &J) const {
2226 bool HexagonInstrInfo::isIndirectCall(const MachineInstr &MI) const {
2237 bool HexagonInstrInfo::isIndirectL4Return(const MachineInstr &MI) const {
2251 bool HexagonInstrInfo::isJumpR(const MachineInstr &MI) const {
2269 bool HexagonInstrInfo::isJumpWithinBranchRange(const MachineInstr &MI,
2311 bool HexagonInstrInfo::isLateInstrFeedsEarlyInstr(const MachineInstr &LRMI,
2312 const MachineInstr &ESMI) const {
2329 bool HexagonInstrInfo::isLateResultInstr(const MachineInstr &MI) const {
2348 bool HexagonInstrInfo::isLateSourceInstr(const MachineInstr &MI) const {
2354 bool HexagonInstrInfo::isLoopN(const MachineInstr &MI) const {
2366 bool HexagonInstrInfo::isMemOp(const MachineInstr &MI) const {
2398 bool HexagonInstrInfo::isNewValue(const MachineInstr &MI) const {
2408 bool HexagonInstrInfo::isNewValueInst(const MachineInstr &MI) const {
2412 bool HexagonInstrInfo::isNewValueJump(const MachineInstr &MI) const {
2420 bool HexagonInstrInfo::isNewValueStore(const MachineInstr &MI) const {
2431 bool HexagonInstrInfo::isOperandExtended(const MachineInstr &MI,
2438 bool HexagonInstrInfo::isPredicatedNew(const MachineInstr &MI) const {
2450 bool HexagonInstrInfo::isPredicatedTrue(const MachineInstr &MI) const {
2481 bool HexagonInstrInfo::isSaveCalleeSavedRegsCall(const MachineInstr &MI) const {
2488 bool HexagonInstrInfo::isSignExtendingLoad(const MachineInstr &MI) const {
2566 bool HexagonInstrInfo::isSolo(const MachineInstr &MI) const {
2571 bool HexagonInstrInfo::isSpillPredRegOp(const MachineInstr &MI) const {
2581 bool HexagonInstrInfo::isTailCall(const MachineInstr &MI) const {
2592 bool HexagonInstrInfo::isTC1(const MachineInstr &MI) const {
2597 bool HexagonInstrInfo::isTC2(const MachineInstr &MI) const {
2602 bool HexagonInstrInfo::isTC2Early(const MachineInstr &MI) const {
2607 bool HexagonInstrInfo::isTC4x(const MachineInstr &MI) const {
2613 bool HexagonInstrInfo::isToBeScheduledASAP(const MachineInstr &MI1,
2614 const MachineInstr &MI2) const {
2631 bool HexagonInstrInfo::isHVXVec(const MachineInstr &MI) const {
2825 bool HexagonInstrInfo::isVecAcc(const MachineInstr &MI) const {
2829 bool HexagonInstrInfo::isVecALU(const MachineInstr &MI) const {
2837 bool HexagonInstrInfo::isVecUsableNextPacket(const MachineInstr &ProdMI,
2838 const MachineInstr &ConsMI) const {
2851 bool HexagonInstrInfo::isZeroExtendingLoad(const MachineInstr &MI) const {
2930 bool HexagonInstrInfo::addLatencyToSchedule(const MachineInstr &MI1,
2931 const MachineInstr &MI2) const {
2940 const MachineInstr &LdSt, const MachineOperand *&BaseOp, int64_t &Offset,
2951 bool HexagonInstrInfo::canExecuteInBundle(const MachineInstr &First,
2952 const MachineInstr &Second) const {
2976 bool HexagonInstrInfo::doesNotReturn(const MachineInstr &CallMI) const {
2990 bool HexagonInstrInfo::hasNonExtEquivalent(const MachineInstr &MI) const {
3025 bool HexagonInstrInfo::hasPseudoInstrPair(const MachineInstr &MI) const {
3042 bool HexagonInstrInfo::mayBeCurLoad(const MachineInstr &MI) const {
3049 bool HexagonInstrInfo::mayBeNewStore(const MachineInstr &MI) const {
3057 bool HexagonInstrInfo::producesStall(const MachineInstr &ProdMI,
3058 const MachineInstr &ConsMI) const {
3075 bool HexagonInstrInfo::producesStall(const MachineInstr &MI,
3088 const MachineInstr &J = *MII;
3095 bool HexagonInstrInfo::predCanBeUsedAsDotNew(const MachineInstr &MI,
3147 unsigned HexagonInstrInfo::getAddrMode(const MachineInstr &MI) const {
3156 MachineOperand *HexagonInstrInfo::getBaseAndOffset(const MachineInstr &MI,
3189 bool HexagonInstrInfo::getBaseAndOffsetPosition(const MachineInstr &MI,
3226 SmallVector<MachineInstr*, 2> HexagonInstrInfo::getBranchingInstrs(
3228 SmallVector<MachineInstr*, 2> Jumpers;
3264 MachineInstr *LastInst = &*I;
3266 MachineInstr *SecondLastInst = nullptr;
3284 unsigned HexagonInstrInfo::getCExtOpNum(const MachineInstr &MI) const {
3292 const MachineInstr &MI) const {
3379 unsigned HexagonInstrInfo::getCompoundOpcode(const MachineInstr &GA,
3380 const MachineInstr &GB) const {
3417 int HexagonInstrInfo::getDotCurOp(const MachineInstr &MI) const {
3433 int HexagonInstrInfo::getNonDotCurOp(const MachineInstr &MI) const {
3530 int HexagonInstrInfo::getDotNewOp(const MachineInstr &MI) const {
3571 int HexagonInstrInfo::getDotNewPredJumpOp(const MachineInstr &MI,
3602 for (const MachineInstr &I : B) {
3657 int HexagonInstrInfo::getDotNewPredOp(const MachineInstr &MI,
3672 int HexagonInstrInfo::getDotOldOp(const MachineInstr &MI) const {
3724 const MachineInstr &MI) const {
4069 short HexagonInstrInfo::getEquivalentHWInstr(const MachineInstr &MI) const {
4074 const InstrItineraryData *ItinData, const MachineInstr &MI) const {
4094 const MachineInstr &DefMI,
4096 const MachineInstr &UseMI,
4159 int HexagonInstrInfo::getMaxValue(const MachineInstr &MI) const {
4173 bool HexagonInstrInfo::isAddrModeWithOffset(const MachineInstr &MI) const {
4201 unsigned HexagonInstrInfo::getMemAccessSize(const MachineInstr &MI) const {
4221 int HexagonInstrInfo::getMinValue(const MachineInstr &MI) const {
4235 short HexagonInstrInfo::getNonExtOpcode(const MachineInstr &MI) const {
4279 short HexagonInstrInfo::getPseudoInstrPair(const MachineInstr &MI) const {
4283 short HexagonInstrInfo::getRegForm(const MachineInstr &MI) const {
4291 unsigned HexagonInstrInfo::getSize(const MachineInstr &MI) const {
4325 uint64_t HexagonInstrInfo::getType(const MachineInstr &MI) const {
4330 unsigned HexagonInstrInfo::getUnits(const MachineInstr &MI) const {
4352 void HexagonInstrInfo::immediateExtend(MachineInstr &MI) const {
4366 MachineInstr &MI, MachineBasicBlock *NewTarget) const {
4392 MachineInstr *NewMI;
4408 bool HexagonInstrInfo::reversePredSense(MachineInstr &MI) const {
4441 bool HexagonInstrInfo::getBundleNoShuf(const MachineInstr &MIB) const {
lib/Target/Hexagon/HexagonInstrInfo.h 57 unsigned isLoadFromStackSlot(const MachineInstr &MI,
65 unsigned isStoreToStackSlot(const MachineInstr &MI,
72 const MachineInstr &MI,
79 const MachineInstr &MI,
204 bool expandPostRAPseudo(MachineInstr &MI) const override;
207 bool getMemOperandWithOffset(const MachineInstr &LdSt,
222 bool isPredicated(const MachineInstr &MI) const override;
225 bool isPostIncrement(const MachineInstr &MI) const override;
229 bool PredicateInstruction(MachineInstr &MI,
240 bool DefinesPredicate(MachineInstr &MI,
246 bool isPredicable(const MachineInstr &MI) const override;
250 bool isSchedulingBoundary(const MachineInstr &MI,
271 bool analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
278 const MachineInstr &MI,
290 areMemAccessesTriviallyDisjoint(const MachineInstr &MIa,
291 const MachineInstr &MIb) const override;
295 bool getBaseAndOffsetPosition(const MachineInstr &MI, unsigned &BasePos,
299 bool getIncrementValue(const MachineInstr &MI, int &Value) const override;
310 const MachineInstr &DefMI, unsigned DefIdx,
311 const MachineInstr &UseMI,
335 bool isTailCall(const MachineInstr &MI) const override;
340 MachineInstr *findLoopInstr(MachineBasicBlock *BB, unsigned EndLoopOp,
344 bool isBaseImmOffset(const MachineInstr &MI) const;
345 bool isAbsoluteSet(const MachineInstr &MI) const;
346 bool isAccumulator(const MachineInstr &MI) const;
347 bool isAddrModeWithOffset(const MachineInstr &MI) const;
348 bool isComplex(const MachineInstr &MI) const;
349 bool isCompoundBranchInstr(const MachineInstr &MI) const;
350 bool isConstExtended(const MachineInstr &MI) const;
351 bool isDeallocRet(const MachineInstr &MI) const;
352 bool isDependent(const MachineInstr &ProdMI,
353 const MachineInstr &ConsMI) const;
354 bool isDotCurInst(const MachineInstr &MI) const;
355 bool isDotNewInst(const MachineInstr &MI) const;
356 bool isDuplexPair(const MachineInstr &MIa, const MachineInstr &MIb) const;
356 bool isDuplexPair(const MachineInstr &MIa, const MachineInstr &MIb) const;
357 bool isEarlySourceInstr(const MachineInstr &MI) const;
360 bool isExtendable(const MachineInstr &MI) const;
361 bool isExtended(const MachineInstr &MI) const;
362 bool isFloat(const MachineInstr &MI) const;
363 bool isHVXMemWithAIndirect(const MachineInstr &I,
364 const MachineInstr &J) const;
365 bool isIndirectCall(const MachineInstr &MI) const;
366 bool isIndirectL4Return(const MachineInstr &MI) const;
367 bool isJumpR(const MachineInstr &MI) const;
368 bool isJumpWithinBranchRange(const MachineInstr &MI, unsigned offset) const;
369 bool isLateInstrFeedsEarlyInstr(const MachineInstr &LRMI,
370 const MachineInstr &ESMI) const;
371 bool isLateResultInstr(const MachineInstr &MI) const;
372 bool isLateSourceInstr(const MachineInstr &MI) const;
373 bool isLoopN(const MachineInstr &MI) const;
374 bool isMemOp(const MachineInstr &MI) const;
375 bool isNewValue(const MachineInstr &MI) const;
377 bool isNewValueInst(const MachineInstr &MI) const;
378 bool isNewValueJump(const MachineInstr &MI) const;
380 bool isNewValueStore(const MachineInstr &MI) const;
382 bool isOperandExtended(const MachineInstr &MI, unsigned OperandNum) const;
383 bool isPredicatedNew(const MachineInstr &MI) const;
385 bool isPredicatedTrue(const MachineInstr &MI) const;
390 bool isSaveCalleeSavedRegsCall(const MachineInstr &MI) const;
391 bool isSignExtendingLoad(const MachineInstr &MI) const;
392 bool isSolo(const MachineInstr &MI) const;
393 bool isSpillPredRegOp(const MachineInstr &MI) const;
394 bool isTC1(const MachineInstr &MI) const;
395 bool isTC2(const MachineInstr &MI) const;
396 bool isTC2Early(const MachineInstr &MI) const;
397 bool isTC4x(const MachineInstr &MI) const;
398 bool isToBeScheduledASAP(const MachineInstr &MI1,
399 const MachineInstr &MI2) const;
400 bool isHVXVec(const MachineInstr &MI) const;
404 bool isVecAcc(const MachineInstr &MI) const;
405 bool isVecALU(const MachineInstr &MI) const;
406 bool isVecUsableNextPacket(const MachineInstr &ProdMI,
407 const MachineInstr &ConsMI) const;
408 bool isZeroExtendingLoad(const MachineInstr &MI) const;
410 bool addLatencyToSchedule(const MachineInstr &MI1,
411 const MachineInstr &MI2) const;
412 bool canExecuteInBundle(const MachineInstr &First,
413 const MachineInstr &Second) const;
414 bool doesNotReturn(const MachineInstr &CallMI) const;
416 bool hasNonExtEquivalent(const MachineInstr &MI) const;
417 bool hasPseudoInstrPair(const MachineInstr &MI) const;
419 bool mayBeCurLoad(const MachineInstr &MI) const;
420 bool mayBeNewStore(const MachineInstr &MI) const;
421 bool producesStall(const MachineInstr &ProdMI,
422 const MachineInstr &ConsMI) const;
423 bool producesStall(const MachineInstr &MI,
425 bool predCanBeUsedAsDotNew(const MachineInstr &MI, unsigned PredReg) const;
429 unsigned getAddrMode(const MachineInstr &MI) const;
430 MachineOperand *getBaseAndOffset(const MachineInstr &MI, int64_t &Offset,
432 SmallVector<MachineInstr*,2> getBranchingInstrs(MachineBasicBlock& MBB) const;
433 unsigned getCExtOpNum(const MachineInstr &MI) const;
435 getCompoundCandidateGroup(const MachineInstr &MI) const;
436 unsigned getCompoundOpcode(const MachineInstr &GA,
437 const MachineInstr &GB) const;
439 int getDotCurOp(const MachineInstr &MI) const;
440 int getNonDotCurOp(const MachineInstr &MI) const;
441 int getDotNewOp(const MachineInstr &MI) const;
442 int getDotNewPredJumpOp(const MachineInstr &MI,
444 int getDotNewPredOp(const MachineInstr &MI,
446 int getDotOldOp(const MachineInstr &MI) const;
447 HexagonII::SubInstructionGroup getDuplexCandidateGroup(const MachineInstr &MI)
449 short getEquivalentHWInstr(const MachineInstr &MI) const;
451 const MachineInstr &MI) const;
454 int getMaxValue(const MachineInstr &MI) const;
455 unsigned getMemAccessSize(const MachineInstr &MI) const;
456 int getMinValue(const MachineInstr &MI) const;
457 short getNonExtOpcode(const MachineInstr &MI) const;
460 short getPseudoInstrPair(const MachineInstr &MI) const;
461 short getRegForm(const MachineInstr &MI) const;
462 unsigned getSize(const MachineInstr &MI) const;
463 uint64_t getType(const MachineInstr &MI) const;
464 unsigned getUnits(const MachineInstr &MI) const;
473 void immediateExtend(MachineInstr &MI) const;
474 bool invertAndChangeJumpTarget(MachineInstr &MI,
477 bool reversePredSense(MachineInstr &MI) const;
482 bool getBundleNoShuf(const MachineInstr &MIB) const;
493 short changeAddrMode_abs_io(const MachineInstr &MI) const {
496 short changeAddrMode_io_abs(const MachineInstr &MI) const {
499 short changeAddrMode_io_rr(const MachineInstr &MI) const {
502 short changeAddrMode_rr_io(const MachineInstr &MI) const {
505 short changeAddrMode_rr_ur(const MachineInstr &MI) const {
508 short changeAddrMode_ur_rr(const MachineInstr &MI) const {
lib/Target/Hexagon/HexagonMCInstLower.cpp 36 void HexagonLowerToMC(const MCInstrInfo &MCII, const MachineInstr *MI,
97 void llvm::HexagonLowerToMC(const MCInstrInfo &MCII, const MachineInstr *MI,
lib/Target/Hexagon/HexagonMachineFunctionInfo.h 35 std::map<const MachineInstr*, unsigned> PacketInfo;
49 void setStartPacket(MachineInstr* MI) {
52 void setEndPacket(MachineInstr* MI) {
55 bool isStartPacket(const MachineInstr* MI) const {
59 bool isEndPacket(const MachineInstr* MI) const {
lib/Target/Hexagon/HexagonNewValueJump.cpp 101 bool isNewValueJumpCandidate(const MachineInstr &MI) const;
245 MachineInstr &MI = *II;
294 MachineInstr *def = MRI.getVRegDef(cmpOp2);
334 static unsigned getNewValueJumpOpcode(MachineInstr *MI, int reg,
428 const MachineInstr &MI) const {
488 MachineInstr *cmpInstr = nullptr, *jmpInstr = nullptr;
496 MachineInstr &MI = *--MII;
681 MachineInstr *NewMI;
lib/Target/Hexagon/HexagonOptAddrMode.cpp 78 using MISetType = DenseSet<MachineInstr *>;
79 using InstrEvalMap = DenseMap<MachineInstr *, bool>;
91 bool xformUseMI(MachineInstr *TfrMI, MachineInstr *UseMI,
91 bool xformUseMI(MachineInstr *TfrMI, MachineInstr *UseMI,
93 bool processAddUses(NodeAddr<StmtNode *> AddSN, MachineInstr *AddMI,
95 bool updateAddUses(MachineInstr *AddMI, MachineInstr *UseMI);
95 bool updateAddUses(MachineInstr *AddMI, MachineInstr *UseMI);
98 bool hasRepForm(MachineInstr &MI, unsigned TfrDefR);
99 bool canRemoveAddasl(NodeAddr<StmtNode *> AddAslSN, MachineInstr &MI,
101 bool isSafeToExtLR(NodeAddr<StmtNode *> SN, MachineInstr *MI,
105 short getBaseWithLongOffset(const MachineInstr &MI) const;
106 bool changeStore(MachineInstr *OldMI, MachineOperand ImmOp,
108 bool changeLoad(MachineInstr *OldMI, MachineOperand ImmOp, unsigned ImmOpNum);
109 bool changeAddAsl(NodeAddr<UseNode *> AddAslUN, MachineInstr *AddAslMI,
111 bool isValidOffset(MachineInstr *MI, int Offset);
125 bool HexagonOptAddrMode::hasRepForm(MachineInstr &MI, unsigned TfrDefR) {
158 MachineInstr &MI,
186 MachineInstr &UseMI = *NodeAddr<StmtNode *>(IA).Addr->getCode();
284 MachineInstr *MI, unsigned LRExtReg,
313 MachineInstr *UseMI = NodeAddr<StmtNode *>(IA).Addr->getCode();
323 bool HexagonOptAddrMode::isValidOffset(MachineInstr *MI, int Offset) {
348 MachineInstr *AddMI,
355 MachineInstr *MI = SN.Addr->getCode();
398 MachineInstr *UseMI = OwnerN.Addr->getCode();
410 bool HexagonOptAddrMode::updateAddUses(MachineInstr *AddMI,
411 MachineInstr *UseMI) {
442 MachineInstr &MI = *SN.Addr->getCode();
482 bool HexagonOptAddrMode::changeLoad(MachineInstr *OldMI, MachineOperand ImmOp,
543 bool HexagonOptAddrMode::changeStore(MachineInstr *OldMI, MachineOperand ImmOp,
594 short HexagonOptAddrMode::getBaseWithLongOffset(const MachineInstr &MI) const {
603 MachineInstr *AddAslMI,
621 MachineInstr *UseMI = UseIA.Addr->getCode();
667 bool HexagonOptAddrMode::xformUseMI(MachineInstr *TfrMI, MachineInstr *UseMI,
667 bool HexagonOptAddrMode::xformUseMI(MachineInstr *TfrMI, MachineInstr *UseMI,
694 MachineInstr *MI = SA.Addr->getCode();
748 MachineInstr *UseMI = OwnerN.Addr->getCode();
lib/Target/Hexagon/HexagonPeephole.cpp 132 MachineInstr &MI = *I;
lib/Target/Hexagon/HexagonRDFOpt.cpp 87 bool interpretAsCopy(const MachineInstr *MI, EqualityMap &EM) override;
111 bool HexagonCP::interpretAsCopy(const MachineInstr *MI, EqualityMap &EM) {
189 MachineInstr *MI = NodeAddr<StmtNode*>(IA).Addr->getCode();
218 MachineInstr &MI = *NodeAddr<StmtNode*>(IA).Addr->getCode();
lib/Target/Hexagon/HexagonRegisterInfo.cpp 187 MachineInstr &MI = *II;
235 bool HexagonRegisterInfo::shouldCoalesce(MachineInstr *MI,
258 if (const MachineInstr *MI = Indexes.getInstructionFromIndex(I))
lib/Target/Hexagon/HexagonRegisterInfo.h 63 bool shouldCoalesce(MachineInstr *MI, const TargetRegisterClass *SrcRC,
lib/Target/Hexagon/HexagonSplitConst32AndConst64.cpp 74 MachineInstr &MI = *I;
lib/Target/Hexagon/HexagonSplitDouble.cpp 96 bool isVolatileInstr(const MachineInstr *MI) const;
97 bool isFixedInstr(const MachineInstr *MI) const;
99 int32_t profit(const MachineInstr *MI) const;
106 void createHalfInstr(unsigned Opc, MachineInstr *MI,
108 void splitMemRef(MachineInstr *MI, const UUPairMap &PairMap);
109 void splitImmediate(MachineInstr *MI, const UUPairMap &PairMap);
110 void splitCombine(MachineInstr *MI, const UUPairMap &PairMap);
111 void splitExt(MachineInstr *MI, const UUPairMap &PairMap);
112 void splitShift(MachineInstr *MI, const UUPairMap &PairMap);
113 void splitAslOr(MachineInstr *MI, const UUPairMap &PairMap);
114 bool splitInstr(MachineInstr *MI, const UUPairMap &PairMap);
115 void replaceSubregUses(MachineInstr *MI, const UUPairMap &PairMap);
116 void collapseRegPairs(MachineInstr *MI, const UUPairMap &PairMap);
154 bool HexagonSplitDoubleRegs::isVolatileInstr(const MachineInstr *MI) const {
161 bool HexagonSplitDoubleRegs::isFixedInstr(const MachineInstr *MI) const {
235 MachineInstr *DefI = MRI->getVRegDef(R);
253 MachineInstr *UseI = Op.getParent();
315 int32_t HexagonSplitDoubleRegs::profit(const MachineInstr *MI) const {
405 const MachineInstr *DefI = MRI->getVRegDef(Reg);
427 MachineInstr *DefI = MRI->getVRegDef(DR);
438 MachineInstr *UseI = U->getParent();
508 const MachineInstr *CmpI = MRI->getVRegDef(PR);
548 const MachineInstr *UseI = I->getParent();
594 void HexagonSplitDoubleRegs::createHalfInstr(unsigned Opc, MachineInstr *MI,
598 MachineInstr *NewI = BuildMI(B, MI, DL, TII->get(Opc));
628 void HexagonSplitDoubleRegs::splitMemRef(MachineInstr *MI,
634 MachineInstr *LowI, *HighI;
700 void HexagonSplitDoubleRegs::splitImmediate(MachineInstr *MI,
727 void HexagonSplitDoubleRegs::splitCombine(MachineInstr *MI,
757 void HexagonSplitDoubleRegs::splitExt(MachineInstr *MI,
777 void HexagonSplitDoubleRegs::splitShift(MachineInstr *MI,
901 void HexagonSplitDoubleRegs::splitAslOr(MachineInstr *MI,
994 bool HexagonSplitDoubleRegs::splitInstr(MachineInstr *MI,
1077 void HexagonSplitDoubleRegs::replaceSubregUses(MachineInstr *MI,
1099 void HexagonSplitDoubleRegs::collapseRegPairs(MachineInstr *MI,
1127 using MISet = std::set<MachineInstr *>;
1139 MachineInstr *DefI = MRI->getVRegDef(DR);
lib/Target/Hexagon/HexagonStoreWidening.cpp 87 static bool handledStoreType(const MachineInstr *MI);
92 using InstrGroup = std::vector<MachineInstr *>;
96 bool instrAliased(InstrGroup &Stores, const MachineInstr *MI);
97 void createStoreGroup(MachineInstr *BaseStore, InstrGroup::iterator Begin,
107 bool storesAreAdjacent(const MachineInstr *S1, const MachineInstr *S2);
107 bool storesAreAdjacent(const MachineInstr *S1, const MachineInstr *S2);
121 static unsigned getBaseAddressRegister(const MachineInstr *MI) {
127 static int64_t getStoreOffset(const MachineInstr *MI) {
145 static const MachineMemOperand &getStoreTarget(const MachineInstr *MI) {
152 inline bool HexagonStoreWidening::handledStoreType(const MachineInstr *MI) {
192 const MachineInstr *MI) {
215 for (auto &I : MBB)
222 MachineInstr *MI = *I;
238 void HexagonStoreWidening::createStoreGroup(MachineInstr *BaseStore,
247 MachineInstr *MI = *I;
283 bool HexagonStoreWidening::storesAreAdjacent(const MachineInstr *S1,
284 const MachineInstr *S2) {
313 MachineInstr *FirstMI = *Begin;
340 MachineInstr *S1 = FirstMI;
353 MachineInstr *S2 = *I;
403 MachineInstr *MI = *I;
415 MachineInstr *FirstSt = OG.front();
433 MachineInstr *StI =
445 MachineInstr *TfrI = BuildMI(*MF, DL, TfrD, VReg)
456 MachineInstr *StI =
493 SmallPtrSet<MachineInstr*, 4> InstrSet;
498 for (auto &I : *MBB) {
lib/Target/Hexagon/HexagonSubtarget.cpp 146 MachineInstr &MI1 = *SU.getInstr();
155 MachineInstr &MI2 = *SI.getSUnit()->getInstr();
231 const MachineInstr *MI = DAG->SUnits[su].getInstr();
273 MachineInstr &L0 = *S0.getInstr();
286 MachineInstr &L1 = *S1.getInstr();
321 MachineInstr *SrcInst = Src->getInstr();
322 MachineInstr *DstInst = Dst->getInstr();
348 MachineInstr *DDst = Dst->Succs[0].getSUnit()->getInstr();
401 void HexagonSubtarget::updateLatency(MachineInstr &SrcInst,
402 MachineInstr &DstInst, SDep &Dep) const {
419 MachineInstr *SrcI = Src->getInstr();
431 MachineInstr *DstI = Dst->getInstr();
489 MachineInstr &SrcInst = *Src->getInstr();
490 MachineInstr &DstInst = *Dst->getInstr();
lib/Target/Hexagon/HexagonSubtarget.h 270 void updateLatency(MachineInstr &SrcInst, MachineInstr &DstInst, SDep &Dep)
270 void updateLatency(MachineInstr &SrcInst, MachineInstr &DstInst, SDep &Dep)
lib/Target/Hexagon/HexagonVExtract.cpp 56 unsigned genElemLoad(MachineInstr *ExtI, unsigned BaseR,
66 unsigned HexagonVExtract::genElemLoad(MachineInstr *ExtI, unsigned BaseR,
77 MachineInstr *DI = MRI.getVRegDef(ExtIdxR);
106 std::map<unsigned, SmallVector<MachineInstr*,4>> VExtractMap;
110 for (MachineInstr &MI : MBB) {
127 MachineInstr *DefI = MRI.getVRegDef(VecR);
140 for (MachineInstr *ExtI : P.second) {
lib/Target/Hexagon/HexagonVLIWPacketizer.cpp 146 static bool hasWriteToReadDep(const MachineInstr &FirstI,
147 const MachineInstr &SecondI,
173 MI.clearFlag(MachineInstr::BundledSucc);
174 MI.clearFlag(MachineInstr::BundledPred);
197 MachineInstr &SingleI = *BundleIt->getNextNode();
287 auto *ExtMI = MF.CreateMachineInstr(HII->get(Hexagon::A4_ext), DebugLoc());
295 bool HexagonPacketizerList::isCallDependent(const MachineInstr &MI,
324 static bool isDirectJump(const MachineInstr &MI) {
328 static bool isSchedBarrier(const MachineInstr &MI) {
336 static bool isControlFlow(const MachineInstr &MI) {
341 static bool doesModifyCalleeSavedReg(const MachineInstr &MI,
352 bool HexagonPacketizerList::isNewifiable(const MachineInstr &MI,
368 bool HexagonPacketizerList::promoteToDotCur(MachineInstr &MI,
378 MachineInstr *MI = nullptr;
399 bool HexagonPacketizerList::canPromoteToDotCur(const MachineInstr &MI,
421 MachineInstr &MJ = *MII;
450 bool HexagonPacketizerList::promoteToDotNew(MachineInstr &MI,
463 bool HexagonPacketizerList::demoteToDotOld(MachineInstr &MI) {
469 bool HexagonPacketizerList::useCallersSP(MachineInstr &MI) {
490 void HexagonPacketizerList::useCalleesSP(MachineInstr &MI) {
510 MachineInstr &MI = *SUI->getInstr();
511 MachineInstr &MJ = *SUJ->getInstr();
544 void HexagonPacketizerList::undoChangedOffset(MachineInstr &MI) {
559 static PredicateKind getPredicateSense(const MachineInstr &MI,
568 static const MachineOperand &getPostIncrementOperand(const MachineInstr &MI,
602 static const MachineOperand& getStoreValueOperand(const MachineInstr &MI) {
607 static bool isLoadAbsSet(const MachineInstr &MI) {
621 static const MachineOperand &getAbsSetOperand(const MachineInstr &MI) {
643 bool HexagonPacketizerList::canPromoteToNewValueStore(const MachineInstr &MI,
644 const MachineInstr &PacketMI, unsigned DepReg) {
752 MachineInstr &TempMI = *TempSU->getInstr();
812 bool HexagonPacketizerList::canPromoteToNewValue(const MachineInstr &MI,
819 MachineInstr &PacketMI = *PacketSU->getInstr();
828 static bool isImplicitDependency(const MachineInstr &I, bool CheckDef,
842 bool HexagonPacketizerList::canPromoteToDotNew(const MachineInstr &MI,
852 const MachineInstr &PI = *PacketSU->getInstr();
885 MachineInstr *NewMI = MF.CreateMachineInstr(D, DebugLoc());
911 bool HexagonPacketizerList::restrictingDepExistInPacket(MachineInstr &MI,
940 static unsigned getPredicatedRegister(MachineInstr &MI,
958 bool HexagonPacketizerList::arePredicatesComplements(MachineInstr &MI1,
959 MachineInstr &MI2) {
1035 bool HexagonPacketizerList::ignorePseudoInstruction(const MachineInstr &MI,
1058 bool HexagonPacketizerList::isSoloInstruction(const MachineInstr &MI) {
1093 static bool cannotCoexistAsymm(const MachineInstr &MI, const MachineInstr &MJ,
1093 static bool cannotCoexistAsymm(const MachineInstr &MI, const MachineInstr &MJ,
1143 bool HexagonPacketizerList::cannotCoexist(const MachineInstr &MI,
1144 const MachineInstr &MJ) {
1154 MachineInstr &MI = *I;
1180 static bool isSystemInstr(const MachineInstr &MI) {
1192 bool HexagonPacketizerList::hasDeadDependence(const MachineInstr &I,
1193 const MachineInstr &J) {
1219 bool HexagonPacketizerList::hasControlDependence(const MachineInstr &I,
1220 const MachineInstr &J) {
1255 bool HexagonPacketizerList::hasRegMaskDependence(const MachineInstr &I,
1256 const MachineInstr &J) {
1285 bool HexagonPacketizerList::hasDualStoreDependence(const MachineInstr &I,
1286 const MachineInstr &J) {
1312 MachineInstr &I = *SUI->getInstr();
1313 MachineInstr &J = *SUJ->getInstr();
1350 MachineInstr &NextMI = *NextMII;
1359 for (MachineInstr *PI : CurrentPacketMIs) {
1623 MachineInstr &I = *SUI->getInstr();
1624 MachineInstr &J = *SUJ->getInstr();
1708 MachineInstr &NvjMI = *++MII;
1786 for (MachineInstr *MI : CurrentPacketMIs) {
1788 for (auto &I : make_range(HII->expandVGatherPseudo(*MI), NextMI))
1808 bool HexagonPacketizerList::shouldAddToPacket(const MachineInstr &MI) {
1815 bool HexagonPacketizerList::producesStall(const MachineInstr &I) {
lib/Target/Hexagon/HexagonVLIWPacketizer.h 29 std::vector<MachineInstr *> OldPacketMIs;
54 std::vector<MachineInstr*> IgnoreDepMIs;
79 bool ignorePseudoInstruction(const MachineInstr &MI,
84 bool isSoloInstruction(const MachineInstr &MI) override;
98 bool shouldAddToPacket(const MachineInstr &MI) override;
109 bool isCallDependent(const MachineInstr &MI, SDep::Kind DepType,
111 bool promoteToDotCur(MachineInstr &MI, SDep::Kind DepType,
114 bool canPromoteToDotCur(const MachineInstr &MI, const SUnit *PacketSU,
119 bool promoteToDotNew(MachineInstr &MI, SDep::Kind DepType,
122 bool canPromoteToDotNew(const MachineInstr &MI, const SUnit *PacketSU,
125 bool canPromoteToNewValue(const MachineInstr &MI, const SUnit *PacketSU,
127 bool canPromoteToNewValueStore(const MachineInstr &MI,
128 const MachineInstr &PacketMI, unsigned DepReg);
129 bool demoteToDotOld(MachineInstr &MI);
130 bool useCallersSP(MachineInstr &MI);
131 void useCalleesSP(MachineInstr &MI);
133 void undoChangedOffset(MachineInstr &MI);
134 bool arePredicatesComplements(MachineInstr &MI1, MachineInstr &MI2);
134 bool arePredicatesComplements(MachineInstr &MI1, MachineInstr &MI2);
135 bool restrictingDepExistInPacket(MachineInstr&, unsigned);
136 bool isNewifiable(const MachineInstr &MI, const TargetRegisterClass *NewRC);
137 bool isCurifiable(MachineInstr &MI);
138 bool cannotCoexist(const MachineInstr &MI, const MachineInstr &MJ);
138 bool cannotCoexist(const MachineInstr &MI, const MachineInstr &MJ);
147 bool hasDeadDependence(const MachineInstr &I, const MachineInstr &J);
147 bool hasDeadDependence(const MachineInstr &I, const MachineInstr &J);
148 bool hasControlDependence(const MachineInstr &I, const MachineInstr &J);
148 bool hasControlDependence(const MachineInstr &I, const MachineInstr &J);
149 bool hasRegMaskDependence(const MachineInstr &I, const MachineInstr &J);
149 bool hasRegMaskDependence(const MachineInstr &I, const MachineInstr &J);
150 bool hasDualStoreDependence(const MachineInstr &I, const MachineInstr &J);
150 bool hasDualStoreDependence(const MachineInstr &I, const MachineInstr &J);
151 bool producesStall(const MachineInstr &MI);
lib/Target/Hexagon/HexagonVectorPrint.cpp 107 static bool getInstrVecReg(const MachineInstr &MI, unsigned &Reg) {
135 std::vector<MachineInstr *> VecPrintList;
137 for (auto &MI : MBB) {
163 for (auto *I : VecPrintList) {
lib/Target/Hexagon/RDFCopy.cpp 40 bool CopyPropagation::interpretAsCopy(const MachineInstr *MI, EqualityMap &EM) {
lib/Target/Hexagon/RDFCopy.h 40 virtual bool interpretAsCopy(const MachineInstr *MI, EqualityMap &EM);
lib/Target/Hexagon/RDFDeadCode.cpp 58 bool DeadCodeElimination::isLiveInstr(const MachineInstr *MI) const {
237 MachineInstr *MI = NodeAddr<StmtNode*>(IA).Addr->getCode();
lib/Target/Hexagon/RDFDeadCode.h 58 bool isLiveInstr(const MachineInstr *MI) const;
lib/Target/Hexagon/RDFGraph.cpp 225 const MachineInstr &MI = *P.Obj.Addr->getCode();
230 MachineInstr::const_mop_iterator T =
598 bool TargetOperandInfo::isPreserving(const MachineInstr &In, unsigned OpNum)
604 bool TargetOperandInfo::isClobbering(const MachineInstr &In, unsigned OpNum)
617 bool TargetOperandInfo::isFixedReg(const MachineInstr &In, unsigned OpNum)
844 MachineInstr *MI) {
876 for (MachineInstr &I : B) {
1105 MachineInstr *MI = NodeAddr<StmtNode*>(IA).Addr->getCode();
1248 void DataFlowGraph::buildStmt(NodeAddr<BlockNode*> BA, MachineInstr &In) {
lib/Target/Hexagon/RDFGraph.h 418 virtual bool isPreserving(const MachineInstr &In, unsigned OpNum) const;
419 virtual bool isClobbering(const MachineInstr &In, unsigned OpNum) const;
420 virtual bool isFixedReg(const MachineInstr &In, unsigned OpNum) const;
615 MachineInstr *getCode() const {
621 MachineInstr *getCode() const {
622 return CodeNode::getCode<MachineInstr*>();
835 MachineInstr *MI);
847 void buildStmt(NodeAddr<BlockNode*> BA, MachineInstr &In);
lib/Target/Hexagon/RDFLiveness.cpp 191 MachineInstr *CA = NodeAddr<StmtNode*>(OA).Addr->getCode();
192 MachineInstr *CB = NodeAddr<StmtNode*>(OB).Addr->getCode();
880 MachineInstr *MI = &*I;
lib/Target/Hexagon/RDFRegisters.cpp 78 for (const MachineInstr &In : B)
lib/Target/Lanai/LanaiAsmPrinter.cpp 51 void printOperand(const MachineInstr *MI, int OpNum, raw_ostream &O);
52 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
54 void EmitInstruction(const MachineInstr *MI) override;
59 void customEmitInstruction(const MachineInstr *MI);
60 void emitCallInstruction(const MachineInstr *MI);
64 void LanaiAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
111 bool LanaiAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
149 void LanaiAsmPrinter::emitCallInstruction(const MachineInstr *MI) {
189 void LanaiAsmPrinter::customEmitInstruction(const MachineInstr *MI) {
197 void LanaiAsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/Lanai/LanaiFrameLowering.cpp 72 MachineInstr &MI = *MBBI++;
118 .setMIFlag(MachineInstr::FrameSetup);
125 .setMIFlag(MachineInstr::FrameSetup);
133 .setMIFlag(MachineInstr::FrameSetup);
lib/Target/Lanai/LanaiInstrInfo.cpp 89 const MachineInstr &MIa, const MachineInstr &MIb) const {
89 const MachineInstr &MIa, const MachineInstr &MIb) const {
119 bool LanaiInstrInfo::expandPostRAPseudo(MachineInstr & /*MI*/) const {
177 bool LanaiInstrInfo::analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
205 inline static bool isRedundantFlagInstr(MachineInstr *CmpI, unsigned SrcReg,
207 MachineInstr *OI) {
284 MachineInstr &CmpInstr, unsigned SrcReg, unsigned SrcReg2, int /*CmpMask*/,
287 MachineInstr *MI = MRI->getUniqueVRegDef(SrcReg);
303 MachineInstr *Sub = nullptr;
321 const MachineInstr &Instr = *I;
356 const MachineInstr &Instr = *I;
438 bool LanaiInstrInfo::analyzeSelect(const MachineInstr &MI,
457 static MachineInstr *canFoldIntoSelect(unsigned Reg,
463 MachineInstr *MI = MRI.getVRegDef(Reg);
492 MachineInstr *
493 LanaiInstrInfo::optimizeSelect(MachineInstr &MI,
494 SmallPtrSetImpl<MachineInstr *> &SeenMIs,
498 MachineInstr *DefMI = canFoldIntoSelect(MI.getOperand(1).getReg(), MRI);
717 unsigned LanaiInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
728 unsigned LanaiInstrInfo::isLoadFromStackSlotPostFE(const MachineInstr &MI,
746 unsigned LanaiInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
758 const MachineInstr &LdSt, const MachineOperand *&BaseOp, int64_t &Offset,
796 bool LanaiInstrInfo::getMemOperandWithOffset(const MachineInstr &LdSt,
lib/Target/Lanai/LanaiInstrInfo.h 38 bool areMemAccessesTriviallyDisjoint(const MachineInstr &MIa,
39 const MachineInstr &MIb) const override;
41 unsigned isLoadFromStackSlot(const MachineInstr &MI,
44 unsigned isLoadFromStackSlotPostFE(const MachineInstr &MI,
47 unsigned isStoreToStackSlot(const MachineInstr &MI,
68 bool expandPostRAPseudo(MachineInstr &MI) const override;
70 bool getMemOperandWithOffset(const MachineInstr &LdSt,
75 bool getMemOperandWithOffsetWidth(const MachineInstr &LdSt,
97 bool analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
104 bool optimizeCompareInstr(MachineInstr &CmpInstr, unsigned SrcReg,
118 bool analyzeSelect(const MachineInstr &MI,
131 MachineInstr *optimizeSelect(MachineInstr &MI,
131 MachineInstr *optimizeSelect(MachineInstr &MI,
132 SmallPtrSetImpl<MachineInstr *> &SeenMIs,
lib/Target/Lanai/LanaiMCInstLower.cpp 93 void LanaiMCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
lib/Target/Lanai/LanaiMCInstLower.h 34 void Lower(const MachineInstr *MI, MCInst &OutMI) const;
lib/Target/Lanai/LanaiMemAluCombiner.cpp 149 bool isNonVolatileMemoryOp(const MachineInstr &MI) {
191 for (MachineInstr::const_mop_iterator Mop = Instr->operands_begin();
lib/Target/Lanai/LanaiRegisterInfo.cpp 141 MachineInstr &MI = *II;
lib/Target/MSP430/MSP430AsmPrinter.cpp 52 void printOperand(const MachineInstr *MI, int OpNum,
54 void printSrcMemOperand(const MachineInstr *MI, int OpNum,
56 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
58 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
60 void EmitInstruction(const MachineInstr *MI) override;
78 void MSP430AsmPrinter::printOperand(const MachineInstr *MI, int OpNum,
107 void MSP430AsmPrinter::printSrcMemOperand(const MachineInstr *MI, int OpNum,
129 bool MSP430AsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
139 bool MSP430AsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
151 void MSP430AsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/MSP430/MSP430BranchSelector.cpp 98 for (MachineInstr &MI : MBB) {
179 MachineInstr &OldBranch = *MI;
lib/Target/MSP430/MSP430FrameLowering.cpp 97 MachineInstr *MI =
159 MachineInstr *MI =
169 MachineInstr *MI =
237 MachineInstr &Old = *I;
245 MachineInstr *New = nullptr;
274 MachineInstr &Old = *I;
275 MachineInstr *New =
lib/Target/MSP430/MSP430ISelLowering.cpp 1410 MSP430TargetLowering::EmitShiftInstr(MachineInstr &MI,
1540 MSP430TargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
lib/Target/MSP430/MSP430ISelLowering.h 130 EmitInstrWithCustomInserter(MachineInstr &MI,
132 MachineBasicBlock *EmitShiftInstr(MachineInstr &MI,
lib/Target/MSP430/MSP430InstrInfo.cpp 163 bool MSP430InstrInfo::isUnpredicatedTerminator(const MachineInstr &MI) const {
300 unsigned MSP430InstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
lib/Target/MSP430/MSP430InstrInfo.h 54 unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
59 bool isUnpredicatedTerminator(const MachineInstr &MI) const override;
72 int64_t getFramePoppedByCallee(const MachineInstr &I) const {
lib/Target/MSP430/MSP430MCInstLower.cpp 115 void MSP430MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
lib/Target/MSP430/MSP430MCInstLower.h 33 void Lower(const MachineInstr *MI, MCInst &OutMI) const;
lib/Target/MSP430/MSP430RegisterInfo.cpp 108 MachineInstr &MI = *II;
lib/Target/Mips/MicroMipsSizeReduction.cpp 123 MachineInstr *MI; // Instruction
128 ReduceEntryFunArgs(MachineInstr *argMI, const ReduceEntry &argEntry,
196 static bool ReplaceInstruction(MachineInstr *MI, const ReduceEntry &Entry,
197 MachineInstr *MI2 = nullptr,
308 static bool GetImm(MachineInstr *MI, unsigned Op, int64_t &Imm) {
337 static bool ImmInRange(MachineInstr *MI, const ReduceEntry &Entry) {
351 static bool CheckXWPInstr(MachineInstr *MI, bool ReduceToLwp,
398 static bool ConsecutiveInstr(MachineInstr *MI1, MachineInstr *MI2) {
398 static bool ConsecutiveInstr(MachineInstr *MI1, MachineInstr *MI2) {
417 MachineInstr *MI = &*MII;
442 MachineInstr *MI = Arguments->MI;
464 MachineInstr *MI1 = Arguments->MI;
465 MachineInstr *MI2 = &*NextMII;
497 MachineInstr *MI = Arguments->MI;
511 MachineInstr *MI = Arguments->MI;
525 MachineInstr *MI = Arguments->MI;
543 MachineInstr *MI = Arguments->MI;
558 MachineInstr *MI = Arguments->MI;
621 MachineInstr *MI1 = Arguments->MI;
622 MachineInstr *MI2 = &*NextMII;
656 MachineInstr *MI = Arguments->MI;
680 MachineInstr *MI = &*MII;
693 bool MicroMipsSizeReduce::ReplaceInstruction(MachineInstr *MI,
695 MachineInstr *MI2,
lib/Target/Mips/Mips16FrameLowering.cpp 88 .addReg(Mips::SP).setMIFlag(MachineInstr::FrameSetup);
lib/Target/Mips/Mips16ISelLowering.cpp 164 Mips16TargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
511 Mips16TargetLowering::emitSel16(unsigned Opc, MachineInstr &MI,
574 Mips16TargetLowering::emitSelT16(unsigned Opc1, unsigned Opc2, MachineInstr &MI,
640 MachineInstr &MI,
706 MachineInstr &MI,
724 MachineInstr &MI, MachineBasicBlock *BB) const {
756 Mips16TargetLowering::emitFEXT_CCRX16_ins(unsigned SltOpc, MachineInstr &MI,
775 MachineInstr &MI,
lib/Target/Mips/Mips16ISelLowering.h 30 EmitInstrWithCustomInserter(MachineInstr &MI,
53 MachineBasicBlock *emitSel16(unsigned Opc, MachineInstr &MI,
57 MachineInstr &MI,
61 MachineInstr &MI,
65 MachineInstr &MI,
70 MachineInstr &MI,
73 MachineBasicBlock *emitFEXT_CCRX16_ins(unsigned SltOpc, MachineInstr &MI,
77 MachineInstr &MI,
lib/Target/Mips/Mips16InstrInfo.cpp 54 unsigned Mips16InstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
64 unsigned Mips16InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
99 bool Mips16InstrInfo::isCopyInstrImpl(const MachineInstr &MI,
146 bool Mips16InstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
lib/Target/Mips/Mips16InstrInfo.h 40 unsigned isLoadFromStackSlot(const MachineInstr &MI,
48 unsigned isStoreToStackSlot(const MachineInstr &MI,
69 bool expandPostRAPseudo(MachineInstr &MI) const override;
109 bool isCopyInstrImpl(const MachineInstr &MI, const MachineOperand *&Source,
lib/Target/Mips/Mips16RegisterInfo.cpp 79 MachineInstr &MI = *II;
lib/Target/Mips/MipsAsmPrinter.cpp 116 const MachineInstr *MI) {
161 static void emitDirectiveRelocJalr(const MachineInstr &MI,
188 void MipsAsmPrinter::EmitInstruction(const MachineInstr *MI) {
514 bool MipsAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum,
619 bool MipsAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
655 void MipsAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
721 printMemOperand(const MachineInstr *MI, int opNum, raw_ostream &O) {
744 printMemOperandEA(const MachineInstr *MI, int opNum, raw_ostream &O) {
753 printFCCOperand(const MachineInstr *MI, int opNum, raw_ostream &O,
760 printRegisterList(const MachineInstr *MI, int opNum, raw_ostream &O) {
1135 void MipsAsmPrinter::EmitSled(const MachineInstr &MI, SledKind Kind) {
1233 void MipsAsmPrinter::LowerPATCHABLE_FUNCTION_ENTER(const MachineInstr &MI) {
1237 void MipsAsmPrinter::LowerPATCHABLE_FUNCTION_EXIT(const MachineInstr &MI) {
1241 void MipsAsmPrinter::LowerPATCHABLE_TAIL_CALL(const MachineInstr &MI) {
1245 void MipsAsmPrinter::PrintDebugValueComment(const MachineInstr *MI,
lib/Target/Mips/MipsAsmPrinter.h 45 void EmitInstrWithMacroNoAT(const MachineInstr *MI);
53 void LowerPATCHABLE_FUNCTION_ENTER(const MachineInstr &MI);
54 void LowerPATCHABLE_FUNCTION_EXIT(const MachineInstr &MI);
55 void LowerPATCHABLE_TAIL_CALL(const MachineInstr &MI);
69 void EmitSled(const MachineInstr &MI, SledKind Kind);
73 const MachineInstr *MI);
79 const MachineInstr *MI);
137 void EmitInstruction(const MachineInstr *MI) override;
147 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
149 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum,
151 void printOperand(const MachineInstr *MI, int opNum, raw_ostream &O);
152 void printMemOperand(const MachineInstr *MI, int opNum, raw_ostream &O);
153 void printMemOperandEA(const MachineInstr *MI, int opNum, raw_ostream &O);
154 void printFCCOperand(const MachineInstr *MI, int opNum, raw_ostream &O,
156 void printRegisterList(const MachineInstr *MI, int opNum, raw_ostream &O);
159 void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS);
lib/Target/Mips/MipsBranchExpansion.cpp 129 MachineInstr *Br = nullptr;
156 int64_t computeOffset(const MachineInstr *Br);
225 static MachineBasicBlock *getTargetMBB(const MachineInstr &Br) {
304 int64_t MipsBranchExpansion::computeOffset(const MachineInstr *Br) {
lib/Target/Mips/MipsCallLowering.cpp 575 MachineInstr *CalleeGlobalValue =
lib/Target/Mips/MipsConstantIslandPass.cpp 88 static unsigned int branchTargetOperand(MachineInstr *MI) {
254 MachineInstr *MI;
255 MachineInstr *CPEMI;
267 CPUser(MachineInstr *mi, MachineInstr *cpemi, unsigned maxdisp,
267 CPUser(MachineInstr *mi, MachineInstr *cpemi, unsigned maxdisp,
304 MachineInstr *CPEMI;
308 CPEntry(MachineInstr *cpemi, unsigned cpi, unsigned rc = 0)
324 MachineInstr *MI;
329 ImmBranch(MachineInstr *mi, unsigned maxdisp, bool cond, int ubr)
372 void doInitialPlacement(std::vector<MachineInstr*> &CPEMIs);
373 CPEntry *findConstPoolEntry(unsigned CPI, const MachineInstr *CPEMI);
374 Align getCPEAlign(const MachineInstr &CPEMI);
375 void initializeFunctionInfo(const std::vector<MachineInstr*> &CPEMIs);
376 unsigned getOffsetOf(MachineInstr *MI) const;
386 MachineBasicBlock *splitBlockBeforeInstr(MachineInstr &MI);
389 bool decrementCPEReferenceCount(unsigned CPI, MachineInstr* CPEMI);
397 void removeDeadCPEMI(MachineInstr *CPEMI);
399 bool isCPEntryInRange(MachineInstr *MI, unsigned UserOffset,
400 MachineInstr *CPEMI, unsigned Disp, bool NegOk,
404 bool isBBInRange(MachineInstr *MI, MachineBasicBlock *BB, unsigned Disp);
467 std::vector<MachineInstr*> CPEMIs;
526 MipsConstantIslands::doInitialPlacement(std::vector<MachineInstr*> &CPEMIs) {
567 MachineInstr *CPEMI =
609 const MachineInstr *CPEMI) {
622 Align MipsConstantIslands::getCPEAlign(const MachineInstr &CPEMI) {
638 initializeFunctionInfo(const std::vector<MachineInstr*> &CPEMIs) {
658 for (MachineInstr &MI : MBB) {
769 MachineInstr *CPEMI = CPEMIs[CPI];
794 for (const MachineInstr &MI : *MBB)
801 unsigned MipsConstantIslands::getOffsetOf(MachineInstr *MI) const {
850 MipsConstantIslands::splitBlockBeforeInstr(MachineInstr &MI) {
975 (MachineInstr *MI, unsigned UserOffset,
976 MachineInstr *CPEMI, unsigned MaxDisp,
1005 MachineInstr *PredMI = &Pred->back();
1027 MachineInstr *CPEMI) {
1048 MachineInstr *UserMI = U.MI;
1049 MachineInstr *CPEMI = U.CPEMI;
1101 MachineInstr *UserMI = U.MI;
1102 MachineInstr *CPEMI = U.CPEMI;
1216 MachineInstr *UserMI = U.MI;
1217 MachineInstr *CPEMI = U.CPEMI;
1311 MachineInstr *UserMI = U.MI;
1312 MachineInstr *CPEMI = U.CPEMI;
1416 void MipsConstantIslands::removeDeadCPEMI(MachineInstr *CPEMI) {
1460 (MachineInstr *MI,MachineBasicBlock *DestBB, unsigned MaxDisp) {
1485 MachineInstr *MI = Br.MI;
1504 MachineInstr *MI = Br.MI;
1544 MachineInstr *MI = Br.MI;
1570 MachineInstr *BMI = &MBB->back();
lib/Target/Mips/MipsDelaySlotFiller.cpp 108 using BB2BrMap = SmallDenseMap<MachineBasicBlock *, MachineInstr *, 2>;
114 void init(const MachineInstr &MI);
117 void setCallerSaved(const MachineInstr &MI);
127 bool update(const MachineInstr &MI, unsigned Begin, unsigned End);
147 bool hasHazard(const MachineInstr &MI);
161 virtual bool hasHazard_(const MachineInstr &MI) = 0;
170 bool hasHazard_(const MachineInstr &MI) override { return true; }
179 bool hasHazard_(const MachineInstr &MI) override;
191 bool hasHazard_(const MachineInstr &MI) override;
199 bool getUnderlyingObjects(const MachineInstr &MI,
257 bool delayHasHazard(const MachineInstr &Candidate, RegDefsUses &RegDU,
269 bool searchBackward(MachineBasicBlock &MBB, MachineInstr &Slot) const;
286 std::pair<MipsInstrInfo::BranchType, MachineInstr *>
295 bool terminateSearch(const MachineInstr &Candidate) const;
304 static bool hasUnoccupiedSlot(const MachineInstr *MI) {
349 void RegDefsUses::init(const MachineInstr &MI) {
366 void RegDefsUses::setCallerSaved(const MachineInstr &MI) {
413 bool RegDefsUses::update(const MachineInstr &MI, unsigned Begin, unsigned End) {
451 bool InspectMemInstr::hasHazard(const MachineInstr &MI) {
473 bool LoadFromStackOrConst::hasHazard_(const MachineInstr &MI) {
493 bool MemDefsUses::hasHazard_(const MachineInstr &MI) {
524 getUnderlyingObjects(const MachineInstr &MI,
742 MachineInstr &Slot) const {
848 std::pair<MipsInstrInfo::BranchType, MachineInstr *>
854 SmallVector<MachineInstr*, 2> BranchInstrs;
890 std::pair<MipsInstrInfo::BranchType, MachineInstr *> P =
908 bool MipsDelaySlotFiller::delayHasHazard(const MachineInstr &Candidate,
922 bool MipsDelaySlotFiller::terminateSearch(const MachineInstr &Candidate) const {
lib/Target/Mips/MipsISelLowering.cpp 1263 static MachineBasicBlock *insertDivByZeroTrap(MachineInstr &MI,
1294 MipsTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
1422 MipsTargetLowering::emitAtomicBinary(MachineInstr &MI,
1539 MachineInstr &MI, MachineBasicBlock *BB, unsigned Size, unsigned DstReg,
1569 MachineInstr &MI, MachineBasicBlock *BB, unsigned Size) const {
1721 MipsTargetLowering::emitAtomicCmpSwap(MachineInstr &MI,
1778 MachineInstr &MI, MachineBasicBlock *BB, unsigned Size) const {
2965 void MipsTargetLowering::AdjustInstrPostInstrSelection(MachineInstr &MI,
4414 MachineBasicBlock *MipsTargetLowering::emitPseudoSELECT(MachineInstr &MI,
4492 MachineBasicBlock *MipsTargetLowering::emitPseudoD_SELECT(MachineInstr &MI,
lib/Target/Mips/MipsISelLowering.h 343 EmitInstrWithCustomInserter(MachineInstr &MI,
346 void AdjustInstrPostInstrSelection(MachineInstr &MI,
692 MachineBasicBlock *emitSignExtendToI32InReg(MachineInstr &MI,
697 MachineBasicBlock *emitAtomicBinary(MachineInstr &MI,
699 MachineBasicBlock *emitAtomicBinaryPartword(MachineInstr &MI,
702 MachineBasicBlock *emitAtomicCmpSwap(MachineInstr &MI,
704 MachineBasicBlock *emitAtomicCmpSwapPartword(MachineInstr &MI,
707 MachineBasicBlock *emitSEL_D(MachineInstr &MI, MachineBasicBlock *BB) const;
708 MachineBasicBlock *emitPseudoSELECT(MachineInstr &MI, MachineBasicBlock *BB,
710 MachineBasicBlock *emitPseudoD_SELECT(MachineInstr &MI,
lib/Target/Mips/MipsInstrInfo.cpp 79 void MipsInstrInfo::AnalyzeCondBr(const MachineInstr *Inst, unsigned Opc,
99 SmallVector<MachineInstr*, 2> BranchInstrs;
193 SmallVectorImpl<MachineInstr *> &BranchInstrs) const {
207 MachineInstr *LastInst = &*I;
217 MachineInstr *SecondLastInst = nullptr;
563 bool MipsInstrInfo::SafeInForbiddenSlot(const MachineInstr &MI) const {
571 bool MipsInstrInfo::HasForbiddenSlot(const MachineInstr &MI) const {
576 unsigned MipsInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
680 bool MipsInstrInfo::findCommutedOpIndices(const MachineInstr &MI,
722 static bool verifyInsExtInstruction(const MachineInstr &MI, StringRef &ErrInfo,
759 bool MipsInstrInfo::verifyInstruction(const MachineInstr &MI,
lib/Target/Mips/MipsInstrInfo.h 83 SmallVectorImpl<MachineInstr *> &BranchInstrs) const;
93 bool SafeInForbiddenSlot(const MachineInstr &MI) const;
96 bool HasForbiddenSlot(const MachineInstr &MI) const;
110 unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
151 bool findCommutedOpIndices(const MachineInstr &MI, unsigned &SrcOpIdx1,
155 bool verifyInstruction(const MachineInstr &MI,
173 void AnalyzeCondBr(const MachineInstr *Inst, unsigned Opc,
lib/Target/Mips/MipsInstructionSelector.cpp 37 bool select(MachineInstr &I) override;
41 bool selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const;
44 bool selectCopy(MachineInstr &I, MachineRegisterInfo &MRI) const;
48 unsigned selectLoadStoreOpCode(MachineInstr &I,
87 bool MipsInstructionSelector::selectCopy(MachineInstr &I,
134 MachineInstr *Inst = B.buildInstr(Mips::ORi, {DestReg}, {Register(Mips::ZERO)})
140 MachineInstr *Inst = B.buildInstr(Mips::LUi, {DestReg}, {})
146 MachineInstr *Inst = B.buildInstr(Mips::ADDiu, {DestReg}, {Register(Mips::ZERO)})
152 MachineInstr *LUi = B.buildInstr(Mips::LUi, {LUiReg}, {})
154 MachineInstr *ORi = B.buildInstr(Mips::ORi, {DestReg}, {LUiReg})
165 MipsInstructionSelector::selectLoadStoreOpCode(MachineInstr &I,
229 bool MipsInstructionSelector::select(MachineInstr &I) {
245 MachineInstr *Mul = BuildMI(MBB, I, I.getDebugLoc(), TII.get(Mips::MUL))
261 MachineInstr *MI = nullptr;
267 MachineInstr *PseudoMULTu, *PseudoMove;
318 MachineInstr *SLL = BuildMI(MBB, I, I.getDebugLoc(), TII.get(Mips::SLL))
326 MachineInstr *ADDu = BuildMI(MBB, I, I.getDebugLoc(), TII.get(Mips::ADDu))
334 MachineInstr *LW =
347 MachineInstr *ADDu = BuildMI(MBB, I, I.getDebugLoc(), TII.get(Mips::ADDu))
356 MachineInstr *Branch =
401 MachineInstr *Addr = MRI.getVRegDef(I.getOperand(1).getReg());
403 MachineInstr *Offset = MRI.getVRegDef(Addr->getOperand(2).getReg());
428 MachineInstr *PseudoDIV, *PseudoMove;
536 MachineInstr *Trunc = BuildMI(MBB, I, I.getDebugLoc(), TII.get(Opcode))
542 MachineInstr *Move = BuildMI(MBB, I, I.getDebugLoc(), TII.get(Mips::MFC1))
554 MachineInstr *LWGOT = BuildMI(MBB, I, I.getDebugLoc(), TII.get(Mips::LW))
577 MachineInstr *ADDiu =
589 MachineInstr *LUi = BuildMI(MBB, I, I.getDebugLoc(), TII.get(Mips::LUi))
596 MachineInstr *ADDiu =
766 MachineInstr *FCMP = BuildMI(MBB, I, I.getDebugLoc(), TII.get(FCMPOpcode))
773 MachineInstr *Move = BuildMI(MBB, I, I.getDebugLoc(), TII.get(MoveOpcode))
793 MachineInstr *LEA_ADDiu =
801 MachineInstr *Store = BuildMI(MBB, I, I.getDebugLoc(), TII.get(Mips::SW))
lib/Target/Mips/MipsLegalizerInfo.cpp 241 bool MipsLegalizerInfo::legalizeCustom(MachineInstr &MI,
299 static bool SelectMSA3OpIntrinsic(MachineInstr &MI, unsigned Opcode,
314 static bool MSA3OpIntrinsicToGeneric(MachineInstr &MI, unsigned Opcode,
326 bool MSA2OpIntrinsicToGeneric(MachineInstr &MI, unsigned Opcode,
337 bool MipsLegalizerInfo::legalizeIntrinsic(MachineInstr &MI,
357 MachineInstr *Trap = MIRBuilder.buildInstr(Mips::TRAP);
lib/Target/Mips/MipsLegalizerInfo.h 28 bool legalizeCustom(MachineInstr &MI, MachineRegisterInfo &MRI,
32 bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
lib/Target/Mips/MipsMCInstLower.cpp 217 lowerLongBranchLUi(const MachineInstr *MI, MCInst &OutMI) const {
254 void MipsMCInstLower::lowerLongBranchADDiu(const MachineInstr *MI,
296 bool MipsMCInstLower::lowerLongBranch(const MachineInstr *MI,
317 void MipsMCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
lib/Target/Mips/MipsMCInstLower.h 37 void Lower(const MachineInstr *MI, MCInst &OutMI) const;
45 void lowerLongBranchLUi(const MachineInstr *MI, MCInst &OutMI) const;
46 void lowerLongBranchADDiu(const MachineInstr *MI, MCInst &OutMI,
48 bool lowerLongBranch(const MachineInstr *MI, MCInst &OutMI) const;
lib/Target/Mips/MipsOptimizePICCall.cpp 100 bool isCallViaRegister(MachineInstr &MI, unsigned &Reg,
124 static MachineOperand *getCallTargetRegOpnd(MachineInstr &MI) {
162 static void eraseGPOpnd(MachineInstr &MI) {
266 bool OptimizePICCall::isCallViaRegister(MachineInstr &MI, unsigned &Reg,
281 MachineInstr *DefMI = MRI.getVRegDef(Reg);
lib/Target/Mips/MipsPreLegalizerCombiner.cpp 32 virtual bool combine(GISelChangeObserver &Observer, MachineInstr &MI,
37 MachineInstr &MI,
lib/Target/Mips/MipsRegisterBankInfo.cpp 175 for (MachineInstr &UseMI : MRI.use_instructions(Reg)) {
176 MachineInstr *NonCopyInstr = skipCopiesOutgoing(&UseMI);
190 MachineInstr *DefMI = MRI.getVRegDef(Reg);
194 MachineInstr *
196 MachineInstr *MI) const {
199 MachineInstr *Ret = MI;
208 MachineInstr *
210 MachineInstr *MI) const {
213 MachineInstr *Ret = MI;
221 const MachineInstr *MI) {
252 const MachineInstr *MI, const MachineInstr *WaitingForTypeOfMI) {
252 const MachineInstr *MI, const MachineInstr *WaitingForTypeOfMI) {
287 const MachineInstr *MI, SmallVectorImpl<MachineInstr *> &AdjacentInstrs,
287 const MachineInstr *MI, SmallVectorImpl<MachineInstr *> &AdjacentInstrs,
290 MachineInstr *AdjMI = AdjacentInstrs.pop_back_val();
326 void MipsRegisterBankInfo::TypeInfoForMF::setTypes(const MachineInstr *MI,
329 for (const MachineInstr *WaitingInstr : getWaitingQueueFor(MI)) {
335 const MachineInstr *MI, const MachineInstr *CopyInst, unsigned Op) {
335 const MachineInstr *MI, const MachineInstr *CopyInst, unsigned Op) {
356 MipsRegisterBankInfo::TypeInfoForMF::determineInstType(const MachineInstr *MI) {
396 MipsRegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
618 void createdInstr(MachineInstr &MI) override { InstList.insert(&MI); }
619 void erasingInstr(MachineInstr &MI) override {}
620 void changingInstr(MachineInstr &MI) override {}
621 void changedInstr(MachineInstr &MI) override {}
625 void MipsRegisterBankInfo::setRegBank(MachineInstr &MI,
653 MachineInstr &MI) {
654 SmallVector<MachineInstr *, 2> DeadInstrs;
656 for (MachineInstr *DeadMI : DeadInstrs)
662 MachineInstr &MI = OpdMapper.getMI();
683 MachineInstr *NewMI = NewInstrs.pop_back_val();
lib/Target/Mips/MipsRegisterBankInfo.h 39 getInstrMapping(const MachineInstr &MI) const override;
50 void setRegBank(MachineInstr &MI, MachineRegisterInfo &MRI) const;
79 SmallVector<MachineInstr *, 2> DefUses;
80 SmallVector<MachineInstr *, 2> UseDefs;
90 MachineInstr *skipCopiesOutgoing(MachineInstr *MI) const;
90 MachineInstr *skipCopiesOutgoing(MachineInstr *MI) const;
97 MachineInstr *skipCopiesIncoming(MachineInstr *MI) const;
97 MachineInstr *skipCopiesIncoming(MachineInstr *MI) const;
100 AmbiguousRegDefUseContainer(const MachineInstr *MI);
101 SmallVectorImpl<MachineInstr *> &getDefUses() { return DefUses; }
102 SmallVectorImpl<MachineInstr *> &getUseDefs() { return UseDefs; }
110 DenseMap<const MachineInstr *, SmallVector<const MachineInstr *, 2>>
110 DenseMap<const MachineInstr *, SmallVector<const MachineInstr *, 2>>
113 DenseMap<const MachineInstr *, InstType> Types;
116 bool visit(const MachineInstr *MI, const MachineInstr *WaitingForTypeOfMI);
116 bool visit(const MachineInstr *MI, const MachineInstr *WaitingForTypeOfMI);
119 bool visitAdjacentInstrs(const MachineInstr *MI,
120 SmallVectorImpl<MachineInstr *> &AdjacentInstrs,
125 void setTypes(const MachineInstr *MI, InstType ITy);
129 void setTypesAccordingToPhysicalRegister(const MachineInstr *MI,
130 const MachineInstr *CopyInst,
134 void startVisit(const MachineInstr *MI) {
141 bool wasVisited(const MachineInstr *MI) const { return Types.count(MI); };
144 const InstType &getRecordedTypeForInstr(const MachineInstr *MI) const {
150 void changeRecordedTypeForInstr(const MachineInstr *MI, InstType InstTy) {
156 const SmallVectorImpl<const MachineInstr *> &
157 getWaitingQueueFor(const MachineInstr *MI) const {
163 void addToWaitingQueue(const MachineInstr *MI,
164 const MachineInstr *WaitingForMI) {
170 InstType determineInstType(const MachineInstr *MI);
lib/Target/Mips/MipsRegisterInfo.cpp 259 MachineInstr &MI = *II;
lib/Target/Mips/MipsSEFrameLowering.cpp 530 .setMIFlag(MachineInstr::FrameSetup);
601 .setMIFlag(MachineInstr::FrameSetup);
607 .setMIFlag(MachineInstr::FrameSetup);
615 .setMIFlag(MachineInstr::FrameSetup);
626 .setMIFlag(MachineInstr::FrameSetup);
662 .setMIFlag(MachineInstr::FrameSetup);
670 .setMIFlag(MachineInstr::FrameSetup);
679 .setMIFlag(MachineInstr::FrameSetup);
685 .setMIFlag(MachineInstr::FrameSetup);
829 .setMIFlag(MachineInstr::FrameSetup);
lib/Target/Mips/MipsSEISelDAGToDAG.cpp 51 void MipsSEDAGToDAGISel::addDSPCtrlRegOperands(bool IsDef, MachineInstr &MI,
83 const MachineInstr& MI) {
109 MachineInstr *MI = MO.getParent();
127 void MipsSEDAGToDAGISel::emitMCountABI(MachineInstr &MI, MachineBasicBlock &MBB,
160 for (auto &MI: MBB) {
lib/Target/Mips/MipsSEISelDAGToDAG.h 32 void addDSPCtrlRegOperands(bool IsDef, MachineInstr &MI,
37 bool replaceUsesWithZeroReg(MachineRegisterInfo *MRI, const MachineInstr&);
132 void emitMCountABI(MachineInstr &MI, MachineBasicBlock &MBB,
lib/Target/Mips/MipsSEISelLowering.cpp 1066 MipsSETargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
3021 MipsSETargetLowering::emitBPOSGE32(MachineInstr &MI,
3090 MachineInstr &MI, MachineBasicBlock *BB, unsigned BranchOp) const {
3169 MipsSETargetLowering::emitCOPY_FW(MachineInstr &MI,
3213 MipsSETargetLowering::emitCOPY_FD(MachineInstr &MI,
3244 MipsSETargetLowering::emitINSERT_FW(MachineInstr &MI,
3278 MipsSETargetLowering::emitINSERT_FD(MachineInstr &MI,
3326 MachineInstr &MI, MachineBasicBlock *BB, unsigned EltSizeInBytes,
3440 MipsSETargetLowering::emitFILL_FW(MachineInstr &MI,
3473 MipsSETargetLowering::emitFILL_FD(MachineInstr &MI,
3508 MipsSETargetLowering::emitST_F16_PSEUDO(MachineInstr &MI,
3563 MipsSETargetLowering::emitLD_F16_PSEUDO(MachineInstr &MI,
3649 MipsSETargetLowering::emitFPROUND_PSEUDO(MachineInstr &MI,
3754 MipsSETargetLowering::emitFPEXTEND_PSEUDO(MachineInstr &MI,
3817 MipsSETargetLowering::emitFEXP2_W_1(MachineInstr &MI,
3846 MipsSETargetLowering::emitFEXP2_D_1(MachineInstr &MI,
lib/Target/Mips/MipsSEISelLowering.h 53 EmitInstrWithCustomInserter(MachineInstr &MI,
91 MachineBasicBlock *emitBPOSGE32(MachineInstr &MI,
93 MachineBasicBlock *emitMSACBranchPseudo(MachineInstr &MI,
97 MachineBasicBlock *emitCOPY_FW(MachineInstr &MI,
100 MachineBasicBlock *emitCOPY_FD(MachineInstr &MI,
103 MachineBasicBlock *emitINSERT_FW(MachineInstr &MI,
106 MachineBasicBlock *emitINSERT_FD(MachineInstr &MI,
109 MachineBasicBlock *emitINSERT_DF_VIDX(MachineInstr &MI,
114 MachineBasicBlock *emitFILL_FW(MachineInstr &MI,
117 MachineBasicBlock *emitFILL_FD(MachineInstr &MI,
120 MachineBasicBlock *emitFEXP2_W_1(MachineInstr &MI,
123 MachineBasicBlock *emitFEXP2_D_1(MachineInstr &MI,
126 MachineBasicBlock *emitLD_F16_PSEUDO(MachineInstr &MI,
129 MachineBasicBlock *emitST_F16_PSEUDO(MachineInstr &MI,
132 MachineBasicBlock *emitFPEXTEND_PSEUDO(MachineInstr &MI,
136 MachineBasicBlock *emitFPROUND_PSEUDO(MachineInstr &MI,
lib/Target/Mips/MipsSEInstrInfo.cpp 45 unsigned MipsSEInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
67 unsigned MipsSEInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
186 static bool isORCopyInst(const MachineInstr &MI) {
205 static bool isReadOrWriteToDSPReg(const MachineInstr &MI, bool &isWrite) {
224 bool MipsSEInstrInfo::isCopyInstrImpl(const MachineInstr &MI,
408 bool MipsSEInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
lib/Target/Mips/MipsSEInstrInfo.h 34 unsigned isLoadFromStackSlot(const MachineInstr &MI,
42 unsigned isStoreToStackSlot(const MachineInstr &MI,
63 bool expandPostRAPseudo(MachineInstr &MI) const override;
82 bool isCopyInstrImpl(const MachineInstr &MI, const MachineOperand *&Source,
lib/Target/Mips/MipsSERegisterInfo.cpp 149 MachineInstr &MI = *II;
lib/Target/NVPTX/NVPTXAsmPrinter.cpp 144 void NVPTXAsmPrinter::EmitInstruction(const MachineInstr *MI) {
151 bool NVPTXAsmPrinter::lowerImageHandleOperand(const MachineInstr *MI,
212 void NVPTXAsmPrinter::lowerToMCInst(const MachineInstr *MI, MCInst &OutMI) {
509 void NVPTXAsmPrinter::emitImplicitDef(const MachineInstr *MI) const {
2174 bool NVPTXAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
2194 bool NVPTXAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
2208 void NVPTXAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
2244 void NVPTXAsmPrinter::printMemOperand(const MachineInstr *MI, int opNum,
lib/Target/NVPTX/NVPTXAsmPrinter.h 207 void emitImplicitDef(const MachineInstr *MI) const override;
209 void EmitInstruction(const MachineInstr *) override;
210 void lowerToMCInst(const MachineInstr *MI, MCInst &OutMI);
215 void printMemOperand(const MachineInstr *MI, int opNum, raw_ostream &O,
230 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
232 void printOperand(const MachineInstr *MI, int opNum, raw_ostream &O);
233 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
271 bool lowerImageHandleOperand(const MachineInstr *MI, unsigned OpNo,
lib/Target/NVPTX/NVPTXFrameLowering.cpp 36 MachineInstr *MI = &MBB.front();
lib/Target/NVPTX/NVPTXInstrInfo.cpp 106 MachineInstr &LastInst = *I;
124 MachineInstr &SecondLastInst = *I;
lib/Target/NVPTX/NVPTXPeephole.cpp 73 static bool isCVTAToLocalCombinationCandidate(MachineInstr &Root) {
83 MachineInstr *GenericAddrDef = nullptr;
104 static void CombineCVTAToLocal(MachineInstr &Root) {
109 auto &Prev = *MRI.getUniqueVRegDef(Root.getOperand(1).getReg());
137 auto &MI = *BlockIter++;
lib/Target/NVPTX/NVPTXPrologEpilogPass.cpp 59 for (MachineInstr &MI : MBB) {
lib/Target/NVPTX/NVPTXProxyRegErasure.cpp 54 void replaceMachineInstructionUsage(MachineFunction &MF, MachineInstr &MI);
56 void replaceRegisterUsage(MachineInstr &Instr, MachineOperand &From,
67 SmallVector<MachineInstr *, 16> RemoveList;
70 for (auto &MI : BB) {
87 for (auto *MI : RemoveList) {
95 MachineInstr &MI) {
103 for (auto &I : BB) {
109 void NVPTXProxyRegErasure::replaceRegisterUsage(MachineInstr &Instr,
lib/Target/NVPTX/NVPTXRegisterInfo.cpp 117 MachineInstr &MI = *II;
lib/Target/NVPTX/NVPTXReplaceImageHandles.cpp 32 DenseSet<MachineInstr *> InstrsToRemove;
43 bool processInstr(MachineInstr &MI);
63 MachineInstr &MI = *I;
72 for (DenseSet<MachineInstr *>::iterator I = InstrsToRemove.begin(),
79 bool NVPTXReplaceImageHandles::processInstr(MachineInstr &MI) {
140 MachineInstr &TexHandleDef = *MRI.getVRegDef(Op.getReg());
lib/Target/PowerPC/PPC.h 52 void LowerPPCMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI,
lib/Target/PowerPC/PPCAsmPrinter.cpp 100 void EmitInstruction(const MachineInstr *MI) override;
105 void printOperand(const MachineInstr *MI, unsigned OpNo, raw_ostream &O);
108 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
110 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
115 void LowerSTACKMAP(StackMaps &SM, const MachineInstr &MI);
116 void LowerPATCHPOINT(StackMaps &SM, const MachineInstr &MI);
117 void EmitTlsCall(const MachineInstr *MI, MCSymbolRefExpr::VariantKind VK);
144 void EmitInstruction(const MachineInstr *MI) override;
205 void PPCAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
249 bool PPCAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
299 bool PPCAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
352 void PPCAsmPrinter::LowerSTACKMAP(StackMaps &SM, const MachineInstr &MI) {
379 void PPCAsmPrinter::LowerPATCHPOINT(StackMaps &SM, const MachineInstr &MI) {
477 void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI,
536 void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
1184 void PPCLinuxAsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/PowerPC/PPCBranchCoalescing.cpp 177 bool canMoveToBeginning(const MachineInstr &MI,
179 bool canMoveToEnd(const MachineInstr &MI,
244 for (auto &I : Cand.BranchBlock->terminators()) {
361 MachineInstr *Op1Def = MRI->getVRegDef(Op1.getReg());
362 MachineInstr *Op2Def = MRI->getVRegDef(Op2.getReg());
401 MachineInstr &PHIInst = *Iter;
421 bool PPCBranchCoalescing::canMoveToBeginning(const MachineInstr &MI,
429 for (auto &Use : MRI->use_instructions(Def.getReg())) {
452 bool PPCBranchCoalescing::canMoveToEnd(const MachineInstr &MI,
461 MachineInstr *DefInst = MRI->getVRegDef(Use.getReg());
540 for (auto &Use : MRI->use_instructions(Def.getReg())) {
685 MachineInstr &CurrInst = *I;
lib/Target/PowerPC/PPCBranchSelector.cpp 137 for (MachineInstr &MI : *MBB) {
330 MachineInstr &OldBranch = *I;
lib/Target/PowerPC/PPCCTRLoops.cpp 113 static bool clobbersCTR(const MachineInstr &MI) {
lib/Target/PowerPC/PPCExpandISEL.cpp 57 typedef SmallVector<MachineInstr *, 4> BlockISELList;
74 bool canMerge(MachineInstr *PrevPushedMI, MachineInstr *MI);
74 bool canMerge(MachineInstr *PrevPushedMI, MachineInstr *MI);
77 static bool isISEL(const MachineInstr &MI) {
82 static bool isISEL8(const MachineInstr &MI) {
160 for (MachineInstr &MI : MBB)
181 bool PPCExpandISEL::canMerge(MachineInstr *PrevPushedMI, MachineInstr *MI) {
181 bool PPCExpandISEL::canMerge(MachineInstr *PrevPushedMI, MachineInstr *MI) {
395 for (MachineInstr &MI : *MBB)
lib/Target/PowerPC/PPCFastISel.cpp 110 bool tryToFoldLoadIntoMI(MachineInstr *MI, unsigned OpNo,
2293 bool PPCFastISel::tryToFoldLoadIntoMI(MachineInstr *MI, unsigned OpNo,
lib/Target/PowerPC/PPCFrameLowering.cpp 293 static void RemoveVRSaveCode(MachineInstr &MI) {
339 static void HandleVRSaveUpdate(MachineInstr &MI, const TargetInstrInfo &TII) {
364 const MachineInstr &Ret = MBB.back();
lib/Target/PowerPC/PPCHazardRecognizers.cpp 328 MachineInstr *MI = SU->getInstr();
386 MachineInstr *MI = SU->getInstr();
lib/Target/PowerPC/PPCISelLowering.cpp10298 PPCTargetLowering::EmitAtomicBinary(MachineInstr &MI, MachineBasicBlock *BB,
10417 MachineInstr &MI, MachineBasicBlock *BB,
10610 PPCTargetLowering::emitEHSjLjSetJmp(MachineInstr &MI,
10752 PPCTargetLowering::emitEHSjLjLongJmp(MachineInstr &MI,
10854 PPCTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
lib/Target/PowerPC/PPCISelLowering.h 760 EmitInstrWithCustomInserter(MachineInstr &MI,
762 MachineBasicBlock *EmitAtomicBinary(MachineInstr &MI,
768 MachineBasicBlock *EmitPartwordAtomicBinary(MachineInstr &MI,
775 MachineBasicBlock *emitEHSjLjSetJmp(MachineInstr &MI,
778 MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr &MI,
lib/Target/PowerPC/PPCInstrInfo.cpp 146 const MachineInstr &MI,
176 const MachineInstr &DefMI, unsigned DefIdx,
177 const MachineInstr &UseMI,
233 bool PPCInstrInfo::isAssociativeAndCommutative(const MachineInstr &Inst) const {
268 MachineInstr &Root,
283 bool PPCInstrInfo::isCoalescableExtInstr(const MachineInstr &MI,
298 unsigned PPCInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
318 bool PPCInstrInfo::isReallyTriviallyReMaterializable(const MachineInstr &MI,
352 unsigned PPCInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
368 MachineInstr *PPCInstrInfo::commuteInstructionImpl(MachineInstr &MI, bool NewMI,
368 MachineInstr *PPCInstrInfo::commuteInstructionImpl(MachineInstr &MI, bool NewMI,
452 bool PPCInstrInfo::findCommutedOpIndices(const MachineInstr &MI,
525 MachineInstr &LastInst = *I;
587 MachineInstr &SecondLastInst = *I;
1202 SmallVectorImpl<MachineInstr *> &NewMIs) const {
1231 SmallVector<MachineInstr *, 4> NewMIs;
1258 SmallVectorImpl<MachineInstr *> &NewMIs)
1283 SmallVector<MachineInstr*, 4> NewMIs;
1324 bool PPCInstrInfo::FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
1324 bool PPCInstrInfo::FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
1415 bool PPCInstrInfo::isPredicated(const MachineInstr &MI) const {
1426 bool PPCInstrInfo::isUnpredicatedTerminator(const MachineInstr &MI) const {
1437 bool PPCInstrInfo::PredicateInstruction(MachineInstr &MI,
1554 bool PPCInstrInfo::DefinesPredicate(MachineInstr &MI,
1590 bool PPCInstrInfo::isPredicable(const MachineInstr &MI) const {
1606 bool PPCInstrInfo::analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
1636 bool PPCInstrInfo::optimizeCompareInstr(MachineInstr &CmpInstr, unsigned SrcReg,
1670 MachineInstr *MI = MRI->getUniqueVRegDef(SrcReg);
1701 MachineInstr *UseMI = &*I;
1742 MachineInstr *Sub = nullptr;
1764 MachineInstr *UseMI = &*MRI->use_instr_begin(CRReg);
1801 const MachineInstr &Instr = *I;
1877 MachineInstr *UseMI = &*I;
2010 unsigned PPCInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
2066 bool PPCInstrInfo::expandVSXMemPseudo(MachineInstr &MI) const {
2132 bool PPCInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
2269 void PPCInstrInfo::replaceInstrOperandWithImm(MachineInstr &MI,
2300 void PPCInstrInfo::replaceInstrWithLI(MachineInstr &MI,
2323 MachineInstr *PPCInstrInfo::getDefMIPostRA(unsigned Reg, MachineInstr &MI,
2323 MachineInstr *PPCInstrInfo::getDefMIPostRA(unsigned Reg, MachineInstr &MI,
2340 MachineInstr *PPCInstrInfo::getForwardingDefMI(
2341 MachineInstr &MI,
2345 MachineInstr *DefMI = nullptr;
2399 MachineInstr *DefMI = getDefMIPostRA(Reg, MI, SeenIntermediateUse);
2453 void PPCInstrInfo::fixupIsDeadOrKill(MachineInstr &StartMI, MachineInstr &EndMI,
2453 void PPCInstrInfo::fixupIsDeadOrKill(MachineInstr &StartMI, MachineInstr &EndMI,
2554 bool PPCInstrInfo::foldFrameOffset(MachineInstr &MI) const {
2574 MachineInstr *ADDMI = getDefMIPostRA(ToBeDeletedReg, MI, OtherIntermediateUse);
2586 MachineInstr *ADDIMI = nullptr;
2644 bool PPCInstrInfo::isADDIInstrEligibleForFolding(MachineInstr &ADDIMI,
2657 bool PPCInstrInfo::isADDInstrEligibleForFolding(MachineInstr &ADDMI) const {
2664 bool PPCInstrInfo::isImmInstrEligibleForFolding(MachineInstr &MI,
2707 bool PPCInstrInfo::isValidToBeChangedReg(MachineInstr *ADDMI, unsigned Index,
2708 MachineInstr *&ADDIMI,
2752 bool PPCInstrInfo::convertToImmediateForm(MachineInstr &MI,
2753 MachineInstr **KilledDef) const {
2759 MachineInstr *DefMI = getForwardingDefMI(MI, ForwardingOperand,
2828 for (auto &CompareUseMI : MRI->use_instructions(DefReg)) {
3407 static void swapMIOperands(MachineInstr &MI, unsigned Op1, unsigned Op2) {
3447 bool PPCInstrInfo::isUseMIElgibleForForwarding(MachineInstr &MI,
3485 bool PPCInstrInfo::isDefMIElgibleForForwarding(MachineInstr &DefMI,
3505 const MachineOperand &RegMO, const MachineInstr &DefMI,
3506 const MachineInstr &MI, bool KillDefMI,
3544 const MachineInstr &DefMI,
3601 MachineInstr &MI, const ImmInstrInfo &III, unsigned OpNoForForwarding,
3602 MachineInstr &DefMI, bool KillDefMI) const {
3712 bool PPCInstrInfo::transformToImmFormFedByLI(MachineInstr &MI,
3715 MachineInstr &DefMI,
3869 static bool isSignExtendingOp(const MachineInstr &MI) {
3910 static bool isZeroExtendingOp(const MachineInstr &MI) {
3977 bool PPCInstrInfo::isTOCSaveMI(const MachineInstr &MI) const {
3994 PPCInstrInfo::isSignOrZeroExtended(const MachineInstr &MI, bool SignExt,
4034 const MachineInstr &CallMI = *(--II);
4055 const MachineInstr *SrcMI = MRI->getVRegDef(SrcReg);
4079 const MachineInstr *SrcMI = MRI->getVRegDef(SrcReg);
4108 const MachineInstr *SrcMI = MRI->getVRegDef(SrcReg);
4135 const MachineInstr *MISrc1 = MRI->getVRegDef(SrcReg1);
4136 const MachineInstr *MISrc2 = MRI->getVRegDef(SrcReg2);
4160 MachineInstr *Loop, *EndLoop, *LoopCount;
4166 PPCPipelinerLoopInfo(MachineInstr *Loop, MachineInstr *EndLoop,
4166 PPCPipelinerLoopInfo(MachineInstr *Loop, MachineInstr *EndLoop,
4167 MachineInstr *LoopCount)
4179 bool shouldIgnoreForPipelining(const MachineInstr *MI) const override {
4238 if (MachineInstr *LoopInst = findLoopInstr(*Preheader, Visited)) {
4241 MachineInstr *LoopCount = MRI.getUniqueVRegDef(LoopCountReg);
4248 MachineInstr *PPCInstrInfo::findLoopInstr(
4255 for (auto &I : PreHeader.instrs())
4264 const MachineInstr &LdSt,
4287 const MachineInstr &MIa, const MachineInstr &MIb) const {
4287 const MachineInstr &MIa, const MachineInstr &MIb) const {
lib/Target/PowerPC/PPCInstrInfo.h 118 SmallVectorImpl<MachineInstr *> &NewMIs) const;
122 SmallVectorImpl<MachineInstr *> &NewMIs) const;
126 bool transformToImmFormFedByLI(MachineInstr &MI, const ImmInstrInfo &III,
127 unsigned ConstantOpNo, MachineInstr &DefMI,
131 bool transformToImmFormFedByAdd(MachineInstr &MI, const ImmInstrInfo &III,
132 unsigned ConstantOpNo, MachineInstr &DefMI,
139 MachineInstr *getForwardingDefMI(MachineInstr &MI,
139 MachineInstr *getForwardingDefMI(MachineInstr &MI,
145 bool isUseMIElgibleForForwarding(MachineInstr &MI, const ImmInstrInfo &III,
147 bool isDefMIElgibleForForwarding(MachineInstr &DefMI,
152 const MachineInstr &DefMI,
156 const MachineInstr &DefMI,
157 const MachineInstr &MI, bool KillDefMI,
174 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
174 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
209 const MachineInstr &MI,
213 const MachineInstr &DefMI, unsigned DefIdx,
214 const MachineInstr &UseMI,
224 const MachineInstr &DefMI,
240 MachineInstr &Root,
243 bool isAssociativeAndCommutative(const MachineInstr &Inst) const override;
245 bool isCoalescableExtInstr(const MachineInstr &MI,
248 unsigned isLoadFromStackSlot(const MachineInstr &MI,
250 bool isReallyTriviallyReMaterializable(const MachineInstr &MI,
252 unsigned isStoreToStackSlot(const MachineInstr &MI,
255 bool findCommutedOpIndices(const MachineInstr &MI, unsigned &SrcOpIdx1,
307 bool FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, unsigned Reg,
307 bool FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, unsigned Reg,
336 bool isPredicated(const MachineInstr &MI) const override;
338 bool isUnpredicatedTerminator(const MachineInstr &MI) const override;
340 bool PredicateInstruction(MachineInstr &MI,
346 bool DefinesPredicate(MachineInstr &MI,
349 bool isPredicable(const MachineInstr &MI) const override;
353 bool analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
356 bool optimizeCompareInstr(MachineInstr &CmpInstr, unsigned SrcReg,
364 bool getMemOperandWithOffsetWidth(const MachineInstr &LdSt,
372 areMemAccessesTriviallyDisjoint(const MachineInstr &MIa,
373 const MachineInstr &MIb) const override;
378 unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
392 bool expandVSXMemPseudo(MachineInstr &MI) const;
395 bool expandPostRAPseudo(MachineInstr &MI) const override;
406 bool isTOCSaveMI(const MachineInstr &MI) const;
408 bool isSignOrZeroExtended(const MachineInstr &MI, bool SignExt,
413 bool isSignExtended(const MachineInstr &MI, const unsigned depth = 0) const {
419 bool isZeroExtended(const MachineInstr &MI, const unsigned depth = 0) const {
423 bool convertToImmediateForm(MachineInstr &MI,
424 MachineInstr **KilledDef = nullptr) const;
425 bool foldFrameOffset(MachineInstr &MI) const;
426 bool isADDIInstrEligibleForFolding(MachineInstr &ADDIMI, int64_t &Imm) const;
427 bool isADDInstrEligibleForFolding(MachineInstr &ADDMI) const;
428 bool isImmInstrEligibleForFolding(MachineInstr &MI, unsigned &BaseReg,
432 bool isValidToBeChangedReg(MachineInstr *ADDMI, unsigned Index,
433 MachineInstr *&ADDIMI, int64_t &OffsetAddi,
445 void fixupIsDeadOrKill(MachineInstr &StartMI, MachineInstr &EndMI,
445 void fixupIsDeadOrKill(MachineInstr &StartMI, MachineInstr &EndMI,
447 void replaceInstrWithLI(MachineInstr &MI, const LoadImmediateInfo &LII) const;
448 void replaceInstrOperandWithImm(MachineInstr &MI, unsigned OpNo,
456 MachineInstr *getDefMIPostRA(unsigned Reg, MachineInstr &MI,
456 MachineInstr *getDefMIPostRA(unsigned Reg, MachineInstr &MI,
498 MachineInstr *
lib/Target/PowerPC/PPCMCInstLower.cpp 150 void llvm::LowerPPCMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI,
lib/Target/PowerPC/PPCMIPeephole.cpp 105 bool eliminateRedundantTOCSaves(std::map<MachineInstr *, bool> &TOCSaves);
106 bool combineSEXTAndSHL(MachineInstr &MI, MachineInstr *&ToErase);
106 bool combineSEXTAndSHL(MachineInstr &MI, MachineInstr *&ToErase);
107 bool emitRLDICWhenLoweringJumpTables(MachineInstr &MI);
108 void UpdateTOCSaves(std::map<MachineInstr *, bool> &TOCSaves,
109 MachineInstr *MI);
145 static MachineInstr *getVRegDefOrNull(MachineOperand *Op,
161 getKnownLeadingZeroCount(MachineInstr *MI, const PPCInstrInfo *TII) {
218 std::map<MachineInstr *, bool> &TOCSaves, MachineInstr *MI) {
218 std::map<MachineInstr *, bool> &TOCSaves, MachineInstr *MI) {
246 MachineInstr *CurrInst = It->first;
264 MachineInstr* ToErase = nullptr;
265 std::map<MachineInstr *, bool> TOCSaves;
277 for (MachineInstr &MI : MBB) {
297 for (MachineInstr &MI : MBB) {
348 MachineInstr *DefMI = MRI->getVRegDef(TrueReg1);
361 MachineInstr *LoadMI = MRI->getVRegDef(DefReg);
448 MachineInstr *DefMI = MRI->getVRegDef(TrueReg);
458 MachineInstr *Splt = MRI->getVRegDef(ConvReg);
511 MachineInstr *DefMI = MRI->getVRegDef(TrueReg);
523 MachineInstr *P1 = MRI->getVRegDef(DefsReg1);
524 MachineInstr *P2 = MRI->getVRegDef(DefsReg2);
537 MachineInstr &Use = *(MRI->use_instr_begin(FRSPDefines));
572 MachineInstr *SrcMI = MRI->getVRegDef(NarrowReg);
616 MachineInstr *SrcMI = MRI->getVRegDef(NarrowReg);
685 MachineInstr *SrcMI = MRI->getVRegDef(SrcReg);
690 MachineInstr *ImpDefMI, *SubRegMI;
723 MachineInstr *DefPhiMI = getVRegDefOrNull(PhiOp, MRI);
733 MachineInstr *DefPhiMI = getVRegDefOrNull(PhiOp, MRI);
734 MachineInstr *DefDomMI = getVRegDefOrNull(DominatorOp, MRI);
739 MachineInstr *LiMI =
767 MachineInstr *DefPhiMI = getVRegDefOrNull(&Op1, MRI);
769 MachineInstr *LiMI = getVRegDefOrNull(&DefPhiMI->getOperand(i), MRI);
832 static bool isEqOrNe(MachineInstr *BI) {
865 static unsigned getPredicateToDecImm(MachineInstr *BI, MachineInstr *CMPI) {
865 static unsigned getPredicateToDecImm(MachineInstr *BI, MachineInstr *CMPI) {
884 static unsigned getPredicateToIncImm(MachineInstr *BI, MachineInstr *CMPI) {
884 static unsigned getPredicateToIncImm(MachineInstr *BI, MachineInstr *CMPI) {
902 static unsigned getIncomingRegForBlock(MachineInstr *Phi,
921 MachineInstr *Inst = MRI->getVRegDef(SrcReg);
955 MachineInstr *CMPI = MRI->getVRegDef(CndReg);
1012 MachineInstr *BI = &*MBB.getFirstInstrTerminator();
1013 MachineInstr *CMPI = MRI->getVRegDef(BI->getOperand(1).getReg());
1016 MachineInstr *Inst = MRI->getVRegDef(CMPI->getOperand(I).getReg());
1034 std::map<MachineInstr *, bool> &TOCSaves) {
1111 MachineInstr *BI1 = &*MBB1->getFirstInstrTerminator();
1112 MachineInstr *CMPI1 = MRI->getVRegDef(BI1->getOperand(1).getReg());
1114 MachineInstr *BI2 = &*MBB2.getFirstInstrTerminator();
1115 MachineInstr *CMPI2 = MRI->getVRegDef(BI2->getOperand(1).getReg());
1282 MachineInstr *Inst = MRI->getVRegDef(CMPI2->getOperand(I).getReg());
1331 bool PPCMIPeephole::emitRLDICWhenLoweringJumpTables(MachineInstr &MI) {
1339 MachineInstr *SrcMI = MRI->getVRegDef(SrcReg);
1395 bool PPCMIPeephole::combineSEXTAndSHL(MachineInstr &MI,
1396 MachineInstr *&ToErase) {
1419 MachineInstr *SrcMI = MRI->getVRegDef(SrcReg);
1439 MachineInstr *NewInstr =
lib/Target/PowerPC/PPCPreEmitPeephole.cpp 76 DenseSet<MachineInstr *> InstrsToErase;
158 for (MachineInstr *MI : InstrsToErase) {
171 SmallVector<MachineInstr *, 4> InstrsToErase;
174 for (MachineInstr &MI : MBB) {
197 MachineInstr *DefMIToErase = nullptr;
222 MachineInstr *Br = &*I;
225 MachineInstr *CRSetMI = nullptr;
284 for (MachineInstr *MI : InstrsToErase) {
lib/Target/PowerPC/PPCQPXLoadSplat.cpp 66 SmallVector<MachineInstr *, 4> Splats;
69 MachineInstr *MI = &*MBBI;
81 MachineInstr *SMI = *SI;
lib/Target/PowerPC/PPCReduceCRLogicals.cpp 57 for (auto &MI : Successor->instrs()) {
67 MachineInstr *DefMI = MRI->getVRegDef(MI.getOperand(i - 1).getReg());
90 for (auto &MI : Successor->instrs()) {
107 MachineInstr *OrigBranch;
108 MachineInstr *SplitBefore;
109 MachineInstr *SplitCond;
114 MachineInstr *MIToDelete;
115 MachineInstr *NewCond;
252 static bool isBinary(MachineInstr &MI) {
256 static bool isNullary(MachineInstr &MI) {
356 MachineInstr *MI;
358 std::pair<MachineInstr*, MachineInstr*> CopyDefs;
358 std::pair<MachineInstr*, MachineInstr*> CopyDefs;
359 std::pair<MachineInstr*, MachineInstr*> TrueDefs;
359 std::pair<MachineInstr*, MachineInstr*> TrueDefs;
389 static bool isCRLogical(MachineInstr &MI) {
410 MachineInstr *lookThroughCRCopy(unsigned Reg, unsigned &Subreg,
411 MachineInstr *&CpDef);
425 CRLogicalOpInfo createCRLogicalOpInfo(MachineInstr &MI);
462 PPCReduceCRLogicals::createCRLogicalOpInfo(MachineInstr &MIParam) {
471 MachineInstr *Def1 = lookThroughCRCopy(MIParam.getOperand(1).getReg(),
480 MachineInstr *Def2 = lookThroughCRCopy(MIParam.getOperand(2).getReg(),
497 for (MachineInstr &UseMI :
534 MachineInstr *PPCReduceCRLogicals::lookThroughCRCopy(unsigned Reg,
536 MachineInstr *&CpDef) {
540 MachineInstr *Copy = MRI->getVRegDef(Reg);
642 MachineInstr *SplitBefore = &*Def2It;
656 MachineInstr *Branch =
684 MachineInstr *SplitCond =
712 for (MachineInstr &MI : MBB) {
lib/Target/PowerPC/PPCRegisterInfo.cpp 495 MachineInstr &MI = *II;
614 MachineInstr &MI = *II;
645 MachineInstr &MI = *II; // ; SPILL_CR <SrcReg>, <offset>
690 MachineInstr &MI = *II; // ; <DestReg> = RESTORE_CR <offset>
733 MachineInstr &MI = *II; // ; SPILL_CRBIT <SrcReg>, <offset>
813 MachineInstr &MI = *II; // ; <DestReg> = RESTORE_CRBIT <offset>
863 MachineInstr &MI = *II; // ; SPILL_VRSAVE <SrcReg>, <offset>
889 MachineInstr &MI = *II; // ; <DestReg> = RESTORE_VRSAVE <offset>
963 static unsigned offsetMinAlign(const MachineInstr &MI) {
969 static unsigned getOffsetONFromFION(const MachineInstr &MI,
989 MachineInstr &MI = *II;
1175 needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const {
1241 void PPCRegisterInfo::resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
1265 bool PPCRegisterInfo::isFrameOffsetLegal(const MachineInstr *MI,
lib/Target/PowerPC/PPCRegisterInfo.h 134 bool needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const override;
138 void resolveFrameIndex(MachineInstr &MI, unsigned BaseReg,
140 bool isFrameOffsetLegal(const MachineInstr *MI, unsigned BaseReg,
lib/Target/PowerPC/PPCTLSDynamicCall.cpp 55 MachineInstr &MI = *I;
116 MachineInstr *Addi = BuildMI(MBB, I, DL, TII->get(Opc1), GPR3)
125 MachineInstr *Call = (BuildMI(MBB, I, DL, TII->get(Opc2), GPR3)
lib/Target/PowerPC/PPCTOCRegDeps.cpp 96 bool hasTOCLoReloc(const MachineInstr &MI) {
117 for (auto &MI : MBB) {
lib/Target/PowerPC/PPCVSXCopy.cpp 87 for (MachineInstr &MI : MBB) {
lib/Target/PowerPC/PPCVSXFMAMutate.cpp 77 MachineInstr &MI = *I;
117 MachineInstr *AddendMI = LIS->getInstructionFromIndex(AddendValNo->def);
285 MachineInstr *UseMI = UseMO.getParent();
lib/Target/PowerPC/PPCVSXSwapRemoval.cpp 68 MachineInstr *VSEMI;
108 DenseMap<MachineInstr*, int> SwapMap;
127 int addSwapEntry(MachineInstr *MI, PPCVSXSwapEntry &SwapEntry);
150 void insertSwap(MachineInstr *MI, MachineBasicBlock::iterator InsertPoint,
245 for (MachineInstr &MI : MBB) {
536 int PPCVSXSwapRemoval::addSwapEntry(MachineInstr *MI,
557 MachineInstr *MI = MRI->getVRegDef(SrcReg);
591 MachineInstr *MI = SwapVector[EntryIdx].VSEMI;
617 MachineInstr* DefMI = MRI->getVRegDef(Reg);
669 MachineInstr *MI = SwapVector[EntryIdx].VSEMI;
676 for (MachineInstr &UseMI : MRI->use_nodbg_instructions(DefReg)) {
697 MachineInstr *MI = SwapVector[EntryIdx].VSEMI;
699 MachineInstr *DefMI = MRI->getVRegDef(UseReg);
719 for (MachineInstr &UseMI : MRI->use_nodbg_instructions(DefReg)) {
758 MachineInstr *MI = SwapVector[EntryIdx].VSEMI;
761 for (MachineInstr &UseMI : MRI->use_nodbg_instructions(DefReg)) {
774 MachineInstr *MI = SwapVector[EntryIdx].VSEMI;
776 MachineInstr *DefMI = MRI->getVRegDef(UseReg);
799 void PPCVSXSwapRemoval::insertSwap(MachineInstr *MI,
823 MachineInstr *MI = SwapVector[EntryIdx].VSEMI;
862 MachineInstr *MI = SwapVector[EntryIdx].VSEMI;
892 MachineInstr *MI = SwapVector[EntryIdx].VSEMI;
949 MachineInstr *MI = SwapVector[EntryIdx].VSEMI;
972 MachineInstr *MI = SwapVector[EntryIdx].VSEMI;
lib/Target/RISCV/RISCV.h 33 void LowerRISCVMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI,
lib/Target/RISCV/RISCVAsmPrinter.cpp 43 void EmitInstruction(const MachineInstr *MI) override;
45 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
47 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
52 const MachineInstr *MI);
74 void RISCVAsmPrinter::EmitInstruction(const MachineInstr *MI) {
84 bool RISCVAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
125 bool RISCVAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
lib/Target/RISCV/RISCVExpandPseudoInsts.cpp 233 static void doAtomicBinOpExpansion(const RISCVInstrInfo *TII, MachineInstr &MI,
296 const RISCVInstrInfo *TII, MachineInstr &MI, DebugLoc DL,
362 MachineInstr &MI = *MBBI;
415 MachineInstr &MI = *MBBI;
531 MachineInstr &MI = *MBBI;
629 MachineInstr &MI = *MBBI;
lib/Target/RISCV/RISCVFrameLowering.cpp 147 adjustReg(MBB, MBBI, DL, SPReg, SPReg, -StackSize, MachineInstr::FrameSetup);
182 StackSize - RVFI->getVarArgsSaveSize(), MachineInstr::FrameSetup);
197 MachineInstr::FrameSetup);
256 MachineInstr::FrameDestroy);
266 MachineInstr::FrameDestroy);
313 adjustReg(MBB, MBBI, DL, SPReg, SPReg, StackSize, MachineInstr::FrameDestroy);
460 adjustReg(MBB, MI, DL, SPReg, SPReg, Amount, MachineInstr::NoFlags);
lib/Target/RISCV/RISCVISelLowering.cpp 1089 static MachineBasicBlock *emitReadCycleWidePseudo(MachineInstr &MI,
1151 static MachineBasicBlock *emitSplitF64Pseudo(MachineInstr &MI,
1182 static MachineBasicBlock *emitBuildPairF64Pseudo(MachineInstr &MI,
1215 static bool isSelectPseudo(MachineInstr &MI) {
1226 static MachineBasicBlock *emitSelectPseudo(MachineInstr &MI,
1256 SmallVector<MachineInstr *, 4> SelectDebugValues;
1260 MachineInstr *LastSelectPseudo = &MI;
1301 for (MachineInstr *DebugInstr : SelectDebugValues) {
1350 RISCVTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
lib/Target/RISCV/RISCVISelLowering.h 108 EmitInstrWithCustomInserter(MachineInstr &MI,
lib/Target/RISCV/RISCVInstrInfo.cpp 36 unsigned RISCVInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
62 unsigned RISCVInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
203 static void parseCondBranch(MachineInstr &LastInst, MachineBasicBlock *&Target,
348 MachineInstr &MI = *BuildMI(&MBB, DL, get(RISCV::PseudoBR)).addMBB(TBB);
356 MachineInstr &CondMI =
366 MachineInstr &MI = *BuildMI(&MBB, DL, get(RISCV::PseudoBR)).addMBB(FBB);
399 MachineInstr &LuiMI = *BuildMI(MBB, II, DL, get(RISCV::LUI), ScratchReg)
422 RISCVInstrInfo::getBranchDestBlock(const MachineInstr &MI) const {
450 unsigned RISCVInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
478 bool RISCVInstrInfo::isAsCheapAsAMove(const MachineInstr &MI) const {
491 bool RISCVInstrInfo::verifyInstruction(const MachineInstr &MI,
lib/Target/RISCV/RISCVInstrInfo.h 31 unsigned isLoadFromStackSlot(const MachineInstr &MI,
33 unsigned isStoreToStackSlot(const MachineInstr &MI,
54 MachineInstr::MIFlag Flag = MachineInstr::NoFlags) const;
56 unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
79 MachineBasicBlock *getBranchDestBlock(const MachineInstr &MI) const override;
84 bool isAsCheapAsAMove(const MachineInstr &MI) const override;
86 bool verifyInstruction(const MachineInstr &MI,
lib/Target/RISCV/RISCVInstructionSelector.cpp 37 bool select(MachineInstr &I) override;
41 bool selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const;
83 bool RISCVInstructionSelector::select(MachineInstr &I) {
lib/Target/RISCV/RISCVMCInstLower.cpp 128 void llvm::LowerRISCVMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI,
lib/Target/RISCV/RISCVMergeBaseOffset.cpp 43 bool detectLuiAddiGlobal(MachineInstr &LUI, MachineInstr *&ADDI);
43 bool detectLuiAddiGlobal(MachineInstr &LUI, MachineInstr *&ADDI);
45 bool detectAndFoldOffset(MachineInstr &HiLUI, MachineInstr &LoADDI);
45 bool detectAndFoldOffset(MachineInstr &HiLUI, MachineInstr &LoADDI);
46 void foldOffset(MachineInstr &HiLUI, MachineInstr &LoADDI, MachineInstr &Tail,
46 void foldOffset(MachineInstr &HiLUI, MachineInstr &LoADDI, MachineInstr &Tail,
46 void foldOffset(MachineInstr &HiLUI, MachineInstr &LoADDI, MachineInstr &Tail,
48 bool matchLargeOffset(MachineInstr &TailAdd, Register GSReg, int64_t &Offset);
62 std::set<MachineInstr *> DeadInstrs;
80 bool RISCVMergeBaseOffsetOpt::detectLuiAddiGlobal(MachineInstr &HiLUI,
81 MachineInstr *&LoADDI) {
102 void RISCVMergeBaseOffsetOpt::foldOffset(MachineInstr &HiLUI,
103 MachineInstr &LoADDI,
104 MachineInstr &Tail, int64_t Offset) {
134 bool RISCVMergeBaseOffsetOpt::matchLargeOffset(MachineInstr &TailAdd,
146 MachineInstr &OffsetTail = *MRI->getVRegDef(Reg);
154 MachineInstr &OffsetLui =
179 bool RISCVMergeBaseOffsetOpt::detectAndFoldOffset(MachineInstr &HiLUI,
180 MachineInstr &LoADDI) {
184 MachineInstr &Tail = *MRI->use_begin(DestReg)->getParent();
266 for (MachineInstr &HiLUI : MBB) {
267 MachineInstr *LoADDI = nullptr;
277 for (auto *MI : DeadInstrs)
lib/Target/RISCV/RISCVRegisterInfo.cpp 107 MachineInstr &MI = *II;
lib/Target/Sparc/LeonPasses.cpp 49 MachineInstr &MI = *MBBI;
84 MachineInstr &MI = *MBBI;
136 MachineInstr &MI = *MBBI;
lib/Target/Sparc/LeonPasses.h 36 int GetRegIndexForOperand(MachineInstr &MI, int OperandIndex);
lib/Target/Sparc/Sparc.h 32 void LowerSparcMachineInstrToMCInst(const MachineInstr *MI,
lib/Target/Sparc/SparcAsmPrinter.cpp 51 void printOperand(const MachineInstr *MI, int opNum, raw_ostream &OS);
52 void printMemOperand(const MachineInstr *MI, int opNum, raw_ostream &OS,
56 void EmitInstruction(const MachineInstr *MI) override;
62 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
64 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
67 void LowerGETPCXAndEmitMCInsts(const MachineInstr *MI,
169 void SparcAsmPrinter::LowerGETPCXAndEmitMCInsts(const MachineInstr *MI,
252 void SparcAsmPrinter::EmitInstruction(const MachineInstr *MI)
291 void SparcAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
382 void SparcAsmPrinter::printMemOperand(const MachineInstr *MI, int opNum,
406 bool SparcAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
427 bool SparcAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
lib/Target/Sparc/SparcFrameLowering.cpp 208 MachineInstr &MI = *I;
lib/Target/Sparc/SparcISelLowering.cpp 3099 SparcTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
3117 SparcTargetLowering::expandSelectCC(MachineInstr &MI, MachineBasicBlock *BB,
lib/Target/Sparc/SparcISelLowering.h 71 EmitInstrWithCustomInserter(MachineInstr &MI,
211 MachineBasicBlock *expandSelectCC(MachineInstr &MI, MachineBasicBlock *BB,
lib/Target/Sparc/SparcInstrInfo.cpp 43 unsigned SparcInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
62 unsigned SparcInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
153 static void parseCondBranch(MachineInstr *LastInst, MachineBasicBlock *&Target,
172 MachineInstr *LastInst = &*I;
190 MachineInstr *SecondLastInst = &*I;
375 MachineInstr *MovMI = nullptr;
494 bool SparcInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
lib/Target/Sparc/SparcInstrInfo.h 56 unsigned isLoadFromStackSlot(const MachineInstr &MI,
64 unsigned isStoreToStackSlot(const MachineInstr &MI,
102 bool expandPostRAPseudo(MachineInstr &MI) const override;
lib/Target/Sparc/SparcMCInstLower.cpp 29 static MCOperand LowerSymbolOperand(const MachineInstr *MI,
67 static MCOperand LowerOperand(const MachineInstr *MI,
93 void llvm::LowerSparcMachineInstrToMCInst(const MachineInstr *MI,
lib/Target/Sparc/SparcRegisterInfo.cpp 169 MachineInstr &MI = *II;
188 MachineInstr *StMI =
200 MachineInstr *LdMI =
lib/Target/SystemZ/SystemZAsmPrinter.cpp 31 static MCInst lowerRILow(const MachineInstr *MI, unsigned Opcode) {
45 static MCInst lowerRIHigh(const MachineInstr *MI, unsigned Opcode) {
59 static MCInst lowerRIEfLow(const MachineInstr *MI, unsigned Opcode) {
87 static void lowerAlignmentHint(const MachineInstr *MI, MCInst &LoweredMI,
106 static MCInst lowerSubvectorLoad(const MachineInstr *MI, unsigned Opcode) {
116 static MCInst lowerSubvectorStore(const MachineInstr *MI, unsigned Opcode) {
125 void SystemZAsmPrinter::EmitInstruction(const MachineInstr *MI) {
553 void SystemZAsmPrinter::LowerFENTRY_CALL(const MachineInstr &MI,
569 void SystemZAsmPrinter::LowerSTACKMAP(const MachineInstr &MI) {
602 void SystemZAsmPrinter::LowerPATCHPOINT(const MachineInstr &MI,
682 bool SystemZAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
693 bool SystemZAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
lib/Target/SystemZ/SystemZAsmPrinter.h 35 void EmitInstruction(const MachineInstr *MI) override;
38 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
40 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
49 void LowerFENTRY_CALL(const MachineInstr &MI, SystemZMCInstLower &MCIL);
50 void LowerSTACKMAP(const MachineInstr &MI);
51 void LowerPATCHPOINT(const MachineInstr &MI, SystemZMCInstLower &Lower);
lib/Target/SystemZ/SystemZElimCompare.cpp 83 Reference getRegReferences(MachineInstr &MI, unsigned Reg);
84 bool convertToBRCT(MachineInstr &MI, MachineInstr &Compare,
84 bool convertToBRCT(MachineInstr &MI, MachineInstr &Compare,
85 SmallVectorImpl<MachineInstr *> &CCUsers);
86 bool convertToLoadAndTrap(MachineInstr &MI, MachineInstr &Compare,
86 bool convertToLoadAndTrap(MachineInstr &MI, MachineInstr &Compare,
87 SmallVectorImpl<MachineInstr *> &CCUsers);
88 bool convertToLoadAndTest(MachineInstr &MI, MachineInstr &Compare,
88 bool convertToLoadAndTest(MachineInstr &MI, MachineInstr &Compare,
89 SmallVectorImpl<MachineInstr *> &CCUsers);
90 bool adjustCCMasksForInstr(MachineInstr &MI, MachineInstr &Compare,
90 bool adjustCCMasksForInstr(MachineInstr &MI, MachineInstr &Compare,
91 SmallVectorImpl<MachineInstr *> &CCUsers,
93 bool optimizeCompareZero(MachineInstr &Compare,
94 SmallVectorImpl<MachineInstr *> &CCUsers);
95 bool fuseCompareOperations(MachineInstr &Compare,
96 SmallVectorImpl<MachineInstr *> &CCUsers);
115 static bool preservesValueOf(MachineInstr &MI, unsigned Reg) {
138 static bool resultTests(MachineInstr &MI, unsigned Reg) {
147 Reference SystemZElimCompare::getRegReferences(MachineInstr &MI, unsigned Reg) {
170 static bool isLoadAndTestAsCmp(MachineInstr &MI) {
181 static unsigned getCompareSourceReg(MachineInstr &Compare) {
196 MachineInstr &MI, MachineInstr &Compare,
196 MachineInstr &MI, MachineInstr &Compare,
197 SmallVectorImpl<MachineInstr *> &CCUsers) {
215 MachineInstr *Branch = CCUsers[0];
250 MachineInstr &MI, MachineInstr &Compare,
250 MachineInstr &MI, MachineInstr &Compare,
251 SmallVectorImpl<MachineInstr *> &CCUsers) {
259 MachineInstr *Branch = CCUsers[0];
290 MachineInstr &MI, MachineInstr &Compare,
290 MachineInstr &MI, MachineInstr &Compare,
291 SmallVectorImpl<MachineInstr *> &CCUsers) {
315 MachineInstr &MI, MachineInstr &Compare,
315 MachineInstr &MI, MachineInstr &Compare,
316 SmallVectorImpl<MachineInstr *> &CCUsers,
344 MachineInstr *MI = CCUsers[I];
404 static bool isCompareZero(MachineInstr &Compare) {
424 MachineInstr &Compare, SmallVectorImpl<MachineInstr *> &CCUsers) {
424 MachineInstr &Compare, SmallVectorImpl<MachineInstr *> &CCUsers) {
436 MachineInstr &MI = *MBBI++;
472 MachineInstr &MI = *MBBI++;
492 MachineInstr &Compare, SmallVectorImpl<MachineInstr *> &CCUsers) {
492 MachineInstr &Compare, SmallVectorImpl<MachineInstr *> &CCUsers) {
496 MachineInstr *Branch = CCUsers[0];
599 SmallVector<MachineInstr *, 4> CCUsers;
602 MachineInstr &MI = *--MBBI;
lib/Target/SystemZ/SystemZFrameLowering.cpp 333 MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII->get(Opcode), Reg)
lib/Target/SystemZ/SystemZHazardRecognizer.cpp 117 bool SystemZHazardRecognizer::has4RegOps(const MachineInstr *MI) const {
264 static inline bool isBranchRetTrap(MachineInstr *MI) {
410 void SystemZHazardRecognizer::emitInstruction(MachineInstr *MI,
lib/Target/SystemZ/SystemZHazardRecognizer.h 78 bool has4RegOps(const MachineInstr *MI) const;
107 MachineInstr *LastEmittedMI;
128 void emitInstruction(MachineInstr *MI, bool TakenBranch = false);
lib/Target/SystemZ/SystemZISelLowering.cpp 6502 static Register forceReg(MachineInstr &MI, MachineOperand &Base,
6522 static bool checkCCKill(MachineInstr &MI, MachineBasicBlock *MBB) {
6526 const MachineInstr& mi = *miI;
6547 static bool isSelectPseudo(MachineInstr &MI) {
6567 static void createPHIsForSelects(SmallVector<MachineInstr*, 8> &Selects,
6574 MachineInstr *FirstMI = Selects.front();
6619 SystemZTargetLowering::emitSelect(MachineInstr &MI,
6631 SmallVector<MachineInstr*, 8> Selects;
6632 SmallVector<MachineInstr*, 8> DbgValues;
6666 MachineInstr *LastMI = Selects.back();
6713 MachineBasicBlock *SystemZTargetLowering::emitCondStore(MachineInstr &MI,
6806 MachineInstr &MI, MachineBasicBlock *MBB, unsigned BinOpcode,
6925 MachineInstr &MI, MachineBasicBlock *MBB, unsigned CompareOpcode,
7039 SystemZTargetLowering::emitAtomicCmpSwapW(MachineInstr &MI,
7164 SystemZTargetLowering::emitPair128(MachineInstr &MI,
7191 MachineBasicBlock *SystemZTargetLowering::emitExt128(MachineInstr &MI,
7223 MachineInstr &MI, MachineBasicBlock *MBB, unsigned Opcode) const {
7403 MachineInstr &MI, MachineBasicBlock *MBB, unsigned Opcode) const {
7462 MachineInstr &MI, MachineBasicBlock *MBB, unsigned Opcode,
7510 MachineInstr &MI, MachineBasicBlock *MBB, unsigned Opcode) const {
7533 MachineInstr &MI, MachineBasicBlock *MBB) const {
lib/Target/SystemZ/SystemZISelLowering.h 477 EmitInstrWithCustomInserter(MachineInstr &MI,
627 MachineBasicBlock *emitSelect(MachineInstr &MI, MachineBasicBlock *BB) const;
628 MachineBasicBlock *emitCondStore(MachineInstr &MI, MachineBasicBlock *BB,
631 MachineBasicBlock *emitPair128(MachineInstr &MI,
633 MachineBasicBlock *emitExt128(MachineInstr &MI, MachineBasicBlock *MBB,
635 MachineBasicBlock *emitAtomicLoadBinary(MachineInstr &MI,
639 MachineBasicBlock *emitAtomicLoadMinMax(MachineInstr &MI,
644 MachineBasicBlock *emitAtomicCmpSwapW(MachineInstr &MI,
646 MachineBasicBlock *emitMemMemWrapper(MachineInstr &MI, MachineBasicBlock *BB,
648 MachineBasicBlock *emitStringWrapper(MachineInstr &MI, MachineBasicBlock *BB,
650 MachineBasicBlock *emitTransactionBegin(MachineInstr &MI,
653 MachineBasicBlock *emitLoadAndTestCmp0(MachineInstr &MI,
lib/Target/SystemZ/SystemZInstrBuilder.h 27 MachineInstr *MI = MIB;
lib/Target/SystemZ/SystemZInstrInfo.cpp 72 MachineInstr *EarlierMI = MF.CloneMachineInstr(&*MI);
137 void SystemZInstrInfo::expandRIPseudo(MachineInstr &MI, unsigned LowOpcode,
151 void SystemZInstrInfo::expandRIEPseudo(MachineInstr &MI, unsigned LowOpcode,
175 void SystemZInstrInfo::expandRXYPseudo(MachineInstr &MI, unsigned LowOpcode,
187 void SystemZInstrInfo::expandLOCPseudo(MachineInstr &MI, unsigned LowOpcode,
197 void SystemZInstrInfo::expandZExtPseudo(MachineInstr &MI, unsigned LowOpcode,
211 void SystemZInstrInfo::expandLoadStackGuard(MachineInstr *MI) const {
272 MachineInstr *SystemZInstrInfo::commuteInstructionImpl(MachineInstr &MI,
272 MachineInstr *SystemZInstrInfo::commuteInstructionImpl(MachineInstr &MI,
291 auto &WorkingMI = cloneIfNew(MI);
309 static int isSimpleMove(const MachineInstr &MI, int &FrameIndex,
320 unsigned SystemZInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
325 unsigned SystemZInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
330 bool SystemZInstrInfo::isStackSlotCopy(const MachineInstr &MI,
516 bool SystemZInstrInfo::analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
608 bool SystemZInstrInfo::FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
608 bool SystemZInstrInfo::FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI,
672 bool SystemZInstrInfo::isPredicable(const MachineInstr &MI) const {
719 MachineInstr &MI, ArrayRef<MachineOperand> Pred) const {
902 static bool isSimpleBD12Move(const MachineInstr *MI, unsigned Flag) {
940 static void transferDeadCC(MachineInstr *OldMI, MachineInstr *NewMI) {
940 static void transferDeadCC(MachineInstr *OldMI, MachineInstr *NewMI) {
948 MachineInstr *SystemZInstrInfo::convertToThreeAddress(
997 MachineInstr *SystemZInstrInfo::foldMemoryOperandImpl(
998 MachineFunction &MF, MachineInstr &MI, ArrayRef<unsigned> Ops,
1020 MachineInstr *BuiltMI = BuildMI(*InsertPt->getParent(), InsertPt,
1047 MachineInstr *BuiltMI =
1062 MachineInstr *BuiltMI =
1077 MachineInstr *BuiltMI =
1210 MachineInstr *SystemZInstrInfo::foldMemoryOperandImpl(
1211 MachineFunction &MF, MachineInstr &MI, ArrayRef<unsigned> Ops,
1217 bool SystemZInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
1396 unsigned SystemZInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
1406 SystemZInstrInfo::getBranchInfo(const MachineInstr &MI) const {
1600 const MachineInstr *MI) const {
1752 areMemAccessesTriviallyDisjoint(const MachineInstr &MIa,
1753 const MachineInstr &MIb) const {
lib/Target/SystemZ/SystemZInstrInfo.h 165 void expandRIPseudo(MachineInstr &MI, unsigned LowOpcode, unsigned HighOpcode,
167 void expandRIEPseudo(MachineInstr &MI, unsigned LowOpcode,
169 void expandRXYPseudo(MachineInstr &MI, unsigned LowOpcode,
171 void expandLOCPseudo(MachineInstr &MI, unsigned LowOpcode,
173 void expandZExtPseudo(MachineInstr &MI, unsigned LowOpcode,
175 void expandLoadStackGuard(MachineInstr *MI) const;
197 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
197 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
205 unsigned isLoadFromStackSlot(const MachineInstr &MI,
207 unsigned isStoreToStackSlot(const MachineInstr &MI,
209 bool isStackSlotCopy(const MachineInstr &MI, int &DestFrameIndex,
221 bool analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
229 bool FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, unsigned Reg,
229 bool FoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, unsigned Reg,
231 bool isPredicable(const MachineInstr &MI) const override;
242 bool PredicateInstruction(MachineInstr &MI,
257 MachineInstr *convertToThreeAddress(MachineFunction::iterator &MFI,
260 MachineInstr *
261 foldMemoryOperandImpl(MachineFunction &MF, MachineInstr &MI,
266 MachineInstr *foldMemoryOperandImpl(
267 MachineFunction &MF, MachineInstr &MI, ArrayRef<unsigned> Ops,
270 bool expandPostRAPseudo(MachineInstr &MBBI) const override;
278 unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
285 SystemZII::Branch getBranchInfo(const MachineInstr &MI) const;
313 const MachineInstr *MI = nullptr) const;
330 areMemAccessesTriviallyDisjoint(const MachineInstr &MIa,
331 const MachineInstr &MIb) const override;
lib/Target/SystemZ/SystemZLDCleanup.cpp 44 MachineInstr *ReplaceTLSCall(MachineInstr *I, unsigned TLSBaseAddrReg);
44 MachineInstr *ReplaceTLSCall(MachineInstr *I, unsigned TLSBaseAddrReg);
45 MachineInstr *SetRegister(MachineInstr *I, unsigned *TLSBaseAddrReg);
45 MachineInstr *SetRegister(MachineInstr *I, unsigned *TLSBaseAddrReg);
116 MachineInstr *SystemZLDCleanup::ReplaceTLSCall(MachineInstr *I,
116 MachineInstr *SystemZLDCleanup::ReplaceTLSCall(MachineInstr *I,
119 MachineInstr *Copy = BuildMI(*I->getParent(), I, I->getDebugLoc(),
131 MachineInstr *SystemZLDCleanup::SetRegister(MachineInstr *I,
131 MachineInstr *SystemZLDCleanup::SetRegister(MachineInstr *I,
138 MachineInstr *Next = I->getNextNode();
139 MachineInstr *Copy = BuildMI(*I->getParent(), Next, I->getDebugLoc(),
lib/Target/SystemZ/SystemZLongBranch.cpp 102 MachineInstr *Branch = nullptr;
154 TerminatorInfo describeTerminator(MachineInstr &MI);
159 void splitBranchOnCount(MachineInstr *MI, unsigned AddOpcode);
160 void splitCompareBranch(MachineInstr *MI, unsigned CompareOpcode);
213 TerminatorInfo SystemZLongBranch::describeTerminator(MachineInstr &MI) {
354 void SystemZLongBranch::splitBranchOnCount(MachineInstr *MI,
362 MachineInstr *BRCL = BuildMI(*MBB, MI, DL, TII->get(SystemZ::BRCL))
373 void SystemZLongBranch::splitCompareBranch(MachineInstr *MI,
380 MachineInstr *BRCL = BuildMI(*MBB, MI, DL, TII->get(SystemZ::BRCL))
391 MachineInstr *Branch = Terminator.Branch;
lib/Target/SystemZ/SystemZMCInstLower.cpp 94 void SystemZMCInstLower::lower(const MachineInstr *MI, MCInst &OutMI) const {
lib/Target/SystemZ/SystemZMCInstLower.h 32 void lower(const MachineInstr *MI, MCInst &OutMI) const;
lib/Target/SystemZ/SystemZPostRewrite.cpp 162 MachineInstr &MI = *MBBI;
215 MachineInstr &MI = *MBBI;
lib/Target/SystemZ/SystemZRegisterInfo.cpp 99 for (auto &Use : MRI->reg_instructions(Reg)) {
132 for (MachineInstr &DefMI : MRI->def_instructions(VirtReg))
151 for (auto &Use : MRI->reg_nodbg_instructions(VirtReg))
336 bool SystemZRegisterInfo::shouldCoalesce(MachineInstr *MI,
362 MachineInstr *FirstMI_GR128 =
364 MachineInstr *FirstMI_GRNar =
366 MachineInstr *LastMI_GR128 = LIS.getInstructionFromIndex(IntGR128.endIndex());
367 MachineInstr *LastMI_GRNar = LIS.getInstructionFromIndex(IntGRNar.endIndex());
lib/Target/SystemZ/SystemZRegisterInfo.h 87 bool shouldCoalesce(MachineInstr *MI,
lib/Target/SystemZ/SystemZShortenInst.cpp 43 bool shortenIIF(MachineInstr &MI, unsigned LLIxL, unsigned LLIxH);
44 bool shortenOn0(MachineInstr &MI, unsigned Opcode);
45 bool shortenOn01(MachineInstr &MI, unsigned Opcode);
46 bool shortenOn001(MachineInstr &MI, unsigned Opcode);
47 bool shortenOn001AddCC(MachineInstr &MI, unsigned Opcode);
48 bool shortenFPConv(MachineInstr &MI, unsigned Opcode);
49 bool shortenSelect(MachineInstr &MI, unsigned Opcode);
67 static void tieOpsIfNeeded(MachineInstr &MI) {
76 bool SystemZShortenInst::shortenIIF(MachineInstr &MI, unsigned LLIxL,
109 bool SystemZShortenInst::shortenOn0(MachineInstr &MI, unsigned Opcode) {
119 bool SystemZShortenInst::shortenOn01(MachineInstr &MI, unsigned Opcode) {
131 bool SystemZShortenInst::shortenOn001(MachineInstr &MI, unsigned Opcode) {
144 bool SystemZShortenInst::shortenOn001AddCC(MachineInstr &MI, unsigned Opcode) {
157 bool SystemZShortenInst::shortenFPConv(MachineInstr &MI, unsigned Opcode) {
181 bool SystemZShortenInst::shortenSelect(MachineInstr &MI, unsigned Opcode) {
206 MachineInstr &MI = *MBBI;
lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp 80 for (MachineInstr &MI : EntryMBB) {
89 for (MachineInstr &MI : llvm::make_range(InsertPt, EntryMBB.end())) {
lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp 308 void WebAssemblyAsmPrinter::EmitInstruction(const MachineInstr *MI) {
366 bool WebAssemblyAsmPrinter::PrintAsmOperand(const MachineInstr *MI,
404 bool WebAssemblyAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
lib/Target/WebAssembly/WebAssemblyAsmPrinter.h 66 void EmitInstruction(const MachineInstr *MI) override;
67 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
69 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
lib/Target/WebAssembly/WebAssemblyCFGSort.cpp 148 for (const MachineInstr &Term : MBB->terminators()) {
lib/Target/WebAssembly/WebAssemblyCFGStackify.cpp 69 DenseMap<const MachineInstr *, MachineInstr *> BeginToEnd;
69 DenseMap<const MachineInstr *, MachineInstr *> BeginToEnd;
71 DenseMap<const MachineInstr *, MachineInstr *> EndToBegin;
71 DenseMap<const MachineInstr *, MachineInstr *> EndToBegin;
73 DenseMap<const MachineInstr *, MachineBasicBlock *> TryToEHPad;
75 DenseMap<const MachineBasicBlock *, MachineInstr *> EHPadToTry;
94 void registerScope(MachineInstr *Begin, MachineInstr *End);
94 void registerScope(MachineInstr *Begin, MachineInstr *End);
95 void registerTryScope(MachineInstr *Begin, MachineInstr *End,
95 void registerTryScope(MachineInstr *Begin, MachineInstr *End,
97 void unregisterScope(MachineInstr *Begin);
123 for (MachineInstr &MI : Pred->terminators())
178 void WebAssemblyCFGStackify::registerScope(MachineInstr *Begin,
179 MachineInstr *End) {
184 void WebAssemblyCFGStackify::registerTryScope(MachineInstr *Begin,
185 MachineInstr *End,
192 void WebAssemblyCFGStackify::unregisterScope(MachineInstr *Begin) {
194 MachineInstr *End = BeginToEnd[Begin];
222 MachineInstr *BrOnExn = nullptr;
263 SmallPtrSet<const MachineInstr *, 4> BeforeSet;
265 SmallPtrSet<const MachineInstr *, 4> AfterSet;
266 for (const auto &MI : *Header) {
328 MachineInstr *Begin =
336 for (auto &MI : MBB) {
361 MachineInstr *End = BuildMI(MBB, InsertPos, MBB.findPrevDebugLoc(InsertPos),
393 SmallPtrSet<const MachineInstr *, 4> BeforeSet;
394 SmallPtrSet<const MachineInstr *, 4> AfterSet;
395 for (const auto &MI : MBB) {
408 MachineInstr *Begin = BuildMI(MBB, InsertPos, MBB.findDebugLoc(InsertPos),
416 for (const auto &MI : MBB)
428 MachineInstr *End =
494 SmallPtrSet<const MachineInstr *, 4> BeforeSet;
496 SmallPtrSet<const MachineInstr *, 4> AfterSet;
497 for (const auto &MI : *Header) {
535 MachineInstr *ThrowingCall = nullptr;
540 for (auto &MI : reverse(*Header)) {
576 MachineInstr *Begin =
584 for (const auto &MI : *Cont) {
617 MachineInstr *End =
680 SmallVector<MachineInstr *, 32> ToDelete;
682 for (auto &MI : MBB) {
686 MachineInstr *Try = &MI, *EndTry = BeginToEnd[Try];
701 for (auto *MI : ToDelete) {
714 for (auto &MI : Split) {
718 if (MachineInstr *Def = MRI.getUniqueVRegDef(MO.getReg()))
861 using TryRange = std::pair<MachineInstr *, MachineInstr *>;
861 using TryRange = std::pair<MachineInstr *, MachineInstr *>;
873 for (auto &MI : reverse(MBB)) {
913 MachineInstr *RangeBegin = nullptr, *RangeEnd = nullptr; // inclusive
914 for (auto &MI : reverse(MBB)) {
1013 MachineInstr *Catch = nullptr;
1015 for (auto &MI : *EHPad) {
1030 MachineInstr *BeginTry = EHPadToTry[EHPad];
1031 MachineInstr *EndTry = BeginToEnd[BeginTry];
1109 MachineInstr *RangeBegin = nullptr, *RangeEnd = nullptr;
1130 MachineInstr *NestedTry =
1148 MachineInstr *NestedEndTry =
1174 for (auto &MI : reverse(MBB)) {
1244 for (MachineInstr &MI : reverse(MBB)) {
1302 MachineInstr &MI = *I;
lib/Target/WebAssembly/WebAssemblyCallIndirectFixup.cpp 63 static unsigned getNonPseudoCallIndirectOpcode(const MachineInstr &MI) {
97 static bool isPseudoCallIndirect(const MachineInstr &MI) {
111 for (MachineInstr &MI : MBB) {
lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp 21 MachineInstr *Instr) {
25 void WebAssemblyDebugValueManager::move(MachineInstr *Insert) {
27 for (MachineInstr *DBI : reverse(DbgValues))
32 for (auto *DBI : DbgValues)
36 void WebAssemblyDebugValueManager::clone(MachineInstr *Insert,
40 for (MachineInstr *DBI : reverse(DbgValues)) {
41 MachineInstr *Clone = MF->CloneMachineInstr(DBI);
lib/Target/WebAssembly/WebAssemblyDebugValueManager.h 25 SmallVector<MachineInstr *, 2> DbgValues;
28 WebAssemblyDebugValueManager(MachineInstr *Instr);
30 void move(MachineInstr *Insert);
32 void clone(MachineInstr *Insert, unsigned NewReg);
lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp 168 static MachineInstr *findStartOfTree(MachineOperand &MO,
173 MachineInstr *Def = MRI.getVRegDef(Reg);
207 MachineInstr &MI = *I++;
229 MachineInstr &MI = *I++;
285 MachineInstr *Drop =
308 MachineInstr *InsertPt = &MI;
385 for (const MachineInstr &MI : MBB) {
lib/Target/WebAssembly/WebAssemblyFixIrreducibleControlFlow.cpp 453 for (MachineInstr &Term : Pred->terminators())
lib/Target/WebAssembly/WebAssemblyISelLowering.cpp 331 static MachineBasicBlock *LowerFPToInt(MachineInstr &MI, DebugLoc DL,
425 MachineInstr &MI, MachineBasicBlock *BB) const {
lib/Target/WebAssembly/WebAssemblyISelLowering.h 51 EmitInstrWithCustomInserter(MachineInstr &MI,
lib/Target/WebAssembly/WebAssemblyInstrInfo.cpp 41 const MachineInstr &MI, AAResults *AA) const {
87 MachineInstr *WebAssemblyInstrInfo::commuteInstructionImpl(
88 MachineInstr &MI, bool NewMI, unsigned OpIdx1, unsigned OpIdx2) const {
114 for (MachineInstr &MI : MBB.terminators()) {
lib/Target/WebAssembly/WebAssemblyInstrInfo.h 45 bool isReallyTriviallyReMaterializable(const MachineInstr &MI,
51 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
51 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp 60 static MachineBasicBlock *getMatchingEHPad(MachineInstr *MI) {
151 MachineInstr *TI = &*Pos;
171 MachineInstr *Catch = &*CatchPos;
188 for (auto &MI : MBB) {
239 SmallVector<MachineInstr *, 16> ExtractInstrs;
240 SmallVector<MachineInstr *, 8> ToDelete;
242 for (auto &MI : MBB) {
252 for (auto *MI : ToDelete)
260 for (auto &MI : MBB) {
270 for (auto *Extract : ExtractInstrs) {
276 MachineInstr *Catch = &*CatchPos;
lib/Target/WebAssembly/WebAssemblyLowerBrUnless.cpp 67 MachineInstr *MI = &*MII++;
77 MachineInstr *Def = MRI.getVRegDef(Cond);
lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp 45 static void removeRegisterOperands(const MachineInstr *MI, MCInst &OutMI);
196 static void getFunctionReturns(const MachineInstr *MI,
206 void WebAssemblyMCInstLower::lower(const MachineInstr *MI,
311 static void removeRegisterOperands(const MachineInstr *MI, MCInst &OutMI) {
lib/Target/WebAssembly/WebAssemblyMCInstLower.h 43 void lower(const MachineInstr *MI, MCInst &OutMI) const;
lib/Target/WebAssembly/WebAssemblyMemIntrinsicResults.cpp 84 static bool replaceDominatedUses(MachineBasicBlock &MBB, MachineInstr &MI,
102 MachineInstr *Where = O.getParent();
149 static bool optimizeCall(MachineBasicBlock &MBB, MachineInstr &MI,
200 for (auto &MI : MBB)
lib/Target/WebAssembly/WebAssemblyOptimizeLiveIntervals.cpp 97 MachineInstr *MI = &*MII++;
lib/Target/WebAssembly/WebAssemblyPeephole.cpp 74 static bool maybeRewriteToFallthrough(MachineInstr &MI, MachineBasicBlock &MBB,
148 for (auto &MI : MBB)
lib/Target/WebAssembly/WebAssemblyPrepareForLiveIntervals.cpp 66 for (const auto &Def : MRI.def_instructions(Reg))
116 MachineInstr &MI = *MII++;
lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp 74 for (MachineInstr &MI : EntryMBB) {
lib/Target/WebAssembly/WebAssemblyRegStackify.cpp 82 static void imposeStackOrdering(MachineInstr *MI) {
98 static void convertImplicitDefToConstZero(MachineInstr *MI,
126 MachineInstr *Const = BuildMI(*MI->getParent(), MI, MI->getDebugLoc(),
138 static void queryCallee(const MachineInstr &MI, unsigned CalleeOpNo, bool &Read,
170 static void query(const MachineInstr &MI, AliasAnalysis &AA, bool &Read,
261 static bool shouldRematerialize(const MachineInstr &Def, AliasAnalysis &AA,
269 static MachineInstr *getVRegDef(unsigned Reg, const MachineInstr *Insert,
269 static MachineInstr *getVRegDef(unsigned Reg, const MachineInstr *Insert,
273 if (MachineInstr *Def = MRI.getUniqueVRegDef(Reg))
287 static bool hasOneUse(unsigned Reg, MachineInstr *Def, MachineRegisterInfo &MRI,
316 static bool isSafeToMove(const MachineInstr *Def, const MachineInstr *Insert,
316 static bool isSafeToMove(const MachineInstr *Def, const MachineInstr *Insert,
408 const MachineInstr *OneUseInst = OneUse.getParent();
415 const MachineInstr *UseInst = Use.getParent();
445 const MachineInstr *NewUseInst = NewUse.getParent();
483 static MachineInstr *moveForSingleUse(unsigned Reg, MachineOperand &Op,
484 MachineInstr *Def, MachineBasicBlock &MBB,
485 MachineInstr *Insert, LiveIntervals &LIS,
528 static MachineInstr *rematerializeCheapDef(
529 unsigned Reg, MachineOperand &Op, MachineInstr &Def, MachineBasicBlock &MBB,
541 MachineInstr *Clone = &*std::prev(Insert);
596 static MachineInstr *moveAndTeeForMultiUse(
597 unsigned Reg, MachineOperand &Op, MachineInstr *Def, MachineBasicBlock &MBB,
598 MachineInstr *Insert, LiveIntervals &LIS, WebAssemblyFunctionInfo &MFI,
613 MachineInstr *Tee = BuildMI(MBB, Insert, Insert->getDebugLoc(),
652 using mop_iterator = MachineInstr::mop_iterator;
658 explicit TreeWalkerState(MachineInstr *Insert) {
679 void pushOperands(MachineInstr *Instr) {
687 void resetTopOperands(MachineInstr *Instr) {
696 bool hasRemainingOperands(const MachineInstr *Instr) const {
737 void maybeCommute(MachineInstr *Insert, TreeWalkerState &TreeWalker,
789 MachineInstr *Insert = &*MII;
818 MachineInstr *Def = getVRegDef(Reg, Insert, MRI, LIS);
912 for (MachineInstr &MI : MBB) {
lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp 57 MachineInstr &MI = *II;
96 MachineInstr *Def = MF.getRegInfo().getUniqueVRegDef(OtherMOReg);
lib/Target/WebAssembly/WebAssemblySetP2AlignOperands.cpp 57 static void rewriteP2Align(MachineInstr &MI, unsigned OperandNo) {
86 for (auto &MI : MBB) {
lib/Target/WebAssembly/WebAssemblyUtilities.cpp 28 bool WebAssembly::isChild(const MachineInstr &MI,
39 bool WebAssembly::mayThrow(const MachineInstr &MI) {
lib/Target/WebAssembly/WebAssemblyUtilities.h 26 bool isChild(const MachineInstr &MI, const WebAssemblyFunctionInfo &MFI);
27 bool mayThrow(const MachineInstr &MI);
lib/Target/X86/X86AsmPrinter.cpp 202 void X86AsmPrinter::PrintOperand(const MachineInstr *MI, unsigned OpNo,
238 void X86AsmPrinter::PrintModifiedOperand(const MachineInstr *MI, unsigned OpNo,
258 void X86AsmPrinter::PrintPCRelImm(const MachineInstr *MI, unsigned OpNo,
276 void X86AsmPrinter::PrintLeaMemReference(const MachineInstr *MI, unsigned OpNo,
328 void X86AsmPrinter::PrintMemReference(const MachineInstr *MI, unsigned OpNo,
339 void X86AsmPrinter::PrintIntelMemReference(const MachineInstr *MI,
433 bool X86AsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
524 bool X86AsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
lib/Target/X86/X86AsmPrinter.h 83 void LowerSTACKMAP(const MachineInstr &MI);
84 void LowerPATCHPOINT(const MachineInstr &MI, X86MCInstLower &MCIL);
85 void LowerSTATEPOINT(const MachineInstr &MI, X86MCInstLower &MCIL);
86 void LowerFAULTING_OP(const MachineInstr &MI, X86MCInstLower &MCIL);
87 void LowerPATCHABLE_OP(const MachineInstr &MI, X86MCInstLower &MCIL);
89 void LowerTlsAddr(X86MCInstLower &MCInstLowering, const MachineInstr &MI);
92 void LowerPATCHABLE_FUNCTION_ENTER(const MachineInstr &MI,
94 void LowerPATCHABLE_RET(const MachineInstr &MI, X86MCInstLower &MCIL);
95 void LowerPATCHABLE_TAIL_CALL(const MachineInstr &MI, X86MCInstLower &MCIL);
96 void LowerPATCHABLE_EVENT_CALL(const MachineInstr &MI, X86MCInstLower &MCIL);
97 void LowerPATCHABLE_TYPED_EVENT_CALL(const MachineInstr &MI,
100 void LowerFENTRY_CALL(const MachineInstr &MI, X86MCInstLower &MCIL);
103 void EmitSEHInstruction(const MachineInstr *MI);
106 void PrintOperand(const MachineInstr *MI, unsigned OpNo, raw_ostream &O);
107 void PrintModifiedOperand(const MachineInstr *MI, unsigned OpNo,
109 void PrintPCRelImm(const MachineInstr *MI, unsigned OpNo, raw_ostream &O);
110 void PrintLeaMemReference(const MachineInstr *MI, unsigned OpNo,
112 void PrintMemReference(const MachineInstr *MI, unsigned OpNo, raw_ostream &O,
114 void PrintIntelMemReference(const MachineInstr *MI, unsigned OpNo,
130 void EmitInstruction(const MachineInstr *MI) override;
137 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
139 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
lib/Target/X86/X86AvoidStoreForwardingBlocks.cpp 89 SmallVector<std::pair<MachineInstr *, MachineInstr *>, 2>
89 SmallVector<std::pair<MachineInstr *, MachineInstr *>, 2>
91 SmallVector<MachineInstr *, 2> ForRemoval;
100 void breakBlockedCopies(MachineInstr *LoadInst, MachineInstr *StoreInst,
100 void breakBlockedCopies(MachineInstr *LoadInst, MachineInstr *StoreInst,
103 void buildCopies(int Size, MachineInstr *LoadInst, int64_t LdDispImm,
104 MachineInstr *StoreInst, int64_t StDispImm,
107 void buildCopy(MachineInstr *LoadInst, unsigned NLoadOpcode, int64_t LoadDisp,
108 MachineInstr *StoreInst, unsigned NStoreOpcode,
114 unsigned getRegSizeInBytes(MachineInstr *Inst);
289 static int getAddrOffset(MachineInstr *MI) {
297 static MachineOperand &getBaseOperand(MachineInstr *MI) {
302 static MachineOperand &getDispOperand(MachineInstr *MI) {
310 static bool isRelevantAddressingMode(MachineInstr *MI) {
336 static SmallVector<MachineInstr *, 2>
338 SmallVector<MachineInstr *, 2> PotentialBlockers;
349 MachineInstr &MI = *PBInst;
383 void X86AvoidSFBPass::buildCopy(MachineInstr *LoadInst, unsigned NLoadOpcode,
384 int64_t LoadDisp, MachineInstr *StoreInst,
396 MachineInstr *NewLoad =
411 MachineInstr *StInst = StoreInst;
417 MachineInstr *NewStore =
435 void X86AvoidSFBPass::buildCopies(int Size, MachineInstr *LoadInst,
436 int64_t LdDispImm, MachineInstr *StoreInst,
497 static void updateKillStatus(MachineInstr *LoadInst, MachineInstr *StoreInst) {
497 static void updateKillStatus(MachineInstr *LoadInst, MachineInstr *StoreInst) {
504 MachineInstr *LastLoad = LoadInst->getPrevNode();
514 MachineInstr *StInst = StoreInst;
538 for (auto &MI : MBB) {
547 MachineInstr &StoreMI = *StoreMO.getParent();
564 unsigned X86AvoidSFBPass::getRegSizeInBytes(MachineInstr *LoadInst) {
571 MachineInstr *LoadInst, MachineInstr *StoreInst,
571 MachineInstr *LoadInst, MachineInstr *StoreInst,
616 static bool hasSameBaseOpValue(MachineInstr *LoadInst,
617 MachineInstr *StoreInst) {
687 MachineInstr *LoadInst = LoadStoreInstPair.first;
691 SmallVector<MachineInstr *, 2> PotentialBlockers =
718 MachineInstr *StoreInst = LoadStoreInstPair.second;
lib/Target/X86/X86AvoidTrailingCall.cpp 51 static bool isRealInstruction(MachineInstr &MI) {
56 static bool isCallInstruction(const MachineInstr &MI) {
lib/Target/X86/X86CallFrameOptimization.cpp 77 MachineInstr *Call = nullptr;
80 MachineInstr *SPCopy = nullptr;
86 SmallVector<MachineInstr *, 4> ArgStoreVector;
106 MachineInstr *canFoldIntoRegPush(MachineBasicBlock::iterator FrameSetup,
170 for (MachineInstr &MI : BB) {
258 for (auto &MI : MBB)
557 MachineInstr *DefMov = nullptr;
599 MachineInstr *X86CallFrameOptimization::canFoldIntoRegPush(
618 MachineInstr &DefMI = *MRI->getVRegDef(Reg);
lib/Target/X86/X86CmovConversion.cpp 120 using CmovGroup = SmallVector<MachineInstr *, 2>;
145 void convertCmovInstsToBranches(SmallVectorImpl<MachineInstr *> &Group) const;
288 for (auto &I : *MBB) {
384 DenseMap<MachineInstr *, DepthInfo> DepthMap;
388 DenseMap<unsigned, MachineInstr *> RegDefMaps[RegTypeNum];
391 DenseMap<MachineOperand *, MachineInstr *> OperandToDefMap;
396 SmallPtrSet<MachineInstr *, 4> CmovInstructions;
428 for (MachineInstr &MI : *MBB) {
441 if (MachineInstr *DefMI = RDM.lookup(Reg)) {
533 for (auto *MI : Group) {
564 static bool checkEFLAGSLive(MachineInstr *MI) {
594 static void packCmovGroup(MachineInstr *First, MachineInstr *Last) {
594 static void packCmovGroup(MachineInstr *First, MachineInstr *Last) {
598 SmallVector<MachineInstr *, 2> DBGInstructions;
606 for (auto *MI : DBGInstructions)
611 SmallVectorImpl<MachineInstr *> &Group) const {
649 MachineInstr &MI = *Group.front();
650 MachineInstr *LastCMOV = Group.back();
709 auto &MI = *MIIt++;
758 SmallVector<MachineInstr *, 4> NewMIs;
767 auto *NewCMOV = NewMIs.pop_back_val();
777 for (auto *NewMI : NewMIs) {
lib/Target/X86/X86CondBrFolding.cpp 91 MachineInstr *BrInstr;
92 MachineInstr *CmpInstr;
124 static bool analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
223 MachineInstr *BrMI;
251 MachineInstr *BrMI = MBBInfo->BrInstr;
340 MachineInstr *NewCmp = MBBInfo->CmpInstr;
437 bool X86CondBrFolding::analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
484 MachineInstr *BrInstr;
485 MachineInstr *CmpInstr;
lib/Target/X86/X86DiscriminateMemOps.cpp 55 void updateDebugInfo(MachineInstr *MI, const DILocation *Loc) {
109 for (auto &MI : MBB) {
128 for (auto &MI : MBB) {
lib/Target/X86/X86DomainReassignment.cpp 92 virtual bool isLegal(const MachineInstr *MI,
102 virtual bool convertInstr(MachineInstr *MI, const TargetInstrInfo *TII,
106 virtual double getExtraCost(const MachineInstr *MI,
117 bool convertInstr(MachineInstr *MI, const TargetInstrInfo *TII,
123 double getExtraCost(const MachineInstr *MI,
138 bool isLegal(const MachineInstr *MI,
151 bool convertInstr(MachineInstr *MI, const TargetInstrInfo *TII,
163 double getExtraCost(const MachineInstr *MI,
179 bool convertInstr(MachineInstr *MI, const TargetInstrInfo *TII,
199 double getExtraCost(const MachineInstr *MI,
215 bool isLegal(const MachineInstr *MI,
236 double getExtraCost(const MachineInstr *MI,
267 bool convertInstr(MachineInstr *MI, const TargetInstrInfo *TII,
276 double getExtraCost(const MachineInstr *MI,
306 SmallVector<MachineInstr *, 8> Instrs;
344 void addInstruction(MachineInstr *I) {
348 ArrayRef<MachineInstr *> instructions() const {
362 for (MachineInstr *MI : Instrs) {
384 DenseMap<MachineInstr *, unsigned> EnclosedInstrs;
420 void encloseInstr(Closure &C, MachineInstr *MI);
456 void X86DomainReassignment::encloseInstr(Closure &C, MachineInstr *MI) {
486 for (auto *MI : C.instructions())
502 SmallVector<MachineInstr *, 8> ToErase;
503 for (auto *MI : C.instructions())
526 static bool usedAsAddr(const MachineInstr &MI, unsigned Reg,
559 MachineInstr *DefMI = MRI->getVRegDef(CurReg);
583 for (auto &UseMI : MRI->use_nodbg_instructions(CurReg)) {
lib/Target/X86/X86EvexToVex.cpp 66 bool CompressEvexToVexImpl(MachineInstr &MI) const;
108 for (MachineInstr &MI : MBB)
115 static bool usesExtendedRegister(const MachineInstr &MI) {
147 static bool performCustomAdjustments(MachineInstr &MI, unsigned NewOpc) {
210 bool EvexToVexInstPass::CompressEvexToVexImpl(MachineInstr &MI) const {
lib/Target/X86/X86ExpandPseudo.cpp 78 MachineInstr *JTInst = &*MBBI;
181 MachineInstr &MI = *MBBI;
276 MachineInstr &NewMI = *std::prev(MBBI);
362 MachineInstr *NewInstr = BuildMI(MBB, MBBI, DL, TII->get(ActualOpc));
lib/Target/X86/X86FastISel.cpp 74 bool tryToFoldLoadIntoMI(MachineInstr *MI, unsigned OpNo,
3924 bool X86FastISel::tryToFoldLoadIntoMI(MachineInstr *MI, unsigned OpNo,
3942 MachineInstr *Result = XII.foldMemoryOperandImpl(
3954 for (MachineInstr::mop_iterator I = Result->operands_begin(),
lib/Target/X86/X86FixupBWInsts.cpp 82 bool getSuperRegDestIfDead(MachineInstr *OrigMI,
88 MachineInstr *tryReplaceLoad(unsigned New32BitOpcode, MachineInstr *MI) const;
88 MachineInstr *tryReplaceLoad(unsigned New32BitOpcode, MachineInstr *MI) const;
93 MachineInstr *tryReplaceCopy(MachineInstr *MI) const;
93 MachineInstr *tryReplaceCopy(MachineInstr *MI) const;
98 MachineInstr *tryReplaceExtend(unsigned New32BitOpcode,
99 MachineInstr *MI) const;
104 MachineInstr *tryReplaceInstr(MachineInstr *MI, MachineBasicBlock &MBB) const;
104 MachineInstr *tryReplaceInstr(MachineInstr *MI, MachineBasicBlock &MBB) const;
177 bool FixupBWInstPass::getSuperRegDestIfDead(MachineInstr *OrigMI,
275 MachineInstr *FixupBWInstPass::tryReplaceLoad(unsigned New32BitOpcode,
276 MachineInstr *MI) const {
299 MachineInstr *FixupBWInstPass::tryReplaceCopy(MachineInstr *MI) const {
299 MachineInstr *FixupBWInstPass::tryReplaceCopy(MachineInstr *MI) const {
335 MachineInstr *FixupBWInstPass::tryReplaceExtend(unsigned New32BitOpcode,
336 MachineInstr *MI) const {
362 MachineInstr *FixupBWInstPass::tryReplaceInstr(MachineInstr *MI,
362 MachineInstr *FixupBWInstPass::tryReplaceInstr(MachineInstr *MI,
421 SmallVector<std::pair<MachineInstr *, MachineInstr *>, 8> MIReplacements;
421 SmallVector<std::pair<MachineInstr *, MachineInstr *>, 8> MIReplacements;
430 MachineInstr *MI = &*I;
432 if (MachineInstr *NewMI = tryReplaceInstr(MI, MBB))
440 MachineInstr *MI = MIReplacements.back().first;
441 MachineInstr *NewMI = MIReplacements.back().second;
lib/Target/X86/X86FixupLEAs.cpp 93 MachineInstr *postRAConvertToLEA(MachineBasicBlock &MBB,
125 MachineInstr *
128 MachineInstr &MI = *MBBI;
134 MachineInstr *NewMI =
241 MachineInstr &MI = *I;
355 MachineInstr &MI = *I;
383 MachineInstr *NewMI = nullptr;
445 MachineInstr &MI = *I;
466 MachineInstr *NewMI = postRAConvertToLEA(MBB, MBI);
482 MachineInstr &MI = *I;
504 MachineInstr *NewMI = nullptr;
532 MachineInstr &MI = *I;
570 MachineInstr *NewMI = nullptr;
lib/Target/X86/X86FixupSetCC.cpp 47 MachineInstr *findFlagsImpDef(MachineBasicBlock *MBB,
51 bool impUsesFlags(MachineInstr *MI);
74 MachineInstr *
87 bool X86FixupSetCCPass::impUsesFlags(MachineInstr *MI) {
100 SmallVector<MachineInstr*, 4> ToErase;
103 for (auto &MI : MBB) {
110 MachineInstr *ZExt = nullptr;
111 for (auto &Use : MRI->use_instructions(MI.getOperand(0).getReg()))
119 MachineInstr *FlagsDefMI = findFlagsImpDef(
lib/Target/X86/X86FlagsCopyLowering.cpp 121 void rewriteCopy(MachineInstr &MI, MachineOperand &FlagUse,
122 MachineInstr &CopyDefI);
238 MachineInstr &SplitI,
250 MachineInstr &PrevI = *std::prev(SplitI.getIterator());
305 for (MachineInstr &MI : *Succ) {
356 SmallVector<MachineInstr *, 4> Copies;
359 for (MachineInstr &MI : *MBB)
364 for (MachineInstr *CopyI : Copies) {
370 MachineInstr &CopyDefI = *MRI->getVRegDef(VOp.getReg());
504 SmallVector<MachineInstr *, 4> JmpIs;
540 MachineInstr &MI = *MII++;
684 for (MachineInstr *JmpI : JmpIs) {
701 for (MachineInstr &MI : MBB)
721 for (MachineInstr &MI :
877 void X86FlagsCopyLoweringPass::rewriteCopy(MachineInstr &MI,
879 MachineInstr &CopyDefI) {
lib/Target/X86/X86FloatingPoint.cpp 290 static bool isFPCopy(MachineInstr &MI) {
418 MachineInstr &MI = *I;
438 MachineInstr *PrevMI = nullptr;
834 MachineInstr &MI = *I;
1011 MachineInstr &MI = *I;
1098 MachineInstr &MI = *I;
1114 MachineInstr &MI = *I;
1174 MachineInstr &MI = *I;
1285 MachineInstr &MI = *I;
1381 MachineInstr &MI = *I;
1409 MachineInstr &MI = *I;
1438 MachineInstr &MI = *Inst;
1696 MachineInstr &MI = *I;
lib/Target/X86/X86FrameLowering.cpp 214 for (const MachineInstr &MI : MBB.terminators()) {
255 MachineInstr::MIFlag Flag =
256 isSub ? MachineInstr::FrameSetup : MachineInstr::FrameDestroy;
256 isSub ? MachineInstr::FrameSetup : MachineInstr::FrameDestroy;
278 MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(AddSubRROpc), StackPtr)
304 MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(X86::ADD64rr), Rax)
503 MachineInstr *ChkStkStub = nullptr;
505 for (MachineInstr &MI : PrologMBB) {
746 BeforeMBBI->setFlag(MachineInstr::FrameSetup);
748 for (MachineInstr &MI : *RoundMBB) {
749 MI.setFlag(MachineInstr::FrameSetup);
751 for (MachineInstr &MI : *LoopMBB) {
752 MI.setFlag(MachineInstr::FrameSetup);
756 CMBBI->setFlag(MachineInstr::FrameSetup);
820 ExpansionMBBI->setFlag(MachineInstr::FrameSetup);
866 MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(AndOp), Reg)
869 .setMIFlag(MachineInstr::FrameSetup);
1056 .setMIFlag(MachineInstr::FrameSetup);
1090 .setMIFlag(MachineInstr::FrameSetup);
1112 .setMIFlag(MachineInstr::FrameSetup);
1131 .setMIFlag(MachineInstr::FrameSetup);
1140 .setMIFlag(MachineInstr::FrameSetup);
1156 .setMIFlag(MachineInstr::FrameSetup);
1184 MBBI->getFlag(MachineInstr::FrameSetup) &&
1204 .setMIFlag(MachineInstr::FrameSetup);
1219 .setMIFlag(MachineInstr::FrameSetup);
1253 .setMIFlag(MachineInstr::FrameSetup);
1258 .setMIFlag(MachineInstr::FrameSetup);
1269 .setMIFlag(MachineInstr::FrameSetup);
1273 .setMIFlag(MachineInstr::FrameSetup);
1277 .setMIFlag(MachineInstr::FrameSetup);
1284 .setMIFlag(MachineInstr::FrameSetup);
1292 MachineInstr *MI;
1299 MI->setFlag(MachineInstr::FrameSetup);
1310 .setMIFlag(MachineInstr::FrameSetup);
1363 .setMIFlag(MachineInstr::FrameSetup);
1384 while (MBBI != MBB.end() && MBBI->getFlag(MachineInstr::FrameSetup)) {
1385 const MachineInstr &FrameInstr = *MBBI;
1405 .setMIFlag(MachineInstr::FrameSetup);
1413 .setMIFlag(MachineInstr::FrameSetup);
1451 .setMIFlag(MachineInstr::FrameSetup);
1459 .setMIFlag(MachineInstr::FrameSetup);
1474 .setMIFlag(MachineInstr::FrameSetup);
1501 .setMIFlag(MachineInstr::FrameSetup);
1518 static bool isFuncletReturnInstr(MachineInstr &MI) {
1643 .setMIFlag(MachineInstr::FrameDestroy);
1660 if ((Opc != X86::POP32r || !PI->getFlag(MachineInstr::FrameDestroy)) &&
1661 (Opc != X86::POP64r || !PI->getFlag(MachineInstr::FrameDestroy)))
2107 .setMIFlag(MachineInstr::FrameSetup);
2129 MI->setFlag(MachineInstr::FrameSetup);
2216 .setMIFlag(MachineInstr::FrameDestroy);
2619 for (auto &MI : MBB) {
2968 .setMIFlag(MachineInstr::FrameSetup);
2982 .setMIFlag(MachineInstr::FrameSetup)
2991 .setMIFlag(MachineInstr::FrameSetup);
2999 .setMIFlag(MachineInstr::FrameSetup);
3218 while (MBBI != MBB.end() && MBBI->getFlag(MachineInstr::FrameSetup))
lib/Target/X86/X86ISelLowering.cpp 4237 MachineInstr *Def = MRI->getVRegDef(VR);
29175 static MachineBasicBlock *emitXBegin(MachineInstr &MI, MachineBasicBlock *MBB,
29253 X86TargetLowering::EmitVAARG64WithCustomInserter(MachineInstr &MI,
29513 MachineInstr &MI, MachineBasicBlock *MBB) const {
29598 const MachineInstr& mi = *miI;
29626 static bool isCMOVPseudo(MachineInstr &MI) {
29715 X86TargetLowering::EmitLoweredCascadedSelect(MachineInstr &FirstCMOV,
29716 MachineInstr &SecondCascadedCMOV,
29871 X86TargetLowering::EmitLoweredSelect(MachineInstr &MI,
29925 MachineInstr *LastCMOV = &MI;
30013 X86TargetLowering::EmitLoweredSegAlloca(MachineInstr &MI,
30147 X86TargetLowering::EmitLoweredCatchRet(MachineInstr &MI,
30179 X86TargetLowering::EmitLoweredCatchPad(MachineInstr &MI,
30195 X86TargetLowering::EmitLoweredTLSAddr(MachineInstr &MI,
30224 X86TargetLowering::EmitLoweredTLSCall(MachineInstr &MI,
30358 X86TargetLowering::EmitLoweredRetpoline(MachineInstr &MI,
30422 void X86TargetLowering::emitSetJmpShadowStackFix(MachineInstr &MI,
30465 X86TargetLowering::emitEHSjLjSetJmp(MachineInstr &MI,
30609 .setMIFlag(MachineInstr::FrameSetup);
30625 X86TargetLowering::emitLongJmpShadowStackFix(MachineInstr &MI,
30801 X86TargetLowering::emitEHSjLjLongJmp(MachineInstr &MI,
30883 void X86TargetLowering::SetupEntryBlockForSjLj(MachineInstr &MI,
30934 X86TargetLowering::EmitSjLjDispatchBlock(MachineInstr &MI,
30951 for (const auto &MI : MBB) {
31131 for (auto &II : reverse(*MBB)) {
31162 X86TargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
31218 MachineInstr *Push = BuildMI(*BB, MI, DL, TII->get(PushF));
lib/Target/X86/X86ISelLowering.h 817 EmitInstrWithCustomInserter(MachineInstr &MI,
1421 void SetupEntryBlockForSjLj(MachineInstr &MI, MachineBasicBlock *MBB,
1426 EmitVAARG64WithCustomInserter(MachineInstr &MI,
1431 EmitVAStartSaveXMMRegsWithCustomInserter(MachineInstr &BInstr,
1434 MachineBasicBlock *EmitLoweredCascadedSelect(MachineInstr &MI1,
1435 MachineInstr &MI2,
1438 MachineBasicBlock *EmitLoweredSelect(MachineInstr &I,
1441 MachineBasicBlock *EmitLoweredAtomicFP(MachineInstr &I,
1444 MachineBasicBlock *EmitLoweredCatchRet(MachineInstr &MI,
1447 MachineBasicBlock *EmitLoweredCatchPad(MachineInstr &MI,
1450 MachineBasicBlock *EmitLoweredSegAlloca(MachineInstr &MI,
1453 MachineBasicBlock *EmitLoweredTLSAddr(MachineInstr &MI,
1456 MachineBasicBlock *EmitLoweredTLSCall(MachineInstr &MI,
1459 MachineBasicBlock *EmitLoweredRetpoline(MachineInstr &MI,
1462 MachineBasicBlock *emitEHSjLjSetJmp(MachineInstr &MI,
1465 void emitSetJmpShadowStackFix(MachineInstr &MI,
1468 MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr &MI,
1471 MachineBasicBlock *emitLongJmpShadowStackFix(MachineInstr &MI,
1474 MachineBasicBlock *emitFMA3Instr(MachineInstr &MI,
1477 MachineBasicBlock *EmitSjLjDispatchBlock(MachineInstr &MI,
lib/Target/X86/X86InsertPrefetch.cpp 51 bool findPrefetchInfo(const FunctionSamples *Samples, const MachineInstr &MI,
71 const MachineInstr &MI) {
81 bool IsMemOpCompatibleWithPrefetch(const MachineInstr &MI, int Op) {
107 const MachineInstr &MI,
213 MachineInstr *PFetch =
lib/Target/X86/X86InstrBuilder.h 92 static inline X86AddressMode getAddressFromInstr(const MachineInstr *MI,
132 static inline void setDirectAddressInInstr(MachineInstr *MI, unsigned Operand,
199 MachineInstr *MI = MIB;
lib/Target/X86/X86InstrInfo.cpp 90 X86InstrInfo::isCoalescableExtInstr(const MachineInstr &MI,
138 int X86InstrInfo::getSPAdjust(const MachineInstr &MI) const {
193 bool X86InstrInfo::isFrameOperand(const MachineInstr &MI, unsigned int Op,
396 unsigned X86InstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
402 unsigned X86InstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
411 unsigned X86InstrInfo::isLoadFromStackSlotPostFE(const MachineInstr &MI,
430 unsigned X86InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
436 unsigned X86InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
446 unsigned X86InstrInfo::isStoreToStackSlotPostFE(const MachineInstr &MI,
473 MachineInstr *DefMI = &*I;
482 bool X86InstrInfo::isReallyTriviallyReMaterializable(const MachineInstr &MI,
663 MachineInstr *MI = MBB.getParent()->CloneMachineInstr(&Orig);
667 MachineInstr &NewMI = *std::prev(I);
672 bool X86InstrInfo::hasLiveCondCodeDef(MachineInstr &MI) const {
684 inline static unsigned getTruncatedShiftCount(const MachineInstr &MI,
703 bool X86InstrInfo::classifyLEAReg(MachineInstr &MI, const MachineOperand &Src,
744 MachineInstr *Copy =
760 MachineInstr *X86InstrInfo::convertToThreeAddressWithLEA(
798 MachineInstr *InsMI =
838 MachineInstr *InsMI2 = nullptr;
862 MachineInstr *NewMI = MIB;
863 MachineInstr *ExtMI =
891 MachineInstr *
915 MachineInstr *NewMI = nullptr;
1358 const MachineInstr &MI, unsigned SrcOpIdx1, unsigned SrcOpIdx2,
1415 static void commuteVPTERNLOG(MachineInstr &MI, unsigned SrcOpIdx1,
1527 MachineInstr *X86InstrInfo::commuteInstructionImpl(MachineInstr &MI, bool NewMI,
1527 MachineInstr *X86InstrInfo::commuteInstructionImpl(MachineInstr &MI, bool NewMI,
1555 auto &WorkingMI = cloneIfNew(MI);
1567 auto &WorkingMI = cloneIfNew(MI);
1587 auto &WorkingMI = cloneIfNew(MI);
1622 auto &WorkingMI = cloneIfNew(MI);
1642 auto &WorkingMI = cloneIfNew(MI);
1664 auto &WorkingMI = cloneIfNew(MI);
1675 auto &WorkingMI = cloneIfNew(MI);
1684 auto &WorkingMI = cloneIfNew(MI);
1701 auto &WorkingMI = cloneIfNew(MI);
1733 auto &WorkingMI = cloneIfNew(MI);
1745 auto &WorkingMI = cloneIfNew(MI);
1766 auto &WorkingMI = cloneIfNew(MI);
1777 auto &WorkingMI = cloneIfNew(MI);
1800 auto &WorkingMI = cloneIfNew(MI);
1806 auto &WorkingMI = cloneIfNew(MI);
1843 auto &WorkingMI = cloneIfNew(MI);
1851 auto &WorkingMI = cloneIfNew(MI);
1862 auto &WorkingMI = cloneIfNew(MI);
1874 X86InstrInfo::findThreeSrcCommutedOpIndices(const MachineInstr &MI,
1977 bool X86InstrInfo::findCommutedOpIndices(const MachineInstr &MI,
2184 X86::CondCode X86::getCondFromBranch(const MachineInstr &MI) {
2194 X86::CondCode X86::getCondFromSETCC(const MachineInstr &MI) {
2204 X86::CondCode X86::getCondFromCMov(const MachineInstr &MI) {
2381 bool X86InstrInfo::isUnpredicatedTerminator(const MachineInstr &MI) const {
2392 bool X86InstrInfo::isUnconditionalTailCall(const MachineInstr &MI) const {
2408 const MachineInstr &TailCall) const {
2439 const MachineInstr &TailCall) const {
2505 SmallVectorImpl<MachineInstr *> &CondBranches, bool AllowModify) const {
2673 SmallVector<MachineInstr *, 4> CondBranches;
2683 SmallVector<MachineInstr *, 4> CondBranches;
2698 MachineInstr *ConditionDef = nullptr;
3049 bool X86InstrInfo::isCopyInstrImpl(const MachineInstr &MI,
3196 const MachineInstr &MemOp, const MachineOperand *&BaseOp, int64_t &Offset,
3275 bool X86InstrInfo::analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
3362 inline static bool isRedundantFlagInstr(const MachineInstr &FlagI,
3365 const MachineInstr &OI) {
3396 inline static bool isDefConvertible(const MachineInstr &MI, bool &NoSignFlag) {
3510 static X86::CondCode isUseDefConvertible(const MachineInstr &MI) {
3552 bool X86InstrInfo::optimizeCompareInstr(MachineInstr &CmpInstr, unsigned SrcReg,
3606 MachineInstr *MI = MRI->getUniqueVRegDef(SrcReg);
3648 MachineInstr *Sub = nullptr;
3661 MachineInstr *Movr0Inst = nullptr;
3663 MachineInstr &Instr = *RI;
3702 SmallVector<std::pair<MachineInstr*, X86::CondCode>, 4> OpsToUpdate;
3705 const MachineInstr &Instr = *I;
3801 MachineInstr *Instr = &*InsertI;
3833 MachineInstr *X86InstrInfo::optimizeLoadInstr(MachineInstr &MI,
3833 MachineInstr *X86InstrInfo::optimizeLoadInstr(MachineInstr &MI,
3836 MachineInstr *&DefMI) const {
3862 if (MachineInstr *FoldMI = foldMemoryOperand(MI, SrcOperandIds, *DefMI)) {
4077 bool X86InstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
4341 const MachineInstr &MI, unsigned OpNum,
4555 X86InstrInfo::getUndefRegClearance(const MachineInstr &MI, unsigned &OpNum,
4568 MachineInstr &MI, unsigned OpNum, const TargetRegisterInfo *TRI) const {
4633 MachineInstr &NewMI,
4658 static MachineInstr *FuseTwoAddrInst(MachineFunction &MF, unsigned Opcode,
4665 MachineInstr *NewMI =
4689 static MachineInstr *FuseInst(MachineFunction &MF, unsigned Opcode,
4695 MachineInstr *NewMI =
4717 static MachineInstr *MakeM0Inst(const TargetInstrInfo &TII, unsigned Opcode,
4727 MachineInstr *X86InstrInfo::foldMemoryOperandCustom(
4728 MachineFunction &MF, MachineInstr &MI, unsigned OpNum,
4753 MachineInstr *NewMI =
4775 MachineInstr *NewMI =
4790 MachineInstr *NewMI =
4802 MachineInstr &MI) {
4817 MachineInstr *VRegDef = RegInfo.getUniqueVRegDef(MI.getOperand(1).getReg());
4822 MachineInstr *X86InstrInfo::foldMemoryOperandImpl(
4823 MachineFunction &MF, MachineInstr &MI, unsigned OpNum,
4862 MachineInstr *NewMI = nullptr;
4865 if (MachineInstr *CustomMI =
4957 MachineInstr *CommutedMI =
4976 MachineInstr *UncommutedMI =
4999 MachineInstr *
5000 X86InstrInfo::foldMemoryOperandImpl(MachineFunction &MF, MachineInstr &MI,
5070 static bool isNonFoldablePartialRegisterLoad(const MachineInstr &LoadMI,
5071 const MachineInstr &UserMI,
5191 MachineInstr *X86InstrInfo::foldMemoryOperandImpl(
5192 MachineFunction &MF, MachineInstr &MI, ArrayRef<unsigned> Ops,
5452 MachineFunction &MF, MachineInstr &MI, unsigned Reg, bool UnfoldLoad,
5453 bool UnfoldStore, SmallVectorImpl<MachineInstr *> &NewMIs) const {
5527 MachineInstr *DataMI = MF.CreateMachineInstr(MCID, MI.getDebugLoc(), true);
6589 uint16_t X86InstrInfo::getExecutionDomainCustom(const MachineInstr &MI) const {
6687 bool X86InstrInfo::setExecutionDomainCustom(MachineInstr &MI,
6820 X86InstrInfo::getExecutionDomain(const MachineInstr &MI) const {
6860 void X86InstrInfo::setExecutionDomain(MachineInstr &MI, unsigned Domain) const {
7227 const MachineInstr &DefMI,
7229 const MachineInstr &UseMI,
7234 bool X86InstrInfo::hasReassociableOperands(const MachineInstr &Inst,
7260 bool X86InstrInfo::isAssociativeAndCommutative(const MachineInstr &Inst) const {
7562 X86InstrInfo::describeLoadedValue(const MachineInstr &MI) const {
7658 void X86InstrInfo::setSpecialOperandAttr(MachineInstr &OldMI1,
7659 MachineInstr &OldMI2,
7660 MachineInstr &NewMI1,
7661 MachineInstr &NewMI2) const {
7898 MachineInstr *ReplaceTLSBaseAddrCall(MachineInstr &I,
7898 MachineInstr *ReplaceTLSBaseAddrCall(MachineInstr &I,
7906 MachineInstr *Copy =
7919 MachineInstr *SetRegister(MachineInstr &I, unsigned *TLSBaseAddrReg) {
7919 MachineInstr *SetRegister(MachineInstr &I, unsigned *TLSBaseAddrReg) {
7932 MachineInstr *Next = I.getNextNode();
7933 MachineInstr *Copy =
8046 MachineInstr &MI = *MIT;
8114 MachineInstr *retq = BuildMI(MF, DebugLoc(), get(X86::RETQ));
lib/Target/X86/X86InstrInfo.h 35 AC_EVEX_2_VEX = MachineInstr::TAsmComments
49 CondCode getCondFromBranch(const MachineInstr &MI);
52 CondCode getCondFromSETCC(const MachineInstr &MI);
55 CondCode getCondFromCMov(const MachineInstr &MI);
112 inline static bool isLeaMem(const MachineInstr &MI, unsigned Op) {
125 inline static bool isMem(const MachineInstr &MI, unsigned Op) {
141 SmallVectorImpl<MachineInstr *> &CondBranches,
155 int64_t getFrameAdjustment(const MachineInstr &I) const {
164 void setFrameAdjustment(MachineInstr &I, int64_t V) const {
175 int getSPAdjust(const MachineInstr &MI) const override;
183 bool isCoalescableExtInstr(const MachineInstr &MI, unsigned &SrcReg,
186 unsigned isLoadFromStackSlot(const MachineInstr &MI,
188 unsigned isLoadFromStackSlot(const MachineInstr &MI,
194 unsigned isLoadFromStackSlotPostFE(const MachineInstr &MI,
197 unsigned isStoreToStackSlot(const MachineInstr &MI,
199 unsigned isStoreToStackSlot(const MachineInstr &MI,
205 unsigned isStoreToStackSlotPostFE(const MachineInstr &MI,
208 bool isReallyTriviallyReMaterializable(const MachineInstr &MI,
223 bool classifyLEAReg(MachineInstr &MI, const MachineOperand &Src,
238 MachineInstr *convertToThreeAddress(MachineFunction::iterator &MFI,
257 bool findCommutedOpIndices(const MachineInstr &MI, unsigned &SrcOpIdx1,
276 getFMA3OpcodeToCommuteOperands(const MachineInstr &MI, unsigned SrcOpIdx1,
281 bool isUnpredicatedTerminator(const MachineInstr &MI) const override;
282 bool isUnconditionalTailCall(const MachineInstr &MI) const override;
284 const MachineInstr &TailCall) const override;
287 const MachineInstr &TailCall) const override;
294 bool getMemOperandWithOffset(const MachineInstr &LdSt,
328 bool expandPostRAPseudo(MachineInstr &MI) const override;
340 MachineInstr *
341 foldMemoryOperandImpl(MachineFunction &MF, MachineInstr &MI,
350 MachineInstr *foldMemoryOperandImpl(
351 MachineFunction &MF, MachineInstr &MI, ArrayRef<unsigned> Ops,
359 unfoldMemoryOperand(MachineFunction &MF, MachineInstr &MI, unsigned Reg,
361 SmallVectorImpl<MachineInstr *> &NewMIs) const override;
417 bool hasLiveCondCodeDef(MachineInstr &MI) const;
426 getExecutionDomain(const MachineInstr &MI) const override;
428 uint16_t getExecutionDomainCustom(const MachineInstr &MI) const;
430 void setExecutionDomain(MachineInstr &MI, unsigned Domain) const override;
432 bool setExecutionDomainCustom(MachineInstr &MI, unsigned Domain) const;
435 getPartialRegUpdateClearance(const MachineInstr &MI, unsigned OpNum,
437 unsigned getUndefRegClearance(const MachineInstr &MI, unsigned &OpNum,
439 void breakPartialRegDependency(MachineInstr &MI, unsigned OpNum,
442 MachineInstr *foldMemoryOperandImpl(MachineFunction &MF, MachineInstr &MI,
442 MachineInstr *foldMemoryOperandImpl(MachineFunction &MF, MachineInstr &MI,
453 const MachineInstr &DefMI, unsigned DefIdx,
454 const MachineInstr &UseMI,
459 bool isAssociativeAndCommutative(const MachineInstr &Inst) const override;
461 bool hasReassociableOperands(const MachineInstr &Inst,
464 void setSpecialOperandAttr(MachineInstr &OldMI1, MachineInstr &OldMI2,
464 void setSpecialOperandAttr(MachineInstr &OldMI1, MachineInstr &OldMI2,
465 MachineInstr &NewMI1,
466 MachineInstr &NewMI2) const override;
472 bool analyzeCompare(const MachineInstr &MI, unsigned &SrcReg,
479 bool optimizeCompareInstr(MachineInstr &CmpInstr, unsigned SrcReg,
490 MachineInstr *optimizeLoadInstr(MachineInstr &MI,
490 MachineInstr *optimizeLoadInstr(MachineInstr &MI,
493 MachineInstr *&DefMI) const override;
521 static bool hasLockPrefix(const MachineInstr &MI) {
526 describeLoadedValue(const MachineInstr &MI) const override;
540 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
540 MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
547 bool isCopyInstrImpl(const MachineInstr &MI, const MachineOperand *&Source,
554 MachineInstr *convertToThreeAddressWithLEA(unsigned MIOpc,
562 MachineInstr *foldMemoryOperandCustom(MachineFunction &MF, MachineInstr &MI,
562 MachineInstr *foldMemoryOperandCustom(MachineFunction &MF, MachineInstr &MI,
570 bool isFrameOperand(const MachineInstr &MI, unsigned int Op,
590 bool findThreeSrcCommutedOpIndices(const MachineInstr &MI,
lib/Target/X86/X86InstructionSelector.cpp 63 bool select(MachineInstr &I) override;
69 bool selectImpl(MachineInstr &I, CodeGenCoverage &CoverageInfo) const;
75 bool selectLoadStoreOp(MachineInstr &I, MachineRegisterInfo &MRI,
77 bool selectFrameIndexOrGep(MachineInstr &I, MachineRegisterInfo &MRI,
79 bool selectGlobalValue(MachineInstr &I, MachineRegisterInfo &MRI,
81 bool selectConstant(MachineInstr &I, MachineRegisterInfo &MRI,
83 bool selectTruncOrPtrToInt(MachineInstr &I, MachineRegisterInfo &MRI,
85 bool selectZext(MachineInstr &I, MachineRegisterInfo &MRI,
87 bool selectAnyext(MachineInstr &I, MachineRegisterInfo &MRI,
89 bool selectCmp(MachineInstr &I, MachineRegisterInfo &MRI,
91 bool selectFCmp(MachineInstr &I, MachineRegisterInfo &MRI,
93 bool selectUadde(MachineInstr &I, MachineRegisterInfo &MRI,
95 bool selectCopy(MachineInstr &I, MachineRegisterInfo &MRI) const;
96 bool selectUnmergeValues(MachineInstr &I, MachineRegisterInfo &MRI,
98 bool selectMergeValues(MachineInstr &I, MachineRegisterInfo &MRI,
100 bool selectInsert(MachineInstr &I, MachineRegisterInfo &MRI,
102 bool selectExtract(MachineInstr &I, MachineRegisterInfo &MRI,
104 bool selectCondBranch(MachineInstr &I, MachineRegisterInfo &MRI,
106 bool selectTurnIntoCOPY(MachineInstr &I, MachineRegisterInfo &MRI,
111 bool materializeFP(MachineInstr &I, MachineRegisterInfo &MRI,
113 bool selectImplicitDefOrPHI(MachineInstr &I, MachineRegisterInfo &MRI) const;
114 bool selectDivRem(MachineInstr &I, MachineRegisterInfo &MRI,
116 bool selectIntrinsicWSideEffects(MachineInstr &I, MachineRegisterInfo &MRI,
120 bool emitInsertSubreg(unsigned DstReg, unsigned SrcReg, MachineInstr &I,
123 bool emitExtractSubreg(unsigned DstReg, unsigned SrcReg, MachineInstr &I,
230 bool X86InstructionSelector::selectCopy(MachineInstr &I,
307 bool X86InstructionSelector::select(MachineInstr &I) {
472 static void X86SelectAddress(const MachineInstr &I,
498 bool X86InstructionSelector::selectLoadStoreOp(MachineInstr &I,
558 bool X86InstructionSelector::selectFrameIndexOrGep(MachineInstr &I,
586 bool X86InstructionSelector::selectGlobalValue(MachineInstr &I,
632 bool X86InstructionSelector::selectConstant(MachineInstr &I,
690 MachineInstr &I, MachineRegisterInfo &MRI, const unsigned DstReg,
704 bool X86InstructionSelector::selectTruncOrPtrToInt(MachineInstr &I,
770 bool X86InstructionSelector::selectZext(MachineInstr &I,
870 MachineInstr &AndInst =
881 bool X86InstructionSelector::selectAnyext(MachineInstr &I,
936 bool X86InstructionSelector::selectCmp(MachineInstr &I,
972 MachineInstr &CmpInst =
977 MachineInstr &SetInst = *BuildMI(*I.getParent(), I, I.getDebugLoc(),
987 bool X86InstructionSelector::selectFCmp(MachineInstr &I,
1032 MachineInstr &CmpInst =
1039 MachineInstr &Set1 = *BuildMI(*I.getParent(), I, I.getDebugLoc(),
1041 MachineInstr &Set2 = *BuildMI(*I.getParent(), I, I.getDebugLoc(),
1043 MachineInstr &Set3 = *BuildMI(*I.getParent(), I, I.getDebugLoc(),
1065 MachineInstr &CmpInst =
1070 MachineInstr &Set =
1078 bool X86InstructionSelector::selectUadde(MachineInstr &I,
1095 MachineInstr *Def = MRI.getVRegDef(CarryInReg);
1121 MachineInstr &AddInst =
1137 bool X86InstructionSelector::selectExtract(MachineInstr &I,
1195 MachineInstr &I,
1233 MachineInstr &I,
1270 bool X86InstructionSelector::selectInsert(MachineInstr &I,
1329 MachineInstr &I, MachineRegisterInfo &MRI, MachineFunction &MF) {
1339 MachineInstr &ExtrInst =
1354 MachineInstr &I, MachineRegisterInfo &MRI, MachineFunction &MF) {
1379 MachineInstr &InsertInst = *BuildMI(*I.getParent(), I, I.getDebugLoc(),
1391 MachineInstr &CopyInst = *BuildMI(*I.getParent(), I, I.getDebugLoc(),
1402 bool X86InstructionSelector::selectCondBranch(MachineInstr &I,
1410 MachineInstr &TestInst =
1423 bool X86InstructionSelector::materializeFP(MachineInstr &I,
1445 MachineInstr *LoadInst = nullptr;
1490 MachineInstr &I, MachineRegisterInfo &MRI) const {
1516 bool X86InstructionSelector::selectDivRem(MachineInstr &I,
1718 MachineInstr &I, MachineRegisterInfo &MRI, MachineFunction &MF) const {
lib/Target/X86/X86LegalizerInfo.cpp 88 bool X86LegalizerInfo::legalizeIntrinsic(MachineInstr &MI,
lib/Target/X86/X86LegalizerInfo.h 35 bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
lib/Target/X86/X86MCInstLower.cpp 62 Optional<MCOperand> LowerMachineOperand(const MachineInstr *MI,
64 void Lower(const MachineInstr *MI, MCInst &OutMI) const;
398 X86MCInstLower::LowerMachineOperand(const MachineInstr *MI,
465 void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
883 const MachineInstr &MI) {
1097 void X86AsmPrinter::LowerSTATEPOINT(const MachineInstr &MI,
1154 void X86AsmPrinter::LowerFAULTING_OP(const MachineInstr &FaultingMI,
1185 void X86AsmPrinter::LowerFENTRY_CALL(const MachineInstr &MI,
1198 void X86AsmPrinter::LowerPATCHABLE_OP(const MachineInstr &MI,
1237 void X86AsmPrinter::LowerSTACKMAP(const MachineInstr &MI) {
1246 void X86AsmPrinter::LowerPATCHPOINT(const MachineInstr &MI,
1304 void X86AsmPrinter::LowerPATCHABLE_EVENT_CALL(const MachineInstr &MI,
1398 void X86AsmPrinter::LowerPATCHABLE_TYPED_EVENT_CALL(const MachineInstr &MI,
1497 void X86AsmPrinter::LowerPATCHABLE_FUNCTION_ENTER(const MachineInstr &MI,
1524 void X86AsmPrinter::LowerPATCHABLE_RET(const MachineInstr &MI,
1554 void X86AsmPrinter::LowerPATCHABLE_TAIL_CALL(const MachineInstr &MI,
1604 static const Constant *getConstantFromPool(const MachineInstr &MI,
1624 static std::string getShuffleComment(const MachineInstr *MI, unsigned SrcOp1Idx,
1743 void X86AsmPrinter::EmitSEHInstruction(const MachineInstr *MI) {
1830 void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/X86/X86MacroFusion.cpp 40 static FirstInstrKind classifyFirst(const MachineInstr &MI) {
147 static JumpKind classifySecond(const MachineInstr &MI) {
182 const MachineInstr *FirstMI,
183 const MachineInstr &SecondMI) {
lib/Target/X86/X86OptimizeLEAs.cpp 73 static inline bool isLEA(const MachineInstr &MI);
188 static inline MemOpKey getMemOpKey(const MachineInstr &MI, unsigned N) {
229 static inline bool isLEA(const MachineInstr &MI) {
251 using MemOpMap = DenseMap<MemOpKey, SmallVector<MachineInstr *, 16>>;
255 int calcInstrDist(const MachineInstr &First, const MachineInstr &Last);
255 int calcInstrDist(const MachineInstr &First, const MachineInstr &Last);
261 bool chooseBestLEA(const SmallVectorImpl<MachineInstr *> &List,
262 const MachineInstr &MI, MachineInstr *&BestLEA,
262 const MachineInstr &MI, MachineInstr *&BestLEA,
268 int64_t getAddrDispShift(const MachineInstr &MI1, unsigned N1,
269 const MachineInstr &MI2, unsigned N2) const;
275 bool isReplaceable(const MachineInstr &First, const MachineInstr &Last,
275 bool isReplaceable(const MachineInstr &First, const MachineInstr &Last,
289 MachineInstr *replaceDebugValue(MachineInstr &MI, unsigned VReg,
289 MachineInstr *replaceDebugValue(MachineInstr &MI, unsigned VReg,
295 DenseMap<const MachineInstr *, unsigned> InstrPos;
310 int X86OptimizeLEAPass::calcInstrDist(const MachineInstr &First,
311 const MachineInstr &Last) {
333 const SmallVectorImpl<MachineInstr *> &List, const MachineInstr &MI,
333 const SmallVectorImpl<MachineInstr *> &List, const MachineInstr &MI,
334 MachineInstr *&BestLEA, int64_t &AddrDispShift, int &Dist) {
390 int64_t X86OptimizeLEAPass::getAddrDispShift(const MachineInstr &MI1,
392 const MachineInstr &MI2,
415 bool X86OptimizeLEAPass::isReplaceable(const MachineInstr &First,
416 const MachineInstr &Last,
436 MachineInstr &MI = *MO.getParent();
498 MachineInstr &MI = *I++;
520 MachineInstr *DefMI;
569 MachineInstr *X86OptimizeLEAPass::replaceDebugValue(MachineInstr &MI,
569 MachineInstr *X86OptimizeLEAPass::replaceDebugValue(MachineInstr &MI,
598 MachineInstr &First = **I1;
601 MachineInstr &Last = **I2;
623 MachineInstr &MI = *MO.getParent();
lib/Target/X86/X86PadShortFunction.cpp 181 for (MachineInstr &MI : *MBB) {
lib/Target/X86/X86RegisterBankInfo.cpp 111 const MachineInstr &MI, const MachineRegisterInfo &MRI, const bool isFP,
125 const MachineInstr &MI,
144 X86RegisterBankInfo::getSameOperandsMapping(const MachineInstr &MI,
161 X86RegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
lib/Target/X86/X86RegisterBankInfo.h 48 const InstructionMapping &getSameOperandsMapping(const MachineInstr &MI,
53 getInstrPartialMappingIdxs(const MachineInstr &MI,
60 getInstrValueMapping(const MachineInstr &MI,
71 getInstrAlternativeMappings(const MachineInstr &MI) const override;
77 getInstrMapping(const MachineInstr &MI) const override;
lib/Target/X86/X86RegisterInfo.cpp 679 MachineInstr &MI = *II;
703 static bool isFuncletReturnInstr(MachineInstr &MI) {
718 MachineInstr &MI = *II;
lib/Target/X86/X86SpeculativeLoadHardening.cpp 144 SmallVector<MachineInstr *, 2> CondBrs;
146 MachineInstr *UncondBr;
172 SmallVector<MachineInstr *, 16>
177 SmallVector<MachineInstr *, 16>
196 hardenLoadAddr(MachineInstr &MI, MachineOperand &BaseMO,
199 MachineInstr *
200 sinkPostLoadHardenedInst(MachineInstr &MI,
201 SmallPtrSetImpl<MachineInstr *> &HardenedInstrs);
206 unsigned hardenPostLoad(MachineInstr &MI);
207 void hardenReturnInstr(MachineInstr &MI);
208 void tracePredStateThroughCall(MachineInstr &MI);
210 MachineInstr &MI,
225 MachineInstr *Br, MachineInstr *&UncondBr,
225 MachineInstr *Br, MachineInstr *&UncondBr,
286 for (MachineInstr &MI : Succ) {
331 for (auto &MI : MBB) {
373 for (MachineInstr &MI : MBB) {
546 for (MachineInstr *CMovI : CMovs)
632 for (MachineInstr &MI : llvm::reverse(MBB)) {
689 SmallVector<MachineInstr *, 16>
694 SmallVector<MachineInstr *, 16> CMovs;
700 const SmallVectorImpl<MachineInstr *> &CondBrs = Info.CondBrs;
701 MachineInstr *UncondBr = Info.UncondBr;
719 for (auto *CondBr : CondBrs)
785 for (auto *CondBr : CondBrs) {
855 MachineInstr &MI = *MII++;
911 SmallVector<MachineInstr *, 2> NewMIs;
921 for (auto *NewMI : NewMIs)
955 SmallVector<MachineInstr *, 16>
982 MachineInstr &TI = *MII;
1047 SmallVector<MachineInstr *, 16> CMovs;
1206 static bool isDataInvariant(MachineInstr &MI) {
1405 static bool isDataInvariantLoad(MachineInstr &MI) {
1592 for (MachineInstr &MI : llvm::reverse(llvm::make_range(MBB.begin(), I))) {
1641 SmallPtrSet<MachineInstr *, 16> HardenPostLoad;
1642 SmallPtrSet<MachineInstr *, 16> HardenLoadAddr;
1670 for (MachineInstr &MI : MBB) {
1771 for (MachineInstr &MI : MBB) {
1803 MachineInstr *SunkMI = sinkPostLoadHardenedInst(MI, HardenPostLoad);
1947 MachineInstr &MI, MachineOperand &BaseMO, MachineOperand &IndexMO,
2148 MachineInstr *X86SpeculativeLoadHardeningPass::sinkPostLoadHardenedInst(
2149 MachineInstr &InitialMI, SmallPtrSetImpl<MachineInstr *> &HardenedInstrs) {
2149 MachineInstr &InitialMI, SmallPtrSetImpl<MachineInstr *> &HardenedInstrs) {
2161 MachineInstr *SingleUseMI = nullptr;
2162 for (MachineInstr &UseMI : MRI->use_instructions(DefReg)) {
2226 MachineInstr *MI = &InitialMI;
2227 while (Optional<MachineInstr *> SingleUse = SinkCheckToSingleUse(*MI)) {
2330 unsigned X86SpeculativeLoadHardeningPass::hardenPostLoad(MachineInstr &MI) {
2381 void X86SpeculativeLoadHardeningPass::hardenReturnInstr(MachineInstr &MI) {
2428 MachineInstr &MI) {
2588 MachineInstr &MI,
lib/Target/X86/X86VZeroUpper.cpp 153 static bool hasYmmOrZmmReg(MachineInstr &MI) {
168 static bool callHasRegMask(MachineInstr &MI) {
202 for (MachineInstr &MI : MBB) {
lib/Target/X86/X86WinAllocaExpander.cpp 46 typedef MapVector<MachineInstr*, Lowering> LoweringMap;
55 void lower(MachineInstr* MI, Lowering L);
79 static int64_t getWinAllocaAmount(MachineInstr *MI, MachineRegisterInfo *MRI) {
85 MachineInstr *Def = MRI->getUniqueVRegDef(AmountReg);
110 static bool isPushPop(const MachineInstr &MI) {
154 for (MachineInstr &MI : *MBB) {
197 void X86WinAllocaExpander::lower(MachineInstr* MI, Lowering L) {
269 if (MachineInstr *AmountDef = MRI->getUniqueVRegDef(AmountReg))
lib/Target/XCore/XCoreAsmPrinter.cpp 63 void printInlineJT(const MachineInstr *MI, int opNum, raw_ostream &O,
65 void printInlineJT32(const MachineInstr *MI, int opNum, raw_ostream &O) {
68 void printOperand(const MachineInstr *MI, int opNum, raw_ostream &O);
69 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
71 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum,
78 void EmitInstruction(const MachineInstr *MI) override;
186 printInlineJT(const MachineInstr *MI, int opNum, raw_ostream &O,
202 void XCoreAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
233 bool XCoreAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
245 bool XCoreAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
259 void XCoreAsmPrinter::EmitInstruction(const MachineInstr *MI) {
lib/Target/XCore/XCoreFrameLowering.cpp 493 MachineInstr &Old = *I;
515 MachineInstr *New;
lib/Target/XCore/XCoreFrameToArgsOffsetElim.cpp 57 MachineInstr &OldInst = *MBBI;
lib/Target/XCore/XCoreISelLowering.cpp 1523 XCoreTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
lib/Target/XCore/XCoreISelLowering.h 121 EmitInstrWithCustomInserter(MachineInstr &MI,
lib/Target/XCore/XCoreInstrInfo.cpp 62 unsigned XCoreInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
82 unsigned XCoreInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
203 MachineInstr *LastInst = &*I;
226 MachineInstr *SecondLastInst = &*I;
lib/Target/XCore/XCoreInstrInfo.h 41 unsigned isLoadFromStackSlot(const MachineInstr &MI,
49 unsigned isStoreToStackSlot(const MachineInstr &MI,
lib/Target/XCore/XCoreMCInstLower.cpp 103 void XCoreMCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
lib/Target/XCore/XCoreMCInstLower.h 31 void Lower(const MachineInstr *MI, MCInst &OutMI) const;
lib/Target/XCore/XCoreRegisterInfo.cpp 64 MachineInstr &MI = *II;
97 MachineInstr &MI = *II;
131 MachineInstr &MI = *II;
165 MachineInstr &MI = *II;
263 MachineInstr &MI = *II;
unittests/CodeGen/GlobalISel/GISelMITest.h 130 for (MachineInstr &MI : MBB) {
unittests/CodeGen/GlobalISel/KnownBitsTest.cpp 20 MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg);
40 MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg);
68 MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg);
84 MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg);
111 MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg);
unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp 20 void changingInstr(MachineInstr &MI) override {}
21 void changedInstr(MachineInstr &MI) override {}
22 void createdInstr(MachineInstr &MI) override {}
23 void erasingInstr(MachineInstr &MI) override {}
764 MachineInstr::MIFlag::FmNsz);
769 {MachineInstr::MIFlag::FmArcp});
774 MachineInstr::MIFlag::FmNoInfs);
unittests/CodeGen/GlobalISel/MachineIRBuilderTest.cpp 137 B.buildFMAD(S64, Copies[0], Copies[1], Copies[2], MachineInstr::FmNoNans);
unittests/CodeGen/MachineInstrTest.cpp 224 void checkHashAndIsEqualMatch(MachineInstr *MI1, MachineInstr *MI2) {
224 void checkHashAndIsEqualMatch(MachineInstr *MI1, MachineInstr *MI2) {
330 MachineInstr *MI = MF->CreateMachineInstr(MCID, DL);
unittests/MI/LiveIntervalTest.cpp 103 static MachineInstr &getMI(MachineFunction &MF, unsigned At,
108 for (MachineInstr &MI : MBB) {
122 MachineInstr &FromInstr = getMI(MF, From, BlockNum);
123 MachineInstr &ToInstr = getMI(MF, To, BlockNum);
375 MachineInstr &MI = getMI(MF, 3, /*BlockNum=*/1);
437 MachineInstr &UndefSubregDef = getMI(MF, 2, 1);
458 MachineInstr &UndefSubregDef = getMI(MF, 2, 1);
unittests/tools/llvm-exegesis/X86/SnippetRepetitorTest.cpp 62 return Property(&MachineInstr::getOpcode, Eq(Opcode));
usr/include/c++/7.4.0/bits/functional_hash.h 106 struct hash<_Tp*> : public __hash_base<size_t, _Tp*>
109 operator()(_Tp* __p) const noexcept
usr/include/c++/7.4.0/bits/move.h 46 inline _GLIBCXX_CONSTEXPR _Tp*
47 __addressof(_Tp& __r) _GLIBCXX_NOEXCEPT
72 constexpr _Tp&&
83 constexpr _Tp&&
usr/include/c++/7.4.0/bits/std_function.h 299 _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
628 using _Invoker_type = _Res (*)(const _Any_data&, _ArgTypes&&...);
usr/include/c++/7.4.0/bits/stl_iterator_base_types.h 123 typedef _Tp value_type;
usr/include/c++/7.4.0/type_traits 1633 { typedef _Tp type; };
1659 { typedef _Tp&& type; };
1983 { typedef _Up type; };
utils/unittest/googlemock/include/gmock/gmock-matchers.h 2261 bool MatchAndExplain(const T&value, MatchResultListener* listener) const {
2272 bool MatchAndExplainImpl(false_type /* is_not_pointer */, const Class& obj,
2288 bool MatchAndExplainImpl(true_type /* is_pointer */, const Class* p,
3931 internal::PropertyMatcher<Class, PropertyType> > Property(
utils/unittest/googletest/include/gtest/gtest-printers.h 407 T* p, ::std::ostream* os) {
416 if (IsTrue(ImplicitlyConvertible<T*, const void*>::value)) {
utils/unittest/googletest/include/gtest/internal/gtest-internal.h 795 struct RemoveConst { typedef T type; }; // NOLINT