1//===-- llvm/CodeGen/MachineInstr.h - MachineInstr class --------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the declaration of the MachineInstr class, which is the
11// basic representation for all target dependent machine instructions used by
12// the back end.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_CODEGEN_MACHINEINSTR_H
17#define LLVM_CODEGEN_MACHINEINSTR_H
18
19#include "llvm/ADT/ArrayRef.h"
20#include "llvm/ADT/DenseMapInfo.h"
21#include "llvm/ADT/STLExtras.h"
22#include "llvm/ADT/StringRef.h"
23#include "llvm/ADT/ilist.h"
24#include "llvm/ADT/ilist_node.h"
25#include "llvm/ADT/iterator_range.h"
26#include "llvm/CodeGen/MachineOperand.h"
27#include "llvm/IR/DebugInfo.h"
28#include "llvm/IR/DebugLoc.h"
29#include "llvm/IR/InlineAsm.h"
30#include "llvm/MC/MCInstrDesc.h"
31#include "llvm/Support/ArrayRecycler.h"
32#include "llvm/Target/TargetOpcodes.h"
33
34namespace llvm {
35
36template <typename T> class SmallVectorImpl;
37class AliasAnalysis;
38class TargetInstrInfo;
39class TargetRegisterClass;
40class TargetRegisterInfo;
41class MachineFunction;
42class MachineMemOperand;
43
44//===----------------------------------------------------------------------===//
45/// MachineInstr - Representation of each machine instruction.
46///
47/// This class isn't a POD type, but it must have a trivial destructor. When a
48/// MachineFunction is deleted, all the contained MachineInstrs are deallocated
49/// without having their destructor called.
50///
51class MachineInstr : public ilist_node<MachineInstr> {
52public:
53  typedef MachineMemOperand **mmo_iterator;
54
55  /// Flags to specify different kinds of comments to output in
56  /// assembly code.  These flags carry semantic information not
57  /// otherwise easily derivable from the IR text.
58  ///
59  enum CommentFlag {
60    ReloadReuse = 0x1
61  };
62
63  enum MIFlag {
64    NoFlags      = 0,
65    FrameSetup   = 1 << 0,              // Instruction is used as a part of
66                                        // function frame setup code.
67    BundledPred  = 1 << 1,              // Instruction has bundled predecessors.
68    BundledSucc  = 1 << 2               // Instruction has bundled successors.
69  };
70private:
71  const MCInstrDesc *MCID;              // Instruction descriptor.
72  MachineBasicBlock *Parent;            // Pointer to the owning basic block.
73
74  // Operands are allocated by an ArrayRecycler.
75  MachineOperand *Operands;             // Pointer to the first operand.
76  unsigned NumOperands;                 // Number of operands on instruction.
77  typedef ArrayRecycler<MachineOperand>::Capacity OperandCapacity;
78  OperandCapacity CapOperands;          // Capacity of the Operands array.
79
80  uint8_t Flags;                        // Various bits of additional
81                                        // information about machine
82                                        // instruction.
83
84  uint8_t AsmPrinterFlags;              // Various bits of information used by
85                                        // the AsmPrinter to emit helpful
86                                        // comments.  This is *not* semantic
87                                        // information.  Do not use this for
88                                        // anything other than to convey comment
89                                        // information to AsmPrinter.
90
91  uint8_t NumMemRefs;                   // Information on memory references.
92  mmo_iterator MemRefs;
93
94  DebugLoc debugLoc;                    // Source line information.
95
96  MachineInstr(const MachineInstr&) LLVM_DELETED_FUNCTION;
97  void operator=(const MachineInstr&) LLVM_DELETED_FUNCTION;
98  // Use MachineFunction::DeleteMachineInstr() instead.
99  ~MachineInstr() LLVM_DELETED_FUNCTION;
100
101  // Intrusive list support
102  friend struct ilist_traits<MachineInstr>;
103  friend struct ilist_traits<MachineBasicBlock>;
104  void setParent(MachineBasicBlock *P) { Parent = P; }
105
106  /// MachineInstr ctor - This constructor creates a copy of the given
107  /// MachineInstr in the given MachineFunction.
108  MachineInstr(MachineFunction &, const MachineInstr &);
109
110  /// MachineInstr ctor - This constructor create a MachineInstr and add the
111  /// implicit operands.  It reserves space for number of operands specified by
112  /// MCInstrDesc.  An explicit DebugLoc is supplied.
113  MachineInstr(MachineFunction&, const MCInstrDesc &MCID,
114               const DebugLoc dl, bool NoImp = false);
115
116  // MachineInstrs are pool-allocated and owned by MachineFunction.
117  friend class MachineFunction;
118
119public:
120  const MachineBasicBlock* getParent() const { return Parent; }
121  MachineBasicBlock* getParent() { return Parent; }
122
123  /// getAsmPrinterFlags - Return the asm printer flags bitvector.
124  ///
125  uint8_t getAsmPrinterFlags() const { return AsmPrinterFlags; }
126
127  /// clearAsmPrinterFlags - clear the AsmPrinter bitvector
128  ///
129  void clearAsmPrinterFlags() { AsmPrinterFlags = 0; }
130
131  /// getAsmPrinterFlag - Return whether an AsmPrinter flag is set.
132  ///
133  bool getAsmPrinterFlag(CommentFlag Flag) const {
134    return AsmPrinterFlags & Flag;
135  }
136
137  /// setAsmPrinterFlag - Set a flag for the AsmPrinter.
138  ///
139  void setAsmPrinterFlag(CommentFlag Flag) {
140    AsmPrinterFlags |= (uint8_t)Flag;
141  }
142
143  /// clearAsmPrinterFlag - clear specific AsmPrinter flags
144  ///
145  void clearAsmPrinterFlag(CommentFlag Flag) {
146    AsmPrinterFlags &= ~Flag;
147  }
148
149  /// getFlags - Return the MI flags bitvector.
150  uint8_t getFlags() const {
151    return Flags;
152  }
153
154  /// getFlag - Return whether an MI flag is set.
155  bool getFlag(MIFlag Flag) const {
156    return Flags & Flag;
157  }
158
159  /// setFlag - Set a MI flag.
160  void setFlag(MIFlag Flag) {
161    Flags |= (uint8_t)Flag;
162  }
163
164  void setFlags(unsigned flags) {
165    // Filter out the automatically maintained flags.
166    unsigned Mask = BundledPred | BundledSucc;
167    Flags = (Flags & Mask) | (flags & ~Mask);
168  }
169
170  /// clearFlag - Clear a MI flag.
171  void clearFlag(MIFlag Flag) {
172    Flags &= ~((uint8_t)Flag);
173  }
174
175  /// isInsideBundle - Return true if MI is in a bundle (but not the first MI
176  /// in a bundle).
177  ///
178  /// A bundle looks like this before it's finalized:
179  ///   ----------------
180  ///   |      MI      |
181  ///   ----------------
182  ///          |
183  ///   ----------------
184  ///   |      MI    * |
185  ///   ----------------
186  ///          |
187  ///   ----------------
188  ///   |      MI    * |
189  ///   ----------------
190  /// In this case, the first MI starts a bundle but is not inside a bundle, the
191  /// next 2 MIs are considered "inside" the bundle.
192  ///
193  /// After a bundle is finalized, it looks like this:
194  ///   ----------------
195  ///   |    Bundle    |
196  ///   ----------------
197  ///          |
198  ///   ----------------
199  ///   |      MI    * |
200  ///   ----------------
201  ///          |
202  ///   ----------------
203  ///   |      MI    * |
204  ///   ----------------
205  ///          |
206  ///   ----------------
207  ///   |      MI    * |
208  ///   ----------------
209  /// The first instruction has the special opcode "BUNDLE". It's not "inside"
210  /// a bundle, but the next three MIs are.
211  bool isInsideBundle() const {
212    return getFlag(BundledPred);
213  }
214
215  /// isBundled - Return true if this instruction part of a bundle. This is true
216  /// if either itself or its following instruction is marked "InsideBundle".
217  bool isBundled() const {
218    return isBundledWithPred() || isBundledWithSucc();
219  }
220
221  /// Return true if this instruction is part of a bundle, and it is not the
222  /// first instruction in the bundle.
223  bool isBundledWithPred() const { return getFlag(BundledPred); }
224
225  /// Return true if this instruction is part of a bundle, and it is not the
226  /// last instruction in the bundle.
227  bool isBundledWithSucc() const { return getFlag(BundledSucc); }
228
229  /// Bundle this instruction with its predecessor. This can be an unbundled
230  /// instruction, or it can be the first instruction in a bundle.
231  void bundleWithPred();
232
233  /// Bundle this instruction with its successor. This can be an unbundled
234  /// instruction, or it can be the last instruction in a bundle.
235  void bundleWithSucc();
236
237  /// Break bundle above this instruction.
238  void unbundleFromPred();
239
240  /// Break bundle below this instruction.
241  void unbundleFromSucc();
242
243  /// getDebugLoc - Returns the debug location id of this MachineInstr.
244  ///
245  DebugLoc getDebugLoc() const { return debugLoc; }
246
247  /// getDebugVariable() - Return the debug variable referenced by
248  /// this DBG_VALUE instruction.
249  DIVariable getDebugVariable() const {
250    assert(isDebugValue() && "not a DBG_VALUE");
251    const MDNode *Var = getOperand(getNumOperands() - 1).getMetadata();
252    return DIVariable(Var);
253  }
254
255  /// emitError - Emit an error referring to the source location of this
256  /// instruction. This should only be used for inline assembly that is somehow
257  /// impossible to compile. Other errors should have been handled much
258  /// earlier.
259  ///
260  /// If this method returns, the caller should try to recover from the error.
261  ///
262  void emitError(StringRef Msg) const;
263
264  /// getDesc - Returns the target instruction descriptor of this
265  /// MachineInstr.
266  const MCInstrDesc &getDesc() const { return *MCID; }
267
268  /// getOpcode - Returns the opcode of this MachineInstr.
269  ///
270  int getOpcode() const { return MCID->Opcode; }
271
272  /// Access to explicit operands of the instruction.
273  ///
274  unsigned getNumOperands() const { return NumOperands; }
275
276  const MachineOperand& getOperand(unsigned i) const {
277    assert(i < getNumOperands() && "getOperand() out of range!");
278    return Operands[i];
279  }
280  MachineOperand& getOperand(unsigned i) {
281    assert(i < getNumOperands() && "getOperand() out of range!");
282    return Operands[i];
283  }
284
285  /// getNumExplicitOperands - Returns the number of non-implicit operands.
286  ///
287  unsigned getNumExplicitOperands() const;
288
289  /// iterator/begin/end - Iterate over all operands of a machine instruction.
290  typedef MachineOperand *mop_iterator;
291  typedef const MachineOperand *const_mop_iterator;
292
293  mop_iterator operands_begin() { return Operands; }
294  mop_iterator operands_end() { return Operands + NumOperands; }
295
296  const_mop_iterator operands_begin() const { return Operands; }
297  const_mop_iterator operands_end() const { return Operands + NumOperands; }
298
299  iterator_range<mop_iterator> operands() {
300    return iterator_range<mop_iterator>(operands_begin(), operands_end());
301  }
302  iterator_range<const_mop_iterator> operands() const {
303    return iterator_range<const_mop_iterator>(operands_begin(), operands_end());
304  }
305  iterator_range<mop_iterator> explicit_operands() {
306    return iterator_range<mop_iterator>(
307        operands_begin(), operands_begin() + getNumExplicitOperands());
308  }
309  iterator_range<const_mop_iterator> explicit_operands() const {
310    return iterator_range<const_mop_iterator>(
311        operands_begin(), operands_begin() + getNumExplicitOperands());
312  }
313  iterator_range<mop_iterator> implicit_operands() {
314    return iterator_range<mop_iterator>(explicit_operands().end(),
315                                        operands_end());
316  }
317  iterator_range<const_mop_iterator> implicit_operands() const {
318    return iterator_range<const_mop_iterator>(explicit_operands().end(),
319                                              operands_end());
320  }
321  iterator_range<mop_iterator> defs() {
322    return iterator_range<mop_iterator>(
323        operands_begin(), operands_begin() + getDesc().getNumDefs());
324  }
325  iterator_range<const_mop_iterator> defs() const {
326    return iterator_range<const_mop_iterator>(
327        operands_begin(), operands_begin() + getDesc().getNumDefs());
328  }
329  iterator_range<mop_iterator> uses() {
330    return iterator_range<mop_iterator>(
331        operands_begin() + getDesc().getNumDefs(), operands_end());
332  }
333  iterator_range<const_mop_iterator> uses() const {
334    return iterator_range<const_mop_iterator>(
335        operands_begin() + getDesc().getNumDefs(), operands_end());
336  }
337
338  /// Access to memory operands of the instruction
339  mmo_iterator memoperands_begin() const { return MemRefs; }
340  mmo_iterator memoperands_end() const { return MemRefs + NumMemRefs; }
341  bool memoperands_empty() const { return NumMemRefs == 0; }
342
343  iterator_range<mmo_iterator>  memoperands() {
344    return iterator_range<mmo_iterator>(memoperands_begin(), memoperands_end());
345  }
346  iterator_range<mmo_iterator> memoperands() const {
347    return iterator_range<mmo_iterator>(memoperands_begin(), memoperands_end());
348  }
349
350  /// hasOneMemOperand - Return true if this instruction has exactly one
351  /// MachineMemOperand.
352  bool hasOneMemOperand() const {
353    return NumMemRefs == 1;
354  }
355
356  /// API for querying MachineInstr properties. They are the same as MCInstrDesc
357  /// queries but they are bundle aware.
358
359  enum QueryType {
360    IgnoreBundle,    // Ignore bundles
361    AnyInBundle,     // Return true if any instruction in bundle has property
362    AllInBundle      // Return true if all instructions in bundle have property
363  };
364
365  /// hasProperty - Return true if the instruction (or in the case of a bundle,
366  /// the instructions inside the bundle) has the specified property.
367  /// The first argument is the property being queried.
368  /// The second argument indicates whether the query should look inside
369  /// instruction bundles.
370  bool hasProperty(unsigned MCFlag, QueryType Type = AnyInBundle) const {
371    // Inline the fast path for unbundled or bundle-internal instructions.
372    if (Type == IgnoreBundle || !isBundled() || isBundledWithPred())
373      return getDesc().getFlags() & (1 << MCFlag);
374
375    // If this is the first instruction in a bundle, take the slow path.
376    return hasPropertyInBundle(1 << MCFlag, Type);
377  }
378
379  /// isVariadic - Return true if this instruction can have a variable number of
380  /// operands.  In this case, the variable operands will be after the normal
381  /// operands but before the implicit definitions and uses (if any are
382  /// present).
383  bool isVariadic(QueryType Type = IgnoreBundle) const {
384    return hasProperty(MCID::Variadic, Type);
385  }
386
387  /// hasOptionalDef - Set if this instruction has an optional definition, e.g.
388  /// ARM instructions which can set condition code if 's' bit is set.
389  bool hasOptionalDef(QueryType Type = IgnoreBundle) const {
390    return hasProperty(MCID::HasOptionalDef, Type);
391  }
392
393  /// isPseudo - Return true if this is a pseudo instruction that doesn't
394  /// correspond to a real machine instruction.
395  ///
396  bool isPseudo(QueryType Type = IgnoreBundle) const {
397    return hasProperty(MCID::Pseudo, Type);
398  }
399
400  bool isReturn(QueryType Type = AnyInBundle) const {
401    return hasProperty(MCID::Return, Type);
402  }
403
404  bool isCall(QueryType Type = AnyInBundle) const {
405    return hasProperty(MCID::Call, Type);
406  }
407
408  /// isBarrier - Returns true if the specified instruction stops control flow
409  /// from executing the instruction immediately following it.  Examples include
410  /// unconditional branches and return instructions.
411  bool isBarrier(QueryType Type = AnyInBundle) const {
412    return hasProperty(MCID::Barrier, Type);
413  }
414
415  /// isTerminator - Returns true if this instruction part of the terminator for
416  /// a basic block.  Typically this is things like return and branch
417  /// instructions.
418  ///
419  /// Various passes use this to insert code into the bottom of a basic block,
420  /// but before control flow occurs.
421  bool isTerminator(QueryType Type = AnyInBundle) const {
422    return hasProperty(MCID::Terminator, Type);
423  }
424
425  /// isBranch - Returns true if this is a conditional, unconditional, or
426  /// indirect branch.  Predicates below can be used to discriminate between
427  /// these cases, and the TargetInstrInfo::AnalyzeBranch method can be used to
428  /// get more information.
429  bool isBranch(QueryType Type = AnyInBundle) const {
430    return hasProperty(MCID::Branch, Type);
431  }
432
433  /// isIndirectBranch - Return true if this is an indirect branch, such as a
434  /// branch through a register.
435  bool isIndirectBranch(QueryType Type = AnyInBundle) const {
436    return hasProperty(MCID::IndirectBranch, Type);
437  }
438
439  /// isConditionalBranch - Return true if this is a branch which may fall
440  /// through to the next instruction or may transfer control flow to some other
441  /// block.  The TargetInstrInfo::AnalyzeBranch method can be used to get more
442  /// information about this branch.
443  bool isConditionalBranch(QueryType Type = AnyInBundle) const {
444    return isBranch(Type) & !isBarrier(Type) & !isIndirectBranch(Type);
445  }
446
447  /// isUnconditionalBranch - Return true if this is a branch which always
448  /// transfers control flow to some other block.  The
449  /// TargetInstrInfo::AnalyzeBranch method can be used to get more information
450  /// about this branch.
451  bool isUnconditionalBranch(QueryType Type = AnyInBundle) const {
452    return isBranch(Type) & isBarrier(Type) & !isIndirectBranch(Type);
453  }
454
455  /// Return true if this instruction has a predicate operand that
456  /// controls execution.  It may be set to 'always', or may be set to other
457  /// values.   There are various methods in TargetInstrInfo that can be used to
458  /// control and modify the predicate in this instruction.
459  bool isPredicable(QueryType Type = AllInBundle) const {
460    // If it's a bundle than all bundled instructions must be predicable for this
461    // to return true.
462    return hasProperty(MCID::Predicable, Type);
463  }
464
465  /// isCompare - Return true if this instruction is a comparison.
466  bool isCompare(QueryType Type = IgnoreBundle) const {
467    return hasProperty(MCID::Compare, Type);
468  }
469
470  /// isMoveImmediate - Return true if this instruction is a move immediate
471  /// (including conditional moves) instruction.
472  bool isMoveImmediate(QueryType Type = IgnoreBundle) const {
473    return hasProperty(MCID::MoveImm, Type);
474  }
475
476  /// isBitcast - Return true if this instruction is a bitcast instruction.
477  ///
478  bool isBitcast(QueryType Type = IgnoreBundle) const {
479    return hasProperty(MCID::Bitcast, Type);
480  }
481
482  /// isSelect - Return true if this instruction is a select instruction.
483  ///
484  bool isSelect(QueryType Type = IgnoreBundle) const {
485    return hasProperty(MCID::Select, Type);
486  }
487
488  /// isNotDuplicable - Return true if this instruction cannot be safely
489  /// duplicated.  For example, if the instruction has a unique labels attached
490  /// to it, duplicating it would cause multiple definition errors.
491  bool isNotDuplicable(QueryType Type = AnyInBundle) const {
492    return hasProperty(MCID::NotDuplicable, Type);
493  }
494
495  /// hasDelaySlot - Returns true if the specified instruction has a delay slot
496  /// which must be filled by the code generator.
497  bool hasDelaySlot(QueryType Type = AnyInBundle) const {
498    return hasProperty(MCID::DelaySlot, Type);
499  }
500
501  /// canFoldAsLoad - Return true for instructions that can be folded as
502  /// memory operands in other instructions. The most common use for this
503  /// is instructions that are simple loads from memory that don't modify
504  /// the loaded value in any way, but it can also be used for instructions
505  /// that can be expressed as constant-pool loads, such as V_SETALLONES
506  /// on x86, to allow them to be folded when it is beneficial.
507  /// This should only be set on instructions that return a value in their
508  /// only virtual register definition.
509  bool canFoldAsLoad(QueryType Type = IgnoreBundle) const {
510    return hasProperty(MCID::FoldableAsLoad, Type);
511  }
512
513  //===--------------------------------------------------------------------===//
514  // Side Effect Analysis
515  //===--------------------------------------------------------------------===//
516
517  /// mayLoad - Return true if this instruction could possibly read memory.
518  /// Instructions with this flag set are not necessarily simple load
519  /// instructions, they may load a value and modify it, for example.
520  bool mayLoad(QueryType Type = AnyInBundle) const {
521    if (isInlineAsm()) {
522      unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm();
523      if (ExtraInfo & InlineAsm::Extra_MayLoad)
524        return true;
525    }
526    return hasProperty(MCID::MayLoad, Type);
527  }
528
529
530  /// mayStore - Return true if this instruction could possibly modify memory.
531  /// Instructions with this flag set are not necessarily simple store
532  /// instructions, they may store a modified value based on their operands, or
533  /// may not actually modify anything, for example.
534  bool mayStore(QueryType Type = AnyInBundle) const {
535    if (isInlineAsm()) {
536      unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm();
537      if (ExtraInfo & InlineAsm::Extra_MayStore)
538        return true;
539    }
540    return hasProperty(MCID::MayStore, Type);
541  }
542
543  //===--------------------------------------------------------------------===//
544  // Flags that indicate whether an instruction can be modified by a method.
545  //===--------------------------------------------------------------------===//
546
547  /// isCommutable - Return true if this may be a 2- or 3-address
548  /// instruction (of the form "X = op Y, Z, ..."), which produces the same
549  /// result if Y and Z are exchanged.  If this flag is set, then the
550  /// TargetInstrInfo::commuteInstruction method may be used to hack on the
551  /// instruction.
552  ///
553  /// Note that this flag may be set on instructions that are only commutable
554  /// sometimes.  In these cases, the call to commuteInstruction will fail.
555  /// Also note that some instructions require non-trivial modification to
556  /// commute them.
557  bool isCommutable(QueryType Type = IgnoreBundle) const {
558    return hasProperty(MCID::Commutable, Type);
559  }
560
561  /// isConvertibleTo3Addr - Return true if this is a 2-address instruction
562  /// which can be changed into a 3-address instruction if needed.  Doing this
563  /// transformation can be profitable in the register allocator, because it
564  /// means that the instruction can use a 2-address form if possible, but
565  /// degrade into a less efficient form if the source and dest register cannot
566  /// be assigned to the same register.  For example, this allows the x86
567  /// backend to turn a "shl reg, 3" instruction into an LEA instruction, which
568  /// is the same speed as the shift but has bigger code size.
569  ///
570  /// If this returns true, then the target must implement the
571  /// TargetInstrInfo::convertToThreeAddress method for this instruction, which
572  /// is allowed to fail if the transformation isn't valid for this specific
573  /// instruction (e.g. shl reg, 4 on x86).
574  ///
575  bool isConvertibleTo3Addr(QueryType Type = IgnoreBundle) const {
576    return hasProperty(MCID::ConvertibleTo3Addr, Type);
577  }
578
579  /// usesCustomInsertionHook - Return true if this instruction requires
580  /// custom insertion support when the DAG scheduler is inserting it into a
581  /// machine basic block.  If this is true for the instruction, it basically
582  /// means that it is a pseudo instruction used at SelectionDAG time that is
583  /// expanded out into magic code by the target when MachineInstrs are formed.
584  ///
585  /// If this is true, the TargetLoweringInfo::InsertAtEndOfBasicBlock method
586  /// is used to insert this into the MachineBasicBlock.
587  bool usesCustomInsertionHook(QueryType Type = IgnoreBundle) const {
588    return hasProperty(MCID::UsesCustomInserter, Type);
589  }
590
591  /// hasPostISelHook - Return true if this instruction requires *adjustment*
592  /// after instruction selection by calling a target hook. For example, this
593  /// can be used to fill in ARM 's' optional operand depending on whether
594  /// the conditional flag register is used.
595  bool hasPostISelHook(QueryType Type = IgnoreBundle) const {
596    return hasProperty(MCID::HasPostISelHook, Type);
597  }
598
599  /// isRematerializable - Returns true if this instruction is a candidate for
600  /// remat.  This flag is deprecated, please don't use it anymore.  If this
601  /// flag is set, the isReallyTriviallyReMaterializable() method is called to
602  /// verify the instruction is really rematable.
603  bool isRematerializable(QueryType Type = AllInBundle) const {
604    // It's only possible to re-mat a bundle if all bundled instructions are
605    // re-materializable.
606    return hasProperty(MCID::Rematerializable, Type);
607  }
608
609  /// isAsCheapAsAMove - Returns true if this instruction has the same cost (or
610  /// less) than a move instruction. This is useful during certain types of
611  /// optimizations (e.g., remat during two-address conversion or machine licm)
612  /// where we would like to remat or hoist the instruction, but not if it costs
613  /// more than moving the instruction into the appropriate register. Note, we
614  /// are not marking copies from and to the same register class with this flag.
615  bool isAsCheapAsAMove(QueryType Type = AllInBundle) const {
616    // Only returns true for a bundle if all bundled instructions are cheap.
617    return hasProperty(MCID::CheapAsAMove, Type);
618  }
619
620  /// hasExtraSrcRegAllocReq - Returns true if this instruction source operands
621  /// have special register allocation requirements that are not captured by the
622  /// operand register classes. e.g. ARM::STRD's two source registers must be an
623  /// even / odd pair, ARM::STM registers have to be in ascending order.
624  /// Post-register allocation passes should not attempt to change allocations
625  /// for sources of instructions with this flag.
626  bool hasExtraSrcRegAllocReq(QueryType Type = AnyInBundle) const {
627    return hasProperty(MCID::ExtraSrcRegAllocReq, Type);
628  }
629
630  /// hasExtraDefRegAllocReq - Returns true if this instruction def operands
631  /// have special register allocation requirements that are not captured by the
632  /// operand register classes. e.g. ARM::LDRD's two def registers must be an
633  /// even / odd pair, ARM::LDM registers have to be in ascending order.
634  /// Post-register allocation passes should not attempt to change allocations
635  /// for definitions of instructions with this flag.
636  bool hasExtraDefRegAllocReq(QueryType Type = AnyInBundle) const {
637    return hasProperty(MCID::ExtraDefRegAllocReq, Type);
638  }
639
640
641  enum MICheckType {
642    CheckDefs,      // Check all operands for equality
643    CheckKillDead,  // Check all operands including kill / dead markers
644    IgnoreDefs,     // Ignore all definitions
645    IgnoreVRegDefs  // Ignore virtual register definitions
646  };
647
648  /// isIdenticalTo - Return true if this instruction is identical to (same
649  /// opcode and same operands as) the specified instruction.
650  bool isIdenticalTo(const MachineInstr *Other,
651                     MICheckType Check = CheckDefs) const;
652
653  /// Unlink 'this' from the containing basic block, and return it without
654  /// deleting it.
655  ///
656  /// This function can not be used on bundled instructions, use
657  /// removeFromBundle() to remove individual instructions from a bundle.
658  MachineInstr *removeFromParent();
659
660  /// Unlink this instruction from its basic block and return it without
661  /// deleting it.
662  ///
663  /// If the instruction is part of a bundle, the other instructions in the
664  /// bundle remain bundled.
665  MachineInstr *removeFromBundle();
666
667  /// Unlink 'this' from the containing basic block and delete it.
668  ///
669  /// If this instruction is the header of a bundle, the whole bundle is erased.
670  /// This function can not be used for instructions inside a bundle, use
671  /// eraseFromBundle() to erase individual bundled instructions.
672  void eraseFromParent();
673
674  /// Unlink 'this' form its basic block and delete it.
675  ///
676  /// If the instruction is part of a bundle, the other instructions in the
677  /// bundle remain bundled.
678  void eraseFromBundle();
679
680  bool isEHLabel() const { return getOpcode() == TargetOpcode::EH_LABEL; }
681  bool isGCLabel() const { return getOpcode() == TargetOpcode::GC_LABEL; }
682
683  /// isLabel - Returns true if the MachineInstr represents a label.
684  ///
685  bool isLabel() const { return isEHLabel() || isGCLabel(); }
686  bool isCFIInstruction() const {
687    return getOpcode() == TargetOpcode::CFI_INSTRUCTION;
688  }
689
690  // True if the instruction represents a position in the function.
691  bool isPosition() const { return isLabel() || isCFIInstruction(); }
692
693  bool isDebugValue() const { return getOpcode() == TargetOpcode::DBG_VALUE; }
694  /// A DBG_VALUE is indirect iff the first operand is a register and
695  /// the second operand is an immediate.
696  bool isIndirectDebugValue() const {
697    return isDebugValue()
698      && getOperand(0).isReg()
699      && getOperand(1).isImm();
700  }
701
702  bool isPHI() const { return getOpcode() == TargetOpcode::PHI; }
703  bool isKill() const { return getOpcode() == TargetOpcode::KILL; }
704  bool isImplicitDef() const { return getOpcode()==TargetOpcode::IMPLICIT_DEF; }
705  bool isInlineAsm() const { return getOpcode() == TargetOpcode::INLINEASM; }
706  bool isMSInlineAsm() const {
707    return getOpcode() == TargetOpcode::INLINEASM && getInlineAsmDialect();
708  }
709  bool isStackAligningInlineAsm() const;
710  InlineAsm::AsmDialect getInlineAsmDialect() const;
711  bool isInsertSubreg() const {
712    return getOpcode() == TargetOpcode::INSERT_SUBREG;
713  }
714  bool isSubregToReg() const {
715    return getOpcode() == TargetOpcode::SUBREG_TO_REG;
716  }
717  bool isRegSequence() const {
718    return getOpcode() == TargetOpcode::REG_SEQUENCE;
719  }
720  bool isBundle() const {
721    return getOpcode() == TargetOpcode::BUNDLE;
722  }
723  bool isCopy() const {
724    return getOpcode() == TargetOpcode::COPY;
725  }
726  bool isFullCopy() const {
727    return isCopy() && !getOperand(0).getSubReg() && !getOperand(1).getSubReg();
728  }
729  bool isExtractSubreg() const {
730    return getOpcode() == TargetOpcode::EXTRACT_SUBREG;
731  }
732
733  /// isCopyLike - Return true if the instruction behaves like a copy.
734  /// This does not include native copy instructions.
735  bool isCopyLike() const {
736    return isCopy() || isSubregToReg();
737  }
738
739  /// isIdentityCopy - Return true is the instruction is an identity copy.
740  bool isIdentityCopy() const {
741    return isCopy() && getOperand(0).getReg() == getOperand(1).getReg() &&
742      getOperand(0).getSubReg() == getOperand(1).getSubReg();
743  }
744
745  /// isTransient - Return true if this is a transient instruction that is
746  /// either very likely to be eliminated during register allocation (such as
747  /// copy-like instructions), or if this instruction doesn't have an
748  /// execution-time cost.
749  bool isTransient() const {
750    switch(getOpcode()) {
751    default: return false;
752    // Copy-like instructions are usually eliminated during register allocation.
753    case TargetOpcode::PHI:
754    case TargetOpcode::COPY:
755    case TargetOpcode::INSERT_SUBREG:
756    case TargetOpcode::SUBREG_TO_REG:
757    case TargetOpcode::REG_SEQUENCE:
758    // Pseudo-instructions that don't produce any real output.
759    case TargetOpcode::IMPLICIT_DEF:
760    case TargetOpcode::KILL:
761    case TargetOpcode::CFI_INSTRUCTION:
762    case TargetOpcode::EH_LABEL:
763    case TargetOpcode::GC_LABEL:
764    case TargetOpcode::DBG_VALUE:
765      return true;
766    }
767  }
768
769  /// Return the number of instructions inside the MI bundle, excluding the
770  /// bundle header.
771  ///
772  /// This is the number of instructions that MachineBasicBlock::iterator
773  /// skips, 0 for unbundled instructions.
774  unsigned getBundleSize() const;
775
776  /// readsRegister - Return true if the MachineInstr reads the specified
777  /// register. If TargetRegisterInfo is passed, then it also checks if there
778  /// is a read of a super-register.
779  /// This does not count partial redefines of virtual registers as reads:
780  ///   %reg1024:6 = OP.
781  bool readsRegister(unsigned Reg,
782                     const TargetRegisterInfo *TRI = nullptr) const {
783    return findRegisterUseOperandIdx(Reg, false, TRI) != -1;
784  }
785
786  /// readsVirtualRegister - Return true if the MachineInstr reads the specified
787  /// virtual register. Take into account that a partial define is a
788  /// read-modify-write operation.
789  bool readsVirtualRegister(unsigned Reg) const {
790    return readsWritesVirtualRegister(Reg).first;
791  }
792
793  /// readsWritesVirtualRegister - Return a pair of bools (reads, writes)
794  /// indicating if this instruction reads or writes Reg. This also considers
795  /// partial defines.
796  /// If Ops is not null, all operand indices for Reg are added.
797  std::pair<bool,bool> readsWritesVirtualRegister(unsigned Reg,
798                                SmallVectorImpl<unsigned> *Ops = nullptr) const;
799
800  /// killsRegister - Return true if the MachineInstr kills the specified
801  /// register. If TargetRegisterInfo is passed, then it also checks if there is
802  /// a kill of a super-register.
803  bool killsRegister(unsigned Reg,
804                     const TargetRegisterInfo *TRI = nullptr) const {
805    return findRegisterUseOperandIdx(Reg, true, TRI) != -1;
806  }
807
808  /// definesRegister - Return true if the MachineInstr fully defines the
809  /// specified register. If TargetRegisterInfo is passed, then it also checks
810  /// if there is a def of a super-register.
811  /// NOTE: It's ignoring subreg indices on virtual registers.
812  bool definesRegister(unsigned Reg,
813                       const TargetRegisterInfo *TRI = nullptr) const {
814    return findRegisterDefOperandIdx(Reg, false, false, TRI) != -1;
815  }
816
817  /// modifiesRegister - Return true if the MachineInstr modifies (fully define
818  /// or partially define) the specified register.
819  /// NOTE: It's ignoring subreg indices on virtual registers.
820  bool modifiesRegister(unsigned Reg, const TargetRegisterInfo *TRI) const {
821    return findRegisterDefOperandIdx(Reg, false, true, TRI) != -1;
822  }
823
824  /// registerDefIsDead - Returns true if the register is dead in this machine
825  /// instruction. If TargetRegisterInfo is passed, then it also checks
826  /// if there is a dead def of a super-register.
827  bool registerDefIsDead(unsigned Reg,
828                         const TargetRegisterInfo *TRI = nullptr) const {
829    return findRegisterDefOperandIdx(Reg, true, false, TRI) != -1;
830  }
831
832  /// findRegisterUseOperandIdx() - Returns the operand index that is a use of
833  /// the specific register or -1 if it is not found. It further tightens
834  /// the search criteria to a use that kills the register if isKill is true.
835  int findRegisterUseOperandIdx(unsigned Reg, bool isKill = false,
836                                const TargetRegisterInfo *TRI = nullptr) const;
837
838  /// findRegisterUseOperand - Wrapper for findRegisterUseOperandIdx, it returns
839  /// a pointer to the MachineOperand rather than an index.
840  MachineOperand *findRegisterUseOperand(unsigned Reg, bool isKill = false,
841                                      const TargetRegisterInfo *TRI = nullptr) {
842    int Idx = findRegisterUseOperandIdx(Reg, isKill, TRI);
843    return (Idx == -1) ? nullptr : &getOperand(Idx);
844  }
845
846  /// findRegisterDefOperandIdx() - Returns the operand index that is a def of
847  /// the specified register or -1 if it is not found. If isDead is true, defs
848  /// that are not dead are skipped. If Overlap is true, then it also looks for
849  /// defs that merely overlap the specified register. If TargetRegisterInfo is
850  /// non-null, then it also checks if there is a def of a super-register.
851  /// This may also return a register mask operand when Overlap is true.
852  int findRegisterDefOperandIdx(unsigned Reg,
853                                bool isDead = false, bool Overlap = false,
854                                const TargetRegisterInfo *TRI = nullptr) const;
855
856  /// findRegisterDefOperand - Wrapper for findRegisterDefOperandIdx, it returns
857  /// a pointer to the MachineOperand rather than an index.
858  MachineOperand *findRegisterDefOperand(unsigned Reg, bool isDead = false,
859                                      const TargetRegisterInfo *TRI = nullptr) {
860    int Idx = findRegisterDefOperandIdx(Reg, isDead, false, TRI);
861    return (Idx == -1) ? nullptr : &getOperand(Idx);
862  }
863
864  /// findFirstPredOperandIdx() - Find the index of the first operand in the
865  /// operand list that is used to represent the predicate. It returns -1 if
866  /// none is found.
867  int findFirstPredOperandIdx() const;
868
869  /// findInlineAsmFlagIdx() - Find the index of the flag word operand that
870  /// corresponds to operand OpIdx on an inline asm instruction.  Returns -1 if
871  /// getOperand(OpIdx) does not belong to an inline asm operand group.
872  ///
873  /// If GroupNo is not NULL, it will receive the number of the operand group
874  /// containing OpIdx.
875  ///
876  /// The flag operand is an immediate that can be decoded with methods like
877  /// InlineAsm::hasRegClassConstraint().
878  ///
879  int findInlineAsmFlagIdx(unsigned OpIdx, unsigned *GroupNo = nullptr) const;
880
881  /// getRegClassConstraint - Compute the static register class constraint for
882  /// operand OpIdx.  For normal instructions, this is derived from the
883  /// MCInstrDesc.  For inline assembly it is derived from the flag words.
884  ///
885  /// Returns NULL if the static register classs constraint cannot be
886  /// determined.
887  ///
888  const TargetRegisterClass*
889  getRegClassConstraint(unsigned OpIdx,
890                        const TargetInstrInfo *TII,
891                        const TargetRegisterInfo *TRI) const;
892
893  /// \brief Applies the constraints (def/use) implied by this MI on \p Reg to
894  /// the given \p CurRC.
895  /// If \p ExploreBundle is set and MI is part of a bundle, all the
896  /// instructions inside the bundle will be taken into account. In other words,
897  /// this method accumulates all the constrains of the operand of this MI and
898  /// the related bundle if MI is a bundle or inside a bundle.
899  ///
900  /// Returns the register class that statisfies both \p CurRC and the
901  /// constraints set by MI. Returns NULL if such a register class does not
902  /// exist.
903  ///
904  /// \pre CurRC must not be NULL.
905  const TargetRegisterClass *getRegClassConstraintEffectForVReg(
906      unsigned Reg, const TargetRegisterClass *CurRC,
907      const TargetInstrInfo *TII, const TargetRegisterInfo *TRI,
908      bool ExploreBundle = false) const;
909
910  /// \brief Applies the constraints (def/use) implied by the \p OpIdx operand
911  /// to the given \p CurRC.
912  ///
913  /// Returns the register class that statisfies both \p CurRC and the
914  /// constraints set by \p OpIdx MI. Returns NULL if such a register class
915  /// does not exist.
916  ///
917  /// \pre CurRC must not be NULL.
918  /// \pre The operand at \p OpIdx must be a register.
919  const TargetRegisterClass *
920  getRegClassConstraintEffect(unsigned OpIdx, const TargetRegisterClass *CurRC,
921                              const TargetInstrInfo *TII,
922                              const TargetRegisterInfo *TRI) const;
923
924  /// tieOperands - Add a tie between the register operands at DefIdx and
925  /// UseIdx. The tie will cause the register allocator to ensure that the two
926  /// operands are assigned the same physical register.
927  ///
928  /// Tied operands are managed automatically for explicit operands in the
929  /// MCInstrDesc. This method is for exceptional cases like inline asm.
930  void tieOperands(unsigned DefIdx, unsigned UseIdx);
931
932  /// findTiedOperandIdx - Given the index of a tied register operand, find the
933  /// operand it is tied to. Defs are tied to uses and vice versa. Returns the
934  /// index of the tied operand which must exist.
935  unsigned findTiedOperandIdx(unsigned OpIdx) const;
936
937  /// isRegTiedToUseOperand - Given the index of a register def operand,
938  /// check if the register def is tied to a source operand, due to either
939  /// two-address elimination or inline assembly constraints. Returns the
940  /// first tied use operand index by reference if UseOpIdx is not null.
941  bool isRegTiedToUseOperand(unsigned DefOpIdx,
942                             unsigned *UseOpIdx = nullptr) const {
943    const MachineOperand &MO = getOperand(DefOpIdx);
944    if (!MO.isReg() || !MO.isDef() || !MO.isTied())
945      return false;
946    if (UseOpIdx)
947      *UseOpIdx = findTiedOperandIdx(DefOpIdx);
948    return true;
949  }
950
951  /// isRegTiedToDefOperand - Return true if the use operand of the specified
952  /// index is tied to a def operand. It also returns the def operand index by
953  /// reference if DefOpIdx is not null.
954  bool isRegTiedToDefOperand(unsigned UseOpIdx,
955                             unsigned *DefOpIdx = nullptr) const {
956    const MachineOperand &MO = getOperand(UseOpIdx);
957    if (!MO.isReg() || !MO.isUse() || !MO.isTied())
958      return false;
959    if (DefOpIdx)
960      *DefOpIdx = findTiedOperandIdx(UseOpIdx);
961    return true;
962  }
963
964  /// clearKillInfo - Clears kill flags on all operands.
965  ///
966  void clearKillInfo();
967
968  /// substituteRegister - Replace all occurrences of FromReg with ToReg:SubIdx,
969  /// properly composing subreg indices where necessary.
970  void substituteRegister(unsigned FromReg, unsigned ToReg, unsigned SubIdx,
971                          const TargetRegisterInfo &RegInfo);
972
973  /// addRegisterKilled - We have determined MI kills a register. Look for the
974  /// operand that uses it and mark it as IsKill. If AddIfNotFound is true,
975  /// add a implicit operand if it's not found. Returns true if the operand
976  /// exists / is added.
977  bool addRegisterKilled(unsigned IncomingReg,
978                         const TargetRegisterInfo *RegInfo,
979                         bool AddIfNotFound = false);
980
981  /// clearRegisterKills - Clear all kill flags affecting Reg.  If RegInfo is
982  /// provided, this includes super-register kills.
983  void clearRegisterKills(unsigned Reg, const TargetRegisterInfo *RegInfo);
984
985  /// addRegisterDead - We have determined MI defined a register without a use.
986  /// Look for the operand that defines it and mark it as IsDead. If
987  /// AddIfNotFound is true, add a implicit operand if it's not found. Returns
988  /// true if the operand exists / is added.
989  bool addRegisterDead(unsigned Reg, const TargetRegisterInfo *RegInfo,
990                       bool AddIfNotFound = false);
991
992  /// addRegisterDefined - We have determined MI defines a register. Make sure
993  /// there is an operand defining Reg.
994  void addRegisterDefined(unsigned Reg,
995                          const TargetRegisterInfo *RegInfo = nullptr);
996
997  /// setPhysRegsDeadExcept - Mark every physreg used by this instruction as
998  /// dead except those in the UsedRegs list.
999  ///
1000  /// On instructions with register mask operands, also add implicit-def
1001  /// operands for all registers in UsedRegs.
1002  void setPhysRegsDeadExcept(ArrayRef<unsigned> UsedRegs,
1003                             const TargetRegisterInfo &TRI);
1004
1005  /// isSafeToMove - Return true if it is safe to move this instruction. If
1006  /// SawStore is set to true, it means that there is a store (or call) between
1007  /// the instruction's location and its intended destination.
1008  bool isSafeToMove(const TargetInstrInfo *TII, AliasAnalysis *AA,
1009                    bool &SawStore) const;
1010
1011  /// hasOrderedMemoryRef - Return true if this instruction may have an ordered
1012  /// or volatile memory reference, or if the information describing the memory
1013  /// reference is not available. Return false if it is known to have no
1014  /// ordered or volatile memory references.
1015  bool hasOrderedMemoryRef() const;
1016
1017  /// isInvariantLoad - Return true if this instruction is loading from a
1018  /// location whose value is invariant across the function.  For example,
1019  /// loading a value from the constant pool or from the argument area of
1020  /// a function if it does not change.  This should only return true of *all*
1021  /// loads the instruction does are invariant (if it does multiple loads).
1022  bool isInvariantLoad(AliasAnalysis *AA) const;
1023
1024  /// isConstantValuePHI - If the specified instruction is a PHI that always
1025  /// merges together the same virtual register, return the register, otherwise
1026  /// return 0.
1027  unsigned isConstantValuePHI() const;
1028
1029  /// hasUnmodeledSideEffects - Return true if this instruction has side
1030  /// effects that are not modeled by mayLoad / mayStore, etc.
1031  /// For all instructions, the property is encoded in MCInstrDesc::Flags
1032  /// (see MCInstrDesc::hasUnmodeledSideEffects(). The only exception is
1033  /// INLINEASM instruction, in which case the side effect property is encoded
1034  /// in one of its operands (see InlineAsm::Extra_HasSideEffect).
1035  ///
1036  bool hasUnmodeledSideEffects() const;
1037
1038  /// allDefsAreDead - Return true if all the defs of this instruction are dead.
1039  ///
1040  bool allDefsAreDead() const;
1041
1042  /// copyImplicitOps - Copy implicit register operands from specified
1043  /// instruction to this instruction.
1044  void copyImplicitOps(MachineFunction &MF, const MachineInstr *MI);
1045
1046  //
1047  // Debugging support
1048  //
1049  void print(raw_ostream &OS, const TargetMachine *TM = nullptr,
1050             bool SkipOpers = false) const;
1051  void dump() const;
1052
1053  //===--------------------------------------------------------------------===//
1054  // Accessors used to build up machine instructions.
1055
1056  /// Add the specified operand to the instruction.  If it is an implicit
1057  /// operand, it is added to the end of the operand list.  If it is an
1058  /// explicit operand it is added at the end of the explicit operand list
1059  /// (before the first implicit operand).
1060  ///
1061  /// MF must be the machine function that was used to allocate this
1062  /// instruction.
1063  ///
1064  /// MachineInstrBuilder provides a more convenient interface for creating
1065  /// instructions and adding operands.
1066  void addOperand(MachineFunction &MF, const MachineOperand &Op);
1067
1068  /// Add an operand without providing an MF reference. This only works for
1069  /// instructions that are inserted in a basic block.
1070  ///
1071  /// MachineInstrBuilder and the two-argument addOperand(MF, MO) should be
1072  /// preferred.
1073  void addOperand(const MachineOperand &Op);
1074
1075  /// setDesc - Replace the instruction descriptor (thus opcode) of
1076  /// the current instruction with a new one.
1077  ///
1078  void setDesc(const MCInstrDesc &tid) { MCID = &tid; }
1079
1080  /// setDebugLoc - Replace current source information with new such.
1081  /// Avoid using this, the constructor argument is preferable.
1082  ///
1083  void setDebugLoc(const DebugLoc dl) { debugLoc = dl; }
1084
1085  /// RemoveOperand - Erase an operand  from an instruction, leaving it with one
1086  /// fewer operand than it started with.
1087  ///
1088  void RemoveOperand(unsigned i);
1089
1090  /// addMemOperand - Add a MachineMemOperand to the machine instruction.
1091  /// This function should be used only occasionally. The setMemRefs function
1092  /// is the primary method for setting up a MachineInstr's MemRefs list.
1093  void addMemOperand(MachineFunction &MF, MachineMemOperand *MO);
1094
1095  /// setMemRefs - Assign this MachineInstr's memory reference descriptor
1096  /// list. This does not transfer ownership.
1097  void setMemRefs(mmo_iterator NewMemRefs, mmo_iterator NewMemRefsEnd) {
1098    MemRefs = NewMemRefs;
1099    NumMemRefs = uint8_t(NewMemRefsEnd - NewMemRefs);
1100    assert(NumMemRefs == NewMemRefsEnd - NewMemRefs && "Too many memrefs");
1101  }
1102
1103private:
1104  /// getRegInfo - If this instruction is embedded into a MachineFunction,
1105  /// return the MachineRegisterInfo object for the current function, otherwise
1106  /// return null.
1107  MachineRegisterInfo *getRegInfo();
1108
1109  /// untieRegOperand - Break any tie involving OpIdx.
1110  void untieRegOperand(unsigned OpIdx) {
1111    MachineOperand &MO = getOperand(OpIdx);
1112    if (MO.isReg() && MO.isTied()) {
1113      getOperand(findTiedOperandIdx(OpIdx)).TiedTo = 0;
1114      MO.TiedTo = 0;
1115    }
1116  }
1117
1118  /// addImplicitDefUseOperands - Add all implicit def and use operands to
1119  /// this instruction.
1120  void addImplicitDefUseOperands(MachineFunction &MF);
1121
1122  /// RemoveRegOperandsFromUseLists - Unlink all of the register operands in
1123  /// this instruction from their respective use lists.  This requires that the
1124  /// operands already be on their use lists.
1125  void RemoveRegOperandsFromUseLists(MachineRegisterInfo&);
1126
1127  /// AddRegOperandsToUseLists - Add all of the register operands in
1128  /// this instruction from their respective use lists.  This requires that the
1129  /// operands not be on their use lists yet.
1130  void AddRegOperandsToUseLists(MachineRegisterInfo&);
1131
1132  /// hasPropertyInBundle - Slow path for hasProperty when we're dealing with a
1133  /// bundle.
1134  bool hasPropertyInBundle(unsigned Mask, QueryType Type) const;
1135
1136  /// \brief Implements the logic of getRegClassConstraintEffectForVReg for the
1137  /// this MI and the given operand index \p OpIdx.
1138  /// If the related operand does not constrained Reg, this returns CurRC.
1139  const TargetRegisterClass *getRegClassConstraintEffectForVRegImpl(
1140      unsigned OpIdx, unsigned Reg, const TargetRegisterClass *CurRC,
1141      const TargetInstrInfo *TII, const TargetRegisterInfo *TRI) const;
1142};
1143
1144/// MachineInstrExpressionTrait - Special DenseMapInfo traits to compare
1145/// MachineInstr* by *value* of the instruction rather than by pointer value.
1146/// The hashing and equality testing functions ignore definitions so this is
1147/// useful for CSE, etc.
1148struct MachineInstrExpressionTrait : DenseMapInfo<MachineInstr*> {
1149  static inline MachineInstr *getEmptyKey() {
1150    return nullptr;
1151  }
1152
1153  static inline MachineInstr *getTombstoneKey() {
1154    return reinterpret_cast<MachineInstr*>(-1);
1155  }
1156
1157  static unsigned getHashValue(const MachineInstr* const &MI);
1158
1159  static bool isEqual(const MachineInstr* const &LHS,
1160                      const MachineInstr* const &RHS) {
1161    if (RHS == getEmptyKey() || RHS == getTombstoneKey() ||
1162        LHS == getEmptyKey() || LHS == getTombstoneKey())
1163      return LHS == RHS;
1164    return LHS->isIdenticalTo(RHS, MachineInstr::IgnoreVRegDefs);
1165  }
1166};
1167
1168//===----------------------------------------------------------------------===//
1169// Debugging Support
1170
1171inline raw_ostream& operator<<(raw_ostream &OS, const MachineInstr &MI) {
1172  MI.print(OS);
1173  return OS;
1174}
1175
1176} // End llvm namespace
1177
1178#endif
1179