LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MachineFunction.h
Go to the documentation of this file.
1 //===-- llvm/CodeGen/MachineFunction.h --------------------------*- 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 // Collect native machine code for a function. This class contains a list of
11 // MachineBasicBlock instances that make up the current compiled function.
12 //
13 // This class also contains pointers to various classes which hold
14 // target-specific information about the generated code.
15 //
16 //===----------------------------------------------------------------------===//
17 
18 #ifndef LLVM_CODEGEN_MACHINEFUNCTION_H
19 #define LLVM_CODEGEN_MACHINEFUNCTION_H
20 
21 #include "llvm/ADT/ilist.h"
23 #include "llvm/Support/Allocator.h"
25 #include "llvm/Support/DebugLoc.h"
26 #include "llvm/Support/Recycler.h"
27 
28 namespace llvm {
29 
30 class Value;
31 class Function;
32 class GCModuleInfo;
33 class MachineRegisterInfo;
34 class MachineFrameInfo;
35 class MachineConstantPool;
36 class MachineJumpTableInfo;
37 class MachineModuleInfo;
38 class MCContext;
39 class Pass;
40 class TargetMachine;
41 class TargetRegisterClass;
42 struct MachinePointerInfo;
43 
44 template <>
46  : public ilist_default_traits<MachineBasicBlock> {
48 public:
50  return static_cast<MachineBasicBlock*>(&Sentinel);
51  }
53 
56  return createSentinel();
57  }
59 
62  void deleteNode(MachineBasicBlock *MBB);
63 private:
64  void createNode(const MachineBasicBlock &);
65 };
66 
67 /// MachineFunctionInfo - This class can be derived from and used by targets to
68 /// hold private target-specific information for each MachineFunction. Objects
69 /// of type are accessed/created with MF::getInfo and destroyed when the
70 /// MachineFunction is destroyed.
72  virtual ~MachineFunctionInfo();
73 };
74 
76  const Function *Fn;
77  const TargetMachine &Target;
78  MCContext &Ctx;
79  MachineModuleInfo &MMI;
80  GCModuleInfo *GMI;
81 
82  // RegInfo - Information about each register in use in the function.
83  MachineRegisterInfo *RegInfo;
84 
85  // Used to keep track of target-specific per-machine function information for
86  // the target implementation.
87  MachineFunctionInfo *MFInfo;
88 
89  // Keep track of objects allocated on the stack.
90  MachineFrameInfo *FrameInfo;
91 
92  // Keep track of constants which are spilled to memory
93  MachineConstantPool *ConstantPool;
94 
95  // Keep track of jump tables for switch instructions
96  MachineJumpTableInfo *JumpTableInfo;
97 
98  // Function-level unique numbering for MachineBasicBlocks. When a
99  // MachineBasicBlock is inserted into a MachineFunction is it automatically
100  // numbered and this vector keeps track of the mapping from ID's to MBB's.
101  std::vector<MachineBasicBlock*> MBBNumbering;
102 
103  // Pool-allocate MachineFunction-lifetime and IR objects.
104  BumpPtrAllocator Allocator;
105 
106  // Allocation management for instructions in function.
107  Recycler<MachineInstr> InstructionRecycler;
108 
109  // Allocation management for operand arrays on instructions.
110  ArrayRecycler<MachineOperand> OperandRecycler;
111 
112  // Allocation management for basic blocks in function.
113  Recycler<MachineBasicBlock> BasicBlockRecycler;
114 
115  // List of machine basic blocks in function
117  BasicBlockListType BasicBlocks;
118 
119  /// FunctionNumber - This provides a unique ID for each function emitted in
120  /// this translation unit.
121  ///
122  unsigned FunctionNumber;
123 
124  /// Alignment - The alignment of the function.
125  unsigned Alignment;
126 
127  /// ExposesReturnsTwice - True if the function calls setjmp or related
128  /// functions with attribute "returns twice", but doesn't have
129  /// the attribute itself.
130  /// This is used to limit optimizations which cannot reason
131  /// about the control flow of such functions.
132  bool ExposesReturnsTwice;
133 
134  /// True if the function includes MS-style inline assembly.
135  bool HasMSInlineAsm;
136 
138  void operator=(const MachineFunction&) LLVM_DELETED_FUNCTION;
139 public:
140  MachineFunction(const Function *Fn, const TargetMachine &TM,
141  unsigned FunctionNum, MachineModuleInfo &MMI,
142  GCModuleInfo* GMI);
144 
145  MachineModuleInfo &getMMI() const { return MMI; }
146  GCModuleInfo *getGMI() const { return GMI; }
147  MCContext &getContext() const { return Ctx; }
148 
149  /// getFunction - Return the LLVM function that this machine code represents
150  ///
151  const Function *getFunction() const { return Fn; }
152 
153  /// getName - Return the name of the corresponding LLVM function.
154  ///
155  StringRef getName() const;
156 
157  /// getFunctionNumber - Return a unique ID for the current function.
158  ///
159  unsigned getFunctionNumber() const { return FunctionNumber; }
160 
161  /// getTarget - Return the target machine this machine code is compiled with
162  ///
163  const TargetMachine &getTarget() const { return Target; }
164 
165  /// getRegInfo - Return information about the registers currently in use.
166  ///
167  MachineRegisterInfo &getRegInfo() { return *RegInfo; }
168  const MachineRegisterInfo &getRegInfo() const { return *RegInfo; }
169 
170  /// getFrameInfo - Return the frame info object for the current function.
171  /// This object contains information about objects allocated on the stack
172  /// frame of the current function in an abstract way.
173  ///
174  MachineFrameInfo *getFrameInfo() { return FrameInfo; }
175  const MachineFrameInfo *getFrameInfo() const { return FrameInfo; }
176 
177  /// getJumpTableInfo - Return the jump table info object for the current
178  /// function. This object contains information about jump tables in the
179  /// current function. If the current function has no jump tables, this will
180  /// return null.
181  const MachineJumpTableInfo *getJumpTableInfo() const { return JumpTableInfo; }
182  MachineJumpTableInfo *getJumpTableInfo() { return JumpTableInfo; }
183 
184  /// getOrCreateJumpTableInfo - Get the JumpTableInfo for this function, if it
185  /// does already exist, allocate one.
186  MachineJumpTableInfo *getOrCreateJumpTableInfo(unsigned JTEntryKind);
187 
188 
189  /// getConstantPool - Return the constant pool object for the current
190  /// function.
191  ///
192  MachineConstantPool *getConstantPool() { return ConstantPool; }
193  const MachineConstantPool *getConstantPool() const { return ConstantPool; }
194 
195  /// getAlignment - Return the alignment (log2, not bytes) of the function.
196  ///
197  unsigned getAlignment() const { return Alignment; }
198 
199  /// setAlignment - Set the alignment (log2, not bytes) of the function.
200  ///
201  void setAlignment(unsigned A) { Alignment = A; }
202 
203  /// ensureAlignment - Make sure the function is at least 1 << A bytes aligned.
204  void ensureAlignment(unsigned A) {
205  if (Alignment < A) Alignment = A;
206  }
207 
208  /// exposesReturnsTwice - Returns true if the function calls setjmp or
209  /// any other similar functions with attribute "returns twice" without
210  /// having the attribute itself.
211  bool exposesReturnsTwice() const {
212  return ExposesReturnsTwice;
213  }
214 
215  /// setCallsSetJmp - Set a flag that indicates if there's a call to
216  /// a "returns twice" function.
217  void setExposesReturnsTwice(bool B) {
218  ExposesReturnsTwice = B;
219  }
220 
221  /// Returns true if the function contains any MS-style inline assembly.
222  bool hasMSInlineAsm() const {
223  return HasMSInlineAsm;
224  }
225 
226  /// Set a flag that indicates that the function contains MS-style inline
227  /// assembly.
228  void setHasMSInlineAsm(bool B) {
229  HasMSInlineAsm = B;
230  }
231 
232  /// getInfo - Keep track of various per-function pieces of information for
233  /// backends that would like to do so.
234  ///
235  template<typename Ty>
236  Ty *getInfo() {
237  if (!MFInfo) {
238  // This should be just `new (Allocator.Allocate<Ty>()) Ty(*this)', but
239  // that apparently breaks GCC 3.3.
240  Ty *Loc = static_cast<Ty*>(Allocator.Allocate(sizeof(Ty),
242  MFInfo = new (Loc) Ty(*this);
243  }
244  return static_cast<Ty*>(MFInfo);
245  }
246 
247  template<typename Ty>
248  const Ty *getInfo() const {
249  return const_cast<MachineFunction*>(this)->getInfo<Ty>();
250  }
251 
252  /// getBlockNumbered - MachineBasicBlocks are automatically numbered when they
253  /// are inserted into the machine function. The block number for a machine
254  /// basic block can be found by using the MBB::getBlockNumber method, this
255  /// method provides the inverse mapping.
256  ///
258  assert(N < MBBNumbering.size() && "Illegal block number");
259  assert(MBBNumbering[N] && "Block was removed from the machine function!");
260  return MBBNumbering[N];
261  }
262 
263  /// getNumBlockIDs - Return the number of MBB ID's allocated.
264  ///
265  unsigned getNumBlockIDs() const { return (unsigned)MBBNumbering.size(); }
266 
267  /// RenumberBlocks - This discards all of the MachineBasicBlock numbers and
268  /// recomputes them. This guarantees that the MBB numbers are sequential,
269  /// dense, and match the ordering of the blocks within the function. If a
270  /// specific MachineBasicBlock is specified, only that block and those after
271  /// it are renumbered.
272  void RenumberBlocks(MachineBasicBlock *MBBFrom = 0);
273 
274  /// print - Print out the MachineFunction in a format suitable for debugging
275  /// to the specified stream.
276  ///
277  void print(raw_ostream &OS, SlotIndexes* = 0) const;
278 
279  /// viewCFG - This function is meant for use from the debugger. You can just
280  /// say 'call F->viewCFG()' and a ghostview window should pop up from the
281  /// program, displaying the CFG of the current function with the code for each
282  /// basic block inside. This depends on there being a 'dot' and 'gv' program
283  /// in your path.
284  ///
285  void viewCFG() const;
286 
287  /// viewCFGOnly - This function is meant for use from the debugger. It works
288  /// just like viewCFG, but it does not include the contents of basic blocks
289  /// into the nodes, just the label. If you are only interested in the CFG
290  /// this can make the graph smaller.
291  ///
292  void viewCFGOnly() const;
293 
294  /// dump - Print the current MachineFunction to cerr, useful for debugger use.
295  ///
296  void dump() const;
297 
298  /// verify - Run the current MachineFunction through the machine code
299  /// verifier, useful for debugger use.
300  void verify(Pass *p = NULL, const char *Banner = NULL) const;
301 
302  // Provide accessors for the MachineBasicBlock list...
305  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
306  typedef std::reverse_iterator<iterator> reverse_iterator;
307 
308  /// addLiveIn - Add the specified physical register as a live-in value and
309  /// create a corresponding virtual register for it.
310  unsigned addLiveIn(unsigned PReg, const TargetRegisterClass *RC);
311 
312  //===--------------------------------------------------------------------===//
313  // BasicBlock accessor functions.
314  //
315  iterator begin() { return BasicBlocks.begin(); }
316  const_iterator begin() const { return BasicBlocks.begin(); }
317  iterator end () { return BasicBlocks.end(); }
318  const_iterator end () const { return BasicBlocks.end(); }
319 
320  reverse_iterator rbegin() { return BasicBlocks.rbegin(); }
321  const_reverse_iterator rbegin() const { return BasicBlocks.rbegin(); }
322  reverse_iterator rend () { return BasicBlocks.rend(); }
323  const_reverse_iterator rend () const { return BasicBlocks.rend(); }
324 
325  unsigned size() const { return (unsigned)BasicBlocks.size();}
326  bool empty() const { return BasicBlocks.empty(); }
327  const MachineBasicBlock &front() const { return BasicBlocks.front(); }
328  MachineBasicBlock &front() { return BasicBlocks.front(); }
329  const MachineBasicBlock & back() const { return BasicBlocks.back(); }
330  MachineBasicBlock & back() { return BasicBlocks.back(); }
331 
332  void push_back (MachineBasicBlock *MBB) { BasicBlocks.push_back (MBB); }
333  void push_front(MachineBasicBlock *MBB) { BasicBlocks.push_front(MBB); }
334  void insert(iterator MBBI, MachineBasicBlock *MBB) {
335  BasicBlocks.insert(MBBI, MBB);
336  }
337  void splice(iterator InsertPt, iterator MBBI) {
338  BasicBlocks.splice(InsertPt, BasicBlocks, MBBI);
339  }
340  void splice(iterator InsertPt, iterator MBBI, iterator MBBE) {
341  BasicBlocks.splice(InsertPt, BasicBlocks, MBBI, MBBE);
342  }
343 
344  void remove(iterator MBBI) {
345  BasicBlocks.remove(MBBI);
346  }
347  void erase(iterator MBBI) {
348  BasicBlocks.erase(MBBI);
349  }
350 
351  //===--------------------------------------------------------------------===//
352  // Internal functions used to automatically number MachineBasicBlocks
353  //
354 
355  /// \brief Adds the MBB to the internal numbering. Returns the unique number
356  /// assigned to the MBB.
357  ///
359  MBBNumbering.push_back(MBB);
360  return (unsigned)MBBNumbering.size()-1;
361  }
362 
363  /// removeFromMBBNumbering - Remove the specific machine basic block from our
364  /// tracker, this is only really to be used by the MachineBasicBlock
365  /// implementation.
366  void removeFromMBBNumbering(unsigned N) {
367  assert(N < MBBNumbering.size() && "Illegal basic block #");
368  MBBNumbering[N] = 0;
369  }
370 
371  /// CreateMachineInstr - Allocate a new MachineInstr. Use this instead
372  /// of `new MachineInstr'.
373  ///
375  DebugLoc DL,
376  bool NoImp = false);
377 
378  /// CloneMachineInstr - Create a new MachineInstr which is a copy of the
379  /// 'Orig' instruction, identical in all ways except the instruction
380  /// has no parent, prev, or next.
381  ///
382  /// See also TargetInstrInfo::duplicate() for target-specific fixes to cloned
383  /// instructions.
385 
386  /// DeleteMachineInstr - Delete the given MachineInstr.
387  ///
389 
390  /// CreateMachineBasicBlock - Allocate a new MachineBasicBlock. Use this
391  /// instead of `new MachineBasicBlock'.
392  ///
394 
395  /// DeleteMachineBasicBlock - Delete the given MachineBasicBlock.
396  ///
398 
399  /// getMachineMemOperand - Allocate a new MachineMemOperand.
400  /// MachineMemOperands are owned by the MachineFunction and need not be
401  /// explicitly deallocated.
403  unsigned f, uint64_t s,
404  unsigned base_alignment,
405  const MDNode *TBAAInfo = 0,
406  const MDNode *Ranges = 0);
407 
408  /// getMachineMemOperand - Allocate a new MachineMemOperand by copying
409  /// an existing one, adjusting by an offset and using the given size.
410  /// MachineMemOperands are owned by the MachineFunction and need not be
411  /// explicitly deallocated.
413  int64_t Offset, uint64_t Size);
414 
416 
417  /// Allocate an array of MachineOperands. This is only intended for use by
418  /// internal MachineInstr functions.
420  return OperandRecycler.allocate(Cap, Allocator);
421  }
422 
423  /// Dellocate an array of MachineOperands and recycle the memory. This is
424  /// only intended for use by internal MachineInstr functions.
425  /// Cap must be the same capacity that was used to allocate the array.
427  OperandRecycler.deallocate(Cap, Array);
428  }
429 
430  /// allocateMemRefsArray - Allocate an array to hold MachineMemOperand
431  /// pointers. This array is owned by the MachineFunction.
433 
434  /// extractLoadMemRefs - Allocate an array and populate it with just the
435  /// load information from the given MachineMemOperand sequence.
436  std::pair<MachineInstr::mmo_iterator,
440 
441  /// extractStoreMemRefs - Allocate an array and populate it with just the
442  /// store information from the given MachineMemOperand sequence.
443  std::pair<MachineInstr::mmo_iterator,
447 
448  //===--------------------------------------------------------------------===//
449  // Label Manipulation.
450  //
451 
452  /// getJTISymbol - Return the MCSymbol for the specified non-empty jump table.
453  /// If isLinkerPrivate is specified, an 'l' label is returned, otherwise a
454  /// normal 'L' label is returned.
455  MCSymbol *getJTISymbol(unsigned JTI, MCContext &Ctx,
456  bool isLinkerPrivate = false) const;
457 
458  /// getPICBaseSymbol - Return a function-local symbol to represent the PIC
459  /// base.
460  MCSymbol *getPICBaseSymbol() const;
461 };
462 
463 //===--------------------------------------------------------------------===//
464 // GraphTraits specializations for function basic block graphs (CFGs)
465 //===--------------------------------------------------------------------===//
466 
467 // Provide specializations of GraphTraits to be able to treat a
468 // machine function as a graph of machine basic blocks... these are
469 // the same as the machine basic block iterators, except that the root
470 // node is implicitly the first node of the function.
471 //
472 template <> struct GraphTraits<MachineFunction*> :
475  return &F->front();
476  }
477 
478  // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
480  static nodes_iterator nodes_begin(MachineFunction *F) { return F->begin(); }
481  static nodes_iterator nodes_end (MachineFunction *F) { return F->end(); }
482  static unsigned size (MachineFunction *F) { return F->size(); }
483 };
484 template <> struct GraphTraits<const MachineFunction*> :
487  return &F->front();
488  }
489 
490  // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
492  static nodes_iterator nodes_begin(const MachineFunction *F) {
493  return F->begin();
494  }
495  static nodes_iterator nodes_end (const MachineFunction *F) {
496  return F->end();
497  }
498  static unsigned size (const MachineFunction *F) {
499  return F->size();
500  }
501 };
502 
503 
504 // Provide specializations of GraphTraits to be able to treat a function as a
505 // graph of basic blocks... and to walk it in inverse order. Inverse order for
506 // a function is considered to be when traversing the predecessor edges of a BB
507 // instead of the successor edges.
508 //
509 template <> struct GraphTraits<Inverse<MachineFunction*> > :
512  return &G.Graph->front();
513  }
514 };
515 template <> struct GraphTraits<Inverse<const MachineFunction*> > :
518  return &G.Graph->front();
519  }
520 };
521 
522 } // End llvm namespace
523 
524 #endif
void push_front(MachineBasicBlock *MBB)
The machine constant pool.
unsigned getAlignment() const
static NodeType * getEntryNode(Inverse< MachineFunction * > G)
MachineInstr * CreateMachineInstr(const MCInstrDesc &MCID, DebugLoc DL, bool NoImp=false)
void removeNodeFromList(NodeTy *)
Definition: ilist.h:116
iplist< MachineBasicBlock >::iterator iterator
Definition: ilist.h:642
static NodeTy * createNode(const NodeTy &V)
Definition: ilist.h:112
T * allocate(Capacity Cap, AllocatorType &Allocator)
static void noteHead(MachineBasicBlock *, MachineBasicBlock *)
std::reverse_iterator< iterator > reverse_iterator
void verify(Pass *p=NULL, const char *Banner=NULL) const
reverse_iterator rend()
Definition: ilist.h:379
void print(raw_ostream &OS, SlotIndexes *=0) const
static nodes_iterator nodes_end(MachineFunction *F)
MachineMemOperand * getMachineMemOperand(MachinePointerInfo PtrInfo, unsigned f, uint64_t s, unsigned base_alignment, const MDNode *TBAAInfo=0, const MDNode *Ranges=0)
unsigned addLiveIn(unsigned PReg, const TargetRegisterClass *RC)
static NodeType * getEntryNode(Inverse< const MachineFunction * > G)
ArrayRecycler< MachineOperand >::Capacity OperandCapacity
MDNode - a tuple of other values.
Definition: Metadata.h:69
F(f)
const Function * getFunction() const
iterator begin()
Definition: ilist.h:359
unsigned getFunctionNumber() const
static nodes_iterator nodes_begin(const MachineFunction *F)
void DeleteMachineBasicBlock(MachineBasicBlock *MBB)
void destroySentinel(MachineBasicBlock *) const
MachineJumpTableInfo * getOrCreateJumpTableInfo(unsigned JTEntryKind)
reverse_iterator rbegin()
Definition: ilist.h:377
static nodes_iterator nodes_begin(MachineFunction *F)
unsigned getNumBlockIDs() const
MachineJumpTableInfo * getJumpTableInfo()
const_reverse_iterator rend() const
void push_front(const NodeTy &val)
Definition: ilist.h:670
MachineMemOperand ** mmo_iterator
Definition: MachineInstr.h:52
Abstract Stack Frame Information.
std::pair< MachineInstr::mmo_iterator, MachineInstr::mmo_iterator > extractLoadMemRefs(MachineInstr::mmo_iterator Begin, MachineInstr::mmo_iterator End)
#define G(x, y, z)
Definition: MD5.cpp:52
MachineBasicBlock * provideInitialHead() const
const MachineBasicBlock & front() const
MachineBasicBlock * ensureHead(MachineBasicBlock *) const
void RenumberBlocks(MachineBasicBlock *MBBFrom=0)
const MachineJumpTableInfo * getJumpTableInfo() const
MachineFunction::const_iterator nodes_iterator
MCContext & getContext() const
const MachineRegisterInfo & getRegInfo() const
MachineBasicBlock * createSentinel() const
const MachineFrameInfo * getFrameInfo() const
MachineBasicBlock * CreateMachineBasicBlock(const BasicBlock *bb=0)
LLVM Basic Block Representation.
Definition: BasicBlock.h:72
size_type LLVM_ATTRIBUTE_UNUSED_RESULT size() const
Definition: ilist.h:539
GCModuleInfo * getGMI() const
void ensureAlignment(unsigned A)
ensureAlignment - Make sure the function is at least 1 << A bytes aligned.
iterator insert(iterator where, const NodeTy &val)
Definition: ilist.h:664
void splice(iterator InsertPt, iterator MBBI, iterator MBBE)
MachineConstantPool * getConstantPool()
static NodeType * getEntryNode(const MachineFunction *F)
unsigned size() const
void DeleteMachineInstr(MachineInstr *MI)
MachineFunction::iterator nodes_iterator
MachineBasicBlock & back()
iterator erase(iterator where)
Definition: ilist.h:465
const GraphType & Graph
Definition: GraphTraits.h:79
MCSymbol * getPICBaseSymbol() const
BasicBlockListType::const_iterator const_iterator
void splice(iterator InsertPt, iterator MBBI)
MachineInstr * CloneMachineInstr(const MachineInstr *Orig)
MachineBasicBlock * getBlockNumbered(unsigned N) const
bool LLVM_ATTRIBUTE_UNUSED_RESULT empty() const
Definition: ilist.h:385
const_iterator end() const
MachineFrameInfo * getFrameInfo()
reverse_iterator rend()
const MachineConstantPool * getConstantPool() const
void splice(iterator where, iplist &L2)
Definition: ilist.h:570
#define LLVM_DELETED_FUNCTION
Definition: Compiler.h:137
ilist_half_node< MachineBasicBlock > Sentinel
MCSymbol * getJTISymbol(unsigned JTI, MCContext &Ctx, bool isLinkerPrivate=false) const
static void deleteNode(NodeTy *V)
Definition: ilist.h:113
void * Allocate(size_t Size, size_t Alignment)
Definition: Allocator.cpp:95
static unsigned size(MachineFunction *F)
reference front()
Definition: ilist.h:390
std::reverse_iterator< const_iterator > const_reverse_iterator
static NodeType * getEntryNode(MachineFunction *F)
static unsigned size(const MachineFunction *F)
void addNodeToList(NodeTy *)
Definition: ilist.h:115
MachineRegisterInfo & getRegInfo()
bool exposesReturnsTwice() const
#define N
bool hasMSInlineAsm() const
Returns true if the function contains any MS-style inline assembly.
const TargetMachine & getTarget() const
MachineBasicBlock & front()
void setExposesReturnsTwice(bool B)
void removeFromMBBNumbering(unsigned N)
reference back()
Definition: ilist.h:398
static NodeTy * createSentinel()
createSentinel - create the dynamic sentinel
Definition: ilist.h:78
const Ty * getInfo() const
std::pair< MachineInstr::mmo_iterator, MachineInstr::mmo_iterator > extractStoreMemRefs(MachineInstr::mmo_iterator Begin, MachineInstr::mmo_iterator End)
void erase(iterator MBBI)
void insert(iterator MBBI, MachineBasicBlock *MBB)
static nodes_iterator nodes_end(const MachineFunction *F)
iterator end()
Definition: ilist.h:367
unsigned addToMBBNumbering(MachineBasicBlock *MBB)
Adds the MBB to the internal numbering. Returns the unique number assigned to the MBB...
void deallocateOperandArray(OperandCapacity Cap, MachineOperand *Array)
void push_back(MachineBasicBlock *MBB)
void setAlignment(unsigned A)
BasicBlockListType::iterator iterator
const MachineBasicBlock & back() const
const_reverse_iterator rbegin() const
void deallocate(Capacity Cap, T *Ptr)
MachineModuleInfo & getMMI() const
StringRef getName() const
const_iterator begin() const
void setHasMSInlineAsm(bool B)
reverse_iterator rbegin()
NodeTy * remove(iterator &IT)
Definition: ilist.h:435
MachineInstr::mmo_iterator allocateMemRefsArray(unsigned long Num)
MachineOperand * allocateOperandArray(OperandCapacity Cap)
void push_back(const NodeTy &val)
Definition: ilist.h:671