1//===-- llvm/Instructions.h - Instruction subclass definitions --*- 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 exposes the class definitions of all of the subclasses of the
11// Instruction class.  This is meant to be an easy way to get access to all
12// instruction subclasses.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_IR_INSTRUCTIONS_H
17#define LLVM_IR_INSTRUCTIONS_H
18
19#include "llvm/ADT/ArrayRef.h"
20#include "llvm/ADT/SmallVector.h"
21#include "llvm/IR/Attributes.h"
22#include "llvm/IR/CallingConv.h"
23#include "llvm/IR/DerivedTypes.h"
24#include "llvm/IR/InstrTypes.h"
25#include "llvm/Support/ErrorHandling.h"
26#include "llvm/Support/IntegersSubset.h"
27#include "llvm/Support/IntegersSubsetMapping.h"
28#include <iterator>
29
30namespace llvm {
31
32class APInt;
33class ConstantInt;
34class ConstantRange;
35class DataLayout;
36class LLVMContext;
37
38enum AtomicOrdering {
39  NotAtomic = 0,
40  Unordered = 1,
41  Monotonic = 2,
42  // Consume = 3,  // Not specified yet.
43  Acquire = 4,
44  Release = 5,
45  AcquireRelease = 6,
46  SequentiallyConsistent = 7
47};
48
49enum SynchronizationScope {
50  SingleThread = 0,
51  CrossThread = 1
52};
53
54//===----------------------------------------------------------------------===//
55//                                AllocaInst Class
56//===----------------------------------------------------------------------===//
57
58/// AllocaInst - an instruction to allocate memory on the stack
59///
60class AllocaInst : public UnaryInstruction {
61protected:
62  virtual AllocaInst *clone_impl() const;
63public:
64  explicit AllocaInst(Type *Ty, Value *ArraySize = 0,
65                      const Twine &Name = "", Instruction *InsertBefore = 0);
66  AllocaInst(Type *Ty, Value *ArraySize,
67             const Twine &Name, BasicBlock *InsertAtEnd);
68
69  AllocaInst(Type *Ty, const Twine &Name, Instruction *InsertBefore = 0);
70  AllocaInst(Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd);
71
72  AllocaInst(Type *Ty, Value *ArraySize, unsigned Align,
73             const Twine &Name = "", Instruction *InsertBefore = 0);
74  AllocaInst(Type *Ty, Value *ArraySize, unsigned Align,
75             const Twine &Name, BasicBlock *InsertAtEnd);
76
77  // Out of line virtual method, so the vtable, etc. has a home.
78  virtual ~AllocaInst();
79
80  /// isArrayAllocation - Return true if there is an allocation size parameter
81  /// to the allocation instruction that is not 1.
82  ///
83  bool isArrayAllocation() const;
84
85  /// getArraySize - Get the number of elements allocated. For a simple
86  /// allocation of a single element, this will return a constant 1 value.
87  ///
88  const Value *getArraySize() const { return getOperand(0); }
89  Value *getArraySize() { return getOperand(0); }
90
91  /// getType - Overload to return most specific pointer type
92  ///
93  PointerType *getType() const {
94    return cast<PointerType>(Instruction::getType());
95  }
96
97  /// getAllocatedType - Return the type that is being allocated by the
98  /// instruction.
99  ///
100  Type *getAllocatedType() const;
101
102  /// getAlignment - Return the alignment of the memory that is being allocated
103  /// by the instruction.
104  ///
105  unsigned getAlignment() const {
106    return (1u << getSubclassDataFromInstruction()) >> 1;
107  }
108  void setAlignment(unsigned Align);
109
110  /// isStaticAlloca - Return true if this alloca is in the entry block of the
111  /// function and is a constant size.  If so, the code generator will fold it
112  /// into the prolog/epilog code, so it is basically free.
113  bool isStaticAlloca() const;
114
115  // Methods for support type inquiry through isa, cast, and dyn_cast:
116  static inline bool classof(const Instruction *I) {
117    return (I->getOpcode() == Instruction::Alloca);
118  }
119  static inline bool classof(const Value *V) {
120    return isa<Instruction>(V) && classof(cast<Instruction>(V));
121  }
122private:
123  // Shadow Instruction::setInstructionSubclassData with a private forwarding
124  // method so that subclasses cannot accidentally use it.
125  void setInstructionSubclassData(unsigned short D) {
126    Instruction::setInstructionSubclassData(D);
127  }
128};
129
130
131//===----------------------------------------------------------------------===//
132//                                LoadInst Class
133//===----------------------------------------------------------------------===//
134
135/// LoadInst - an instruction for reading from memory.  This uses the
136/// SubclassData field in Value to store whether or not the load is volatile.
137///
138class LoadInst : public UnaryInstruction {
139  void AssertOK();
140protected:
141  virtual LoadInst *clone_impl() const;
142public:
143  LoadInst(Value *Ptr, const Twine &NameStr, Instruction *InsertBefore);
144  LoadInst(Value *Ptr, const Twine &NameStr, BasicBlock *InsertAtEnd);
145  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile = false,
146           Instruction *InsertBefore = 0);
147  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
148           BasicBlock *InsertAtEnd);
149  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
150           unsigned Align, Instruction *InsertBefore = 0);
151  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
152           unsigned Align, BasicBlock *InsertAtEnd);
153  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
154           unsigned Align, AtomicOrdering Order,
155           SynchronizationScope SynchScope = CrossThread,
156           Instruction *InsertBefore = 0);
157  LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
158           unsigned Align, AtomicOrdering Order,
159           SynchronizationScope SynchScope,
160           BasicBlock *InsertAtEnd);
161
162  LoadInst(Value *Ptr, const char *NameStr, Instruction *InsertBefore);
163  LoadInst(Value *Ptr, const char *NameStr, BasicBlock *InsertAtEnd);
164  explicit LoadInst(Value *Ptr, const char *NameStr = 0,
165                    bool isVolatile = false,  Instruction *InsertBefore = 0);
166  LoadInst(Value *Ptr, const char *NameStr, bool isVolatile,
167           BasicBlock *InsertAtEnd);
168
169  /// isVolatile - Return true if this is a load from a volatile memory
170  /// location.
171  ///
172  bool isVolatile() const { return getSubclassDataFromInstruction() & 1; }
173
174  /// setVolatile - Specify whether this is a volatile load or not.
175  ///
176  void setVolatile(bool V) {
177    setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
178                               (V ? 1 : 0));
179  }
180
181  /// getAlignment - Return the alignment of the access that is being performed
182  ///
183  unsigned getAlignment() const {
184    return (1 << ((getSubclassDataFromInstruction() >> 1) & 31)) >> 1;
185  }
186
187  void setAlignment(unsigned Align);
188
189  /// Returns the ordering effect of this fence.
190  AtomicOrdering getOrdering() const {
191    return AtomicOrdering((getSubclassDataFromInstruction() >> 7) & 7);
192  }
193
194  /// Set the ordering constraint on this load. May not be Release or
195  /// AcquireRelease.
196  void setOrdering(AtomicOrdering Ordering) {
197    setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 7)) |
198                               (Ordering << 7));
199  }
200
201  SynchronizationScope getSynchScope() const {
202    return SynchronizationScope((getSubclassDataFromInstruction() >> 6) & 1);
203  }
204
205  /// Specify whether this load is ordered with respect to all
206  /// concurrently executing threads, or only with respect to signal handlers
207  /// executing in the same thread.
208  void setSynchScope(SynchronizationScope xthread) {
209    setInstructionSubclassData((getSubclassDataFromInstruction() & ~(1 << 6)) |
210                               (xthread << 6));
211  }
212
213  bool isAtomic() const { return getOrdering() != NotAtomic; }
214  void setAtomic(AtomicOrdering Ordering,
215                 SynchronizationScope SynchScope = CrossThread) {
216    setOrdering(Ordering);
217    setSynchScope(SynchScope);
218  }
219
220  bool isSimple() const { return !isAtomic() && !isVolatile(); }
221  bool isUnordered() const {
222    return getOrdering() <= Unordered && !isVolatile();
223  }
224
225  Value *getPointerOperand() { return getOperand(0); }
226  const Value *getPointerOperand() const { return getOperand(0); }
227  static unsigned getPointerOperandIndex() { return 0U; }
228
229  /// \brief Returns the address space of the pointer operand.
230  unsigned getPointerAddressSpace() const {
231    return getPointerOperand()->getType()->getPointerAddressSpace();
232  }
233
234
235  // Methods for support type inquiry through isa, cast, and dyn_cast:
236  static inline bool classof(const Instruction *I) {
237    return I->getOpcode() == Instruction::Load;
238  }
239  static inline bool classof(const Value *V) {
240    return isa<Instruction>(V) && classof(cast<Instruction>(V));
241  }
242private:
243  // Shadow Instruction::setInstructionSubclassData with a private forwarding
244  // method so that subclasses cannot accidentally use it.
245  void setInstructionSubclassData(unsigned short D) {
246    Instruction::setInstructionSubclassData(D);
247  }
248};
249
250
251//===----------------------------------------------------------------------===//
252//                                StoreInst Class
253//===----------------------------------------------------------------------===//
254
255/// StoreInst - an instruction for storing to memory
256///
257class StoreInst : public Instruction {
258  void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION;
259  void AssertOK();
260protected:
261  virtual StoreInst *clone_impl() const;
262public:
263  // allocate space for exactly two operands
264  void *operator new(size_t s) {
265    return User::operator new(s, 2);
266  }
267  StoreInst(Value *Val, Value *Ptr, Instruction *InsertBefore);
268  StoreInst(Value *Val, Value *Ptr, BasicBlock *InsertAtEnd);
269  StoreInst(Value *Val, Value *Ptr, bool isVolatile = false,
270            Instruction *InsertBefore = 0);
271  StoreInst(Value *Val, Value *Ptr, bool isVolatile, BasicBlock *InsertAtEnd);
272  StoreInst(Value *Val, Value *Ptr, bool isVolatile,
273            unsigned Align, Instruction *InsertBefore = 0);
274  StoreInst(Value *Val, Value *Ptr, bool isVolatile,
275            unsigned Align, BasicBlock *InsertAtEnd);
276  StoreInst(Value *Val, Value *Ptr, bool isVolatile,
277            unsigned Align, AtomicOrdering Order,
278            SynchronizationScope SynchScope = CrossThread,
279            Instruction *InsertBefore = 0);
280  StoreInst(Value *Val, Value *Ptr, bool isVolatile,
281            unsigned Align, AtomicOrdering Order,
282            SynchronizationScope SynchScope,
283            BasicBlock *InsertAtEnd);
284
285
286  /// isVolatile - Return true if this is a store to a volatile memory
287  /// location.
288  ///
289  bool isVolatile() const { return getSubclassDataFromInstruction() & 1; }
290
291  /// setVolatile - Specify whether this is a volatile store or not.
292  ///
293  void setVolatile(bool V) {
294    setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
295                               (V ? 1 : 0));
296  }
297
298  /// Transparently provide more efficient getOperand methods.
299  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
300
301  /// getAlignment - Return the alignment of the access that is being performed
302  ///
303  unsigned getAlignment() const {
304    return (1 << ((getSubclassDataFromInstruction() >> 1) & 31)) >> 1;
305  }
306
307  void setAlignment(unsigned Align);
308
309  /// Returns the ordering effect of this store.
310  AtomicOrdering getOrdering() const {
311    return AtomicOrdering((getSubclassDataFromInstruction() >> 7) & 7);
312  }
313
314  /// Set the ordering constraint on this store.  May not be Acquire or
315  /// AcquireRelease.
316  void setOrdering(AtomicOrdering Ordering) {
317    setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 7)) |
318                               (Ordering << 7));
319  }
320
321  SynchronizationScope getSynchScope() const {
322    return SynchronizationScope((getSubclassDataFromInstruction() >> 6) & 1);
323  }
324
325  /// Specify whether this store instruction is ordered with respect to all
326  /// concurrently executing threads, or only with respect to signal handlers
327  /// executing in the same thread.
328  void setSynchScope(SynchronizationScope xthread) {
329    setInstructionSubclassData((getSubclassDataFromInstruction() & ~(1 << 6)) |
330                               (xthread << 6));
331  }
332
333  bool isAtomic() const { return getOrdering() != NotAtomic; }
334  void setAtomic(AtomicOrdering Ordering,
335                 SynchronizationScope SynchScope = CrossThread) {
336    setOrdering(Ordering);
337    setSynchScope(SynchScope);
338  }
339
340  bool isSimple() const { return !isAtomic() && !isVolatile(); }
341  bool isUnordered() const {
342    return getOrdering() <= Unordered && !isVolatile();
343  }
344
345  Value *getValueOperand() { return getOperand(0); }
346  const Value *getValueOperand() const { return getOperand(0); }
347
348  Value *getPointerOperand() { return getOperand(1); }
349  const Value *getPointerOperand() const { return getOperand(1); }
350  static unsigned getPointerOperandIndex() { return 1U; }
351
352  /// \brief Returns the address space of the pointer operand.
353  unsigned getPointerAddressSpace() const {
354    return getPointerOperand()->getType()->getPointerAddressSpace();
355  }
356
357  // Methods for support type inquiry through isa, cast, and dyn_cast:
358  static inline bool classof(const Instruction *I) {
359    return I->getOpcode() == Instruction::Store;
360  }
361  static inline bool classof(const Value *V) {
362    return isa<Instruction>(V) && classof(cast<Instruction>(V));
363  }
364private:
365  // Shadow Instruction::setInstructionSubclassData with a private forwarding
366  // method so that subclasses cannot accidentally use it.
367  void setInstructionSubclassData(unsigned short D) {
368    Instruction::setInstructionSubclassData(D);
369  }
370};
371
372template <>
373struct OperandTraits<StoreInst> : public FixedNumOperandTraits<StoreInst, 2> {
374};
375
376DEFINE_TRANSPARENT_OPERAND_ACCESSORS(StoreInst, Value)
377
378//===----------------------------------------------------------------------===//
379//                                FenceInst Class
380//===----------------------------------------------------------------------===//
381
382/// FenceInst - an instruction for ordering other memory operations
383///
384class FenceInst : public Instruction {
385  void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION;
386  void Init(AtomicOrdering Ordering, SynchronizationScope SynchScope);
387protected:
388  virtual FenceInst *clone_impl() const;
389public:
390  // allocate space for exactly zero operands
391  void *operator new(size_t s) {
392    return User::operator new(s, 0);
393  }
394
395  // Ordering may only be Acquire, Release, AcquireRelease, or
396  // SequentiallyConsistent.
397  FenceInst(LLVMContext &C, AtomicOrdering Ordering,
398            SynchronizationScope SynchScope = CrossThread,
399            Instruction *InsertBefore = 0);
400  FenceInst(LLVMContext &C, AtomicOrdering Ordering,
401            SynchronizationScope SynchScope,
402            BasicBlock *InsertAtEnd);
403
404  /// Returns the ordering effect of this fence.
405  AtomicOrdering getOrdering() const {
406    return AtomicOrdering(getSubclassDataFromInstruction() >> 1);
407  }
408
409  /// Set the ordering constraint on this fence.  May only be Acquire, Release,
410  /// AcquireRelease, or SequentiallyConsistent.
411  void setOrdering(AtomicOrdering Ordering) {
412    setInstructionSubclassData((getSubclassDataFromInstruction() & 1) |
413                               (Ordering << 1));
414  }
415
416  SynchronizationScope getSynchScope() const {
417    return SynchronizationScope(getSubclassDataFromInstruction() & 1);
418  }
419
420  /// Specify whether this fence orders other operations with respect to all
421  /// concurrently executing threads, or only with respect to signal handlers
422  /// executing in the same thread.
423  void setSynchScope(SynchronizationScope xthread) {
424    setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
425                               xthread);
426  }
427
428  // Methods for support type inquiry through isa, cast, and dyn_cast:
429  static inline bool classof(const Instruction *I) {
430    return I->getOpcode() == Instruction::Fence;
431  }
432  static inline bool classof(const Value *V) {
433    return isa<Instruction>(V) && classof(cast<Instruction>(V));
434  }
435private:
436  // Shadow Instruction::setInstructionSubclassData with a private forwarding
437  // method so that subclasses cannot accidentally use it.
438  void setInstructionSubclassData(unsigned short D) {
439    Instruction::setInstructionSubclassData(D);
440  }
441};
442
443//===----------------------------------------------------------------------===//
444//                                AtomicCmpXchgInst Class
445//===----------------------------------------------------------------------===//
446
447/// AtomicCmpXchgInst - an instruction that atomically checks whether a
448/// specified value is in a memory location, and, if it is, stores a new value
449/// there.  Returns the value that was loaded.
450///
451class AtomicCmpXchgInst : public Instruction {
452  void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION;
453  void Init(Value *Ptr, Value *Cmp, Value *NewVal,
454            AtomicOrdering Ordering, SynchronizationScope SynchScope);
455protected:
456  virtual AtomicCmpXchgInst *clone_impl() const;
457public:
458  // allocate space for exactly three operands
459  void *operator new(size_t s) {
460    return User::operator new(s, 3);
461  }
462  AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal,
463                    AtomicOrdering Ordering, SynchronizationScope SynchScope,
464                    Instruction *InsertBefore = 0);
465  AtomicCmpXchgInst(Value *Ptr, Value *Cmp, Value *NewVal,
466                    AtomicOrdering Ordering, SynchronizationScope SynchScope,
467                    BasicBlock *InsertAtEnd);
468
469  /// isVolatile - Return true if this is a cmpxchg from a volatile memory
470  /// location.
471  ///
472  bool isVolatile() const {
473    return getSubclassDataFromInstruction() & 1;
474  }
475
476  /// setVolatile - Specify whether this is a volatile cmpxchg.
477  ///
478  void setVolatile(bool V) {
479     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
480                                (unsigned)V);
481  }
482
483  /// Transparently provide more efficient getOperand methods.
484  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
485
486  /// Set the ordering constraint on this cmpxchg.
487  void setOrdering(AtomicOrdering Ordering) {
488    assert(Ordering != NotAtomic &&
489           "CmpXchg instructions can only be atomic.");
490    setInstructionSubclassData((getSubclassDataFromInstruction() & 3) |
491                               (Ordering << 2));
492  }
493
494  /// Specify whether this cmpxchg is atomic and orders other operations with
495  /// respect to all concurrently executing threads, or only with respect to
496  /// signal handlers executing in the same thread.
497  void setSynchScope(SynchronizationScope SynchScope) {
498    setInstructionSubclassData((getSubclassDataFromInstruction() & ~2) |
499                               (SynchScope << 1));
500  }
501
502  /// Returns the ordering constraint on this cmpxchg.
503  AtomicOrdering getOrdering() const {
504    return AtomicOrdering(getSubclassDataFromInstruction() >> 2);
505  }
506
507  /// Returns whether this cmpxchg is atomic between threads or only within a
508  /// single thread.
509  SynchronizationScope getSynchScope() const {
510    return SynchronizationScope((getSubclassDataFromInstruction() & 2) >> 1);
511  }
512
513  Value *getPointerOperand() { return getOperand(0); }
514  const Value *getPointerOperand() const { return getOperand(0); }
515  static unsigned getPointerOperandIndex() { return 0U; }
516
517  Value *getCompareOperand() { return getOperand(1); }
518  const Value *getCompareOperand() const { return getOperand(1); }
519
520  Value *getNewValOperand() { return getOperand(2); }
521  const Value *getNewValOperand() const { return getOperand(2); }
522
523  /// \brief Returns the address space of the pointer operand.
524  unsigned getPointerAddressSpace() const {
525    return getPointerOperand()->getType()->getPointerAddressSpace();
526  }
527
528  // Methods for support type inquiry through isa, cast, and dyn_cast:
529  static inline bool classof(const Instruction *I) {
530    return I->getOpcode() == Instruction::AtomicCmpXchg;
531  }
532  static inline bool classof(const Value *V) {
533    return isa<Instruction>(V) && classof(cast<Instruction>(V));
534  }
535private:
536  // Shadow Instruction::setInstructionSubclassData with a private forwarding
537  // method so that subclasses cannot accidentally use it.
538  void setInstructionSubclassData(unsigned short D) {
539    Instruction::setInstructionSubclassData(D);
540  }
541};
542
543template <>
544struct OperandTraits<AtomicCmpXchgInst> :
545    public FixedNumOperandTraits<AtomicCmpXchgInst, 3> {
546};
547
548DEFINE_TRANSPARENT_OPERAND_ACCESSORS(AtomicCmpXchgInst, Value)
549
550//===----------------------------------------------------------------------===//
551//                                AtomicRMWInst Class
552//===----------------------------------------------------------------------===//
553
554/// AtomicRMWInst - an instruction that atomically reads a memory location,
555/// combines it with another value, and then stores the result back.  Returns
556/// the old value.
557///
558class AtomicRMWInst : public Instruction {
559  void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION;
560protected:
561  virtual AtomicRMWInst *clone_impl() const;
562public:
563  /// This enumeration lists the possible modifications atomicrmw can make.  In
564  /// the descriptions, 'p' is the pointer to the instruction's memory location,
565  /// 'old' is the initial value of *p, and 'v' is the other value passed to the
566  /// instruction.  These instructions always return 'old'.
567  enum BinOp {
568    /// *p = v
569    Xchg,
570    /// *p = old + v
571    Add,
572    /// *p = old - v
573    Sub,
574    /// *p = old & v
575    And,
576    /// *p = ~old & v
577    Nand,
578    /// *p = old | v
579    Or,
580    /// *p = old ^ v
581    Xor,
582    /// *p = old >signed v ? old : v
583    Max,
584    /// *p = old <signed v ? old : v
585    Min,
586    /// *p = old >unsigned v ? old : v
587    UMax,
588    /// *p = old <unsigned v ? old : v
589    UMin,
590
591    FIRST_BINOP = Xchg,
592    LAST_BINOP = UMin,
593    BAD_BINOP
594  };
595
596  // allocate space for exactly two operands
597  void *operator new(size_t s) {
598    return User::operator new(s, 2);
599  }
600  AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val,
601                AtomicOrdering Ordering, SynchronizationScope SynchScope,
602                Instruction *InsertBefore = 0);
603  AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val,
604                AtomicOrdering Ordering, SynchronizationScope SynchScope,
605                BasicBlock *InsertAtEnd);
606
607  BinOp getOperation() const {
608    return static_cast<BinOp>(getSubclassDataFromInstruction() >> 5);
609  }
610
611  void setOperation(BinOp Operation) {
612    unsigned short SubclassData = getSubclassDataFromInstruction();
613    setInstructionSubclassData((SubclassData & 31) |
614                               (Operation << 5));
615  }
616
617  /// isVolatile - Return true if this is a RMW on a volatile memory location.
618  ///
619  bool isVolatile() const {
620    return getSubclassDataFromInstruction() & 1;
621  }
622
623  /// setVolatile - Specify whether this is a volatile RMW or not.
624  ///
625  void setVolatile(bool V) {
626     setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
627                                (unsigned)V);
628  }
629
630  /// Transparently provide more efficient getOperand methods.
631  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
632
633  /// Set the ordering constraint on this RMW.
634  void setOrdering(AtomicOrdering Ordering) {
635    assert(Ordering != NotAtomic &&
636           "atomicrmw instructions can only be atomic.");
637    setInstructionSubclassData((getSubclassDataFromInstruction() & ~(7 << 2)) |
638                               (Ordering << 2));
639  }
640
641  /// Specify whether this RMW orders other operations with respect to all
642  /// concurrently executing threads, or only with respect to signal handlers
643  /// executing in the same thread.
644  void setSynchScope(SynchronizationScope SynchScope) {
645    setInstructionSubclassData((getSubclassDataFromInstruction() & ~2) |
646                               (SynchScope << 1));
647  }
648
649  /// Returns the ordering constraint on this RMW.
650  AtomicOrdering getOrdering() const {
651    return AtomicOrdering((getSubclassDataFromInstruction() >> 2) & 7);
652  }
653
654  /// Returns whether this RMW is atomic between threads or only within a
655  /// single thread.
656  SynchronizationScope getSynchScope() const {
657    return SynchronizationScope((getSubclassDataFromInstruction() & 2) >> 1);
658  }
659
660  Value *getPointerOperand() { return getOperand(0); }
661  const Value *getPointerOperand() const { return getOperand(0); }
662  static unsigned getPointerOperandIndex() { return 0U; }
663
664  Value *getValOperand() { return getOperand(1); }
665  const Value *getValOperand() const { return getOperand(1); }
666
667  /// \brief Returns the address space of the pointer operand.
668  unsigned getPointerAddressSpace() const {
669    return getPointerOperand()->getType()->getPointerAddressSpace();
670  }
671
672  // Methods for support type inquiry through isa, cast, and dyn_cast:
673  static inline bool classof(const Instruction *I) {
674    return I->getOpcode() == Instruction::AtomicRMW;
675  }
676  static inline bool classof(const Value *V) {
677    return isa<Instruction>(V) && classof(cast<Instruction>(V));
678  }
679private:
680  void Init(BinOp Operation, Value *Ptr, Value *Val,
681            AtomicOrdering Ordering, SynchronizationScope SynchScope);
682  // Shadow Instruction::setInstructionSubclassData with a private forwarding
683  // method so that subclasses cannot accidentally use it.
684  void setInstructionSubclassData(unsigned short D) {
685    Instruction::setInstructionSubclassData(D);
686  }
687};
688
689template <>
690struct OperandTraits<AtomicRMWInst>
691    : public FixedNumOperandTraits<AtomicRMWInst,2> {
692};
693
694DEFINE_TRANSPARENT_OPERAND_ACCESSORS(AtomicRMWInst, Value)
695
696//===----------------------------------------------------------------------===//
697//                             GetElementPtrInst Class
698//===----------------------------------------------------------------------===//
699
700// checkGEPType - Simple wrapper function to give a better assertion failure
701// message on bad indexes for a gep instruction.
702//
703inline Type *checkGEPType(Type *Ty) {
704  assert(Ty && "Invalid GetElementPtrInst indices for type!");
705  return Ty;
706}
707
708/// GetElementPtrInst - an instruction for type-safe pointer arithmetic to
709/// access elements of arrays and structs
710///
711class GetElementPtrInst : public Instruction {
712  GetElementPtrInst(const GetElementPtrInst &GEPI);
713  void init(Value *Ptr, ArrayRef<Value *> IdxList, const Twine &NameStr);
714
715  /// Constructors - Create a getelementptr instruction with a base pointer an
716  /// list of indices. The first ctor can optionally insert before an existing
717  /// instruction, the second appends the new instruction to the specified
718  /// BasicBlock.
719  inline GetElementPtrInst(Value *Ptr, ArrayRef<Value *> IdxList,
720                           unsigned Values, const Twine &NameStr,
721                           Instruction *InsertBefore);
722  inline GetElementPtrInst(Value *Ptr, ArrayRef<Value *> IdxList,
723                           unsigned Values, const Twine &NameStr,
724                           BasicBlock *InsertAtEnd);
725protected:
726  virtual GetElementPtrInst *clone_impl() const;
727public:
728  static GetElementPtrInst *Create(Value *Ptr, ArrayRef<Value *> IdxList,
729                                   const Twine &NameStr = "",
730                                   Instruction *InsertBefore = 0) {
731    unsigned Values = 1 + unsigned(IdxList.size());
732    return new(Values)
733      GetElementPtrInst(Ptr, IdxList, Values, NameStr, InsertBefore);
734  }
735  static GetElementPtrInst *Create(Value *Ptr, ArrayRef<Value *> IdxList,
736                                   const Twine &NameStr,
737                                   BasicBlock *InsertAtEnd) {
738    unsigned Values = 1 + unsigned(IdxList.size());
739    return new(Values)
740      GetElementPtrInst(Ptr, IdxList, Values, NameStr, InsertAtEnd);
741  }
742
743  /// Create an "inbounds" getelementptr. See the documentation for the
744  /// "inbounds" flag in LangRef.html for details.
745  static GetElementPtrInst *CreateInBounds(Value *Ptr,
746                                           ArrayRef<Value *> IdxList,
747                                           const Twine &NameStr = "",
748                                           Instruction *InsertBefore = 0) {
749    GetElementPtrInst *GEP = Create(Ptr, IdxList, NameStr, InsertBefore);
750    GEP->setIsInBounds(true);
751    return GEP;
752  }
753  static GetElementPtrInst *CreateInBounds(Value *Ptr,
754                                           ArrayRef<Value *> IdxList,
755                                           const Twine &NameStr,
756                                           BasicBlock *InsertAtEnd) {
757    GetElementPtrInst *GEP = Create(Ptr, IdxList, NameStr, InsertAtEnd);
758    GEP->setIsInBounds(true);
759    return GEP;
760  }
761
762  /// Transparently provide more efficient getOperand methods.
763  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
764
765  // getType - Overload to return most specific sequential type.
766  SequentialType *getType() const {
767    return cast<SequentialType>(Instruction::getType());
768  }
769
770  /// \brief Returns the address space of this instruction's pointer type.
771  unsigned getAddressSpace() const {
772    // Note that this is always the same as the pointer operand's address space
773    // and that is cheaper to compute, so cheat here.
774    return getPointerAddressSpace();
775  }
776
777  /// getIndexedType - Returns the type of the element that would be loaded with
778  /// a load instruction with the specified parameters.
779  ///
780  /// Null is returned if the indices are invalid for the specified
781  /// pointer type.
782  ///
783  static Type *getIndexedType(Type *Ptr, ArrayRef<Value *> IdxList);
784  static Type *getIndexedType(Type *Ptr, ArrayRef<Constant *> IdxList);
785  static Type *getIndexedType(Type *Ptr, ArrayRef<uint64_t> IdxList);
786
787  inline op_iterator       idx_begin()       { return op_begin()+1; }
788  inline const_op_iterator idx_begin() const { return op_begin()+1; }
789  inline op_iterator       idx_end()         { return op_end(); }
790  inline const_op_iterator idx_end()   const { return op_end(); }
791
792  Value *getPointerOperand() {
793    return getOperand(0);
794  }
795  const Value *getPointerOperand() const {
796    return getOperand(0);
797  }
798  static unsigned getPointerOperandIndex() {
799    return 0U;    // get index for modifying correct operand.
800  }
801
802  /// getPointerOperandType - Method to return the pointer operand as a
803  /// PointerType.
804  Type *getPointerOperandType() const {
805    return getPointerOperand()->getType();
806  }
807
808  /// \brief Returns the address space of the pointer operand.
809  unsigned getPointerAddressSpace() const {
810    return getPointerOperandType()->getPointerAddressSpace();
811  }
812
813  /// GetGEPReturnType - Returns the pointer type returned by the GEP
814  /// instruction, which may be a vector of pointers.
815  static Type *getGEPReturnType(Value *Ptr, ArrayRef<Value *> IdxList) {
816    Type *PtrTy = PointerType::get(checkGEPType(
817                                   getIndexedType(Ptr->getType(), IdxList)),
818                                   Ptr->getType()->getPointerAddressSpace());
819    // Vector GEP
820    if (Ptr->getType()->isVectorTy()) {
821      unsigned NumElem = cast<VectorType>(Ptr->getType())->getNumElements();
822      return VectorType::get(PtrTy, NumElem);
823    }
824
825    // Scalar GEP
826    return PtrTy;
827  }
828
829  unsigned getNumIndices() const {  // Note: always non-negative
830    return getNumOperands() - 1;
831  }
832
833  bool hasIndices() const {
834    return getNumOperands() > 1;
835  }
836
837  /// hasAllZeroIndices - Return true if all of the indices of this GEP are
838  /// zeros.  If so, the result pointer and the first operand have the same
839  /// value, just potentially different types.
840  bool hasAllZeroIndices() const;
841
842  /// hasAllConstantIndices - Return true if all of the indices of this GEP are
843  /// constant integers.  If so, the result pointer and the first operand have
844  /// a constant offset between them.
845  bool hasAllConstantIndices() const;
846
847  /// setIsInBounds - Set or clear the inbounds flag on this GEP instruction.
848  /// See LangRef.html for the meaning of inbounds on a getelementptr.
849  void setIsInBounds(bool b = true);
850
851  /// isInBounds - Determine whether the GEP has the inbounds flag.
852  bool isInBounds() const;
853
854  /// \brief Accumulate the constant address offset of this GEP if possible.
855  ///
856  /// This routine accepts an APInt into which it will accumulate the constant
857  /// offset of this GEP if the GEP is in fact constant. If the GEP is not
858  /// all-constant, it returns false and the value of the offset APInt is
859  /// undefined (it is *not* preserved!). The APInt passed into this routine
860  /// must be at least as wide as the IntPtr type for the address space of
861  /// the base GEP pointer.
862  bool accumulateConstantOffset(const DataLayout &DL, APInt &Offset) const;
863
864  // Methods for support type inquiry through isa, cast, and dyn_cast:
865  static inline bool classof(const Instruction *I) {
866    return (I->getOpcode() == Instruction::GetElementPtr);
867  }
868  static inline bool classof(const Value *V) {
869    return isa<Instruction>(V) && classof(cast<Instruction>(V));
870  }
871};
872
873template <>
874struct OperandTraits<GetElementPtrInst> :
875  public VariadicOperandTraits<GetElementPtrInst, 1> {
876};
877
878GetElementPtrInst::GetElementPtrInst(Value *Ptr,
879                                     ArrayRef<Value *> IdxList,
880                                     unsigned Values,
881                                     const Twine &NameStr,
882                                     Instruction *InsertBefore)
883  : Instruction(getGEPReturnType(Ptr, IdxList),
884                GetElementPtr,
885                OperandTraits<GetElementPtrInst>::op_end(this) - Values,
886                Values, InsertBefore) {
887  init(Ptr, IdxList, NameStr);
888}
889GetElementPtrInst::GetElementPtrInst(Value *Ptr,
890                                     ArrayRef<Value *> IdxList,
891                                     unsigned Values,
892                                     const Twine &NameStr,
893                                     BasicBlock *InsertAtEnd)
894  : Instruction(getGEPReturnType(Ptr, IdxList),
895                GetElementPtr,
896                OperandTraits<GetElementPtrInst>::op_end(this) - Values,
897                Values, InsertAtEnd) {
898  init(Ptr, IdxList, NameStr);
899}
900
901
902DEFINE_TRANSPARENT_OPERAND_ACCESSORS(GetElementPtrInst, Value)
903
904
905//===----------------------------------------------------------------------===//
906//                               ICmpInst Class
907//===----------------------------------------------------------------------===//
908
909/// This instruction compares its operands according to the predicate given
910/// to the constructor. It only operates on integers or pointers. The operands
911/// must be identical types.
912/// \brief Represent an integer comparison operator.
913class ICmpInst: public CmpInst {
914protected:
915  /// \brief Clone an identical ICmpInst
916  virtual ICmpInst *clone_impl() const;
917public:
918  /// \brief Constructor with insert-before-instruction semantics.
919  ICmpInst(
920    Instruction *InsertBefore,  ///< Where to insert
921    Predicate pred,  ///< The predicate to use for the comparison
922    Value *LHS,      ///< The left-hand-side of the expression
923    Value *RHS,      ///< The right-hand-side of the expression
924    const Twine &NameStr = ""  ///< Name of the instruction
925  ) : CmpInst(makeCmpResultType(LHS->getType()),
926              Instruction::ICmp, pred, LHS, RHS, NameStr,
927              InsertBefore) {
928    assert(pred >= CmpInst::FIRST_ICMP_PREDICATE &&
929           pred <= CmpInst::LAST_ICMP_PREDICATE &&
930           "Invalid ICmp predicate value");
931    assert(getOperand(0)->getType() == getOperand(1)->getType() &&
932          "Both operands to ICmp instruction are not of the same type!");
933    // Check that the operands are the right type
934    assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
935            getOperand(0)->getType()->getScalarType()->isPointerTy()) &&
936           "Invalid operand types for ICmp instruction");
937  }
938
939  /// \brief Constructor with insert-at-end semantics.
940  ICmpInst(
941    BasicBlock &InsertAtEnd, ///< Block to insert into.
942    Predicate pred,  ///< The predicate to use for the comparison
943    Value *LHS,      ///< The left-hand-side of the expression
944    Value *RHS,      ///< The right-hand-side of the expression
945    const Twine &NameStr = ""  ///< Name of the instruction
946  ) : CmpInst(makeCmpResultType(LHS->getType()),
947              Instruction::ICmp, pred, LHS, RHS, NameStr,
948              &InsertAtEnd) {
949    assert(pred >= CmpInst::FIRST_ICMP_PREDICATE &&
950          pred <= CmpInst::LAST_ICMP_PREDICATE &&
951          "Invalid ICmp predicate value");
952    assert(getOperand(0)->getType() == getOperand(1)->getType() &&
953          "Both operands to ICmp instruction are not of the same type!");
954    // Check that the operands are the right type
955    assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
956            getOperand(0)->getType()->getScalarType()->isPointerTy()) &&
957           "Invalid operand types for ICmp instruction");
958  }
959
960  /// \brief Constructor with no-insertion semantics
961  ICmpInst(
962    Predicate pred, ///< The predicate to use for the comparison
963    Value *LHS,     ///< The left-hand-side of the expression
964    Value *RHS,     ///< The right-hand-side of the expression
965    const Twine &NameStr = "" ///< Name of the instruction
966  ) : CmpInst(makeCmpResultType(LHS->getType()),
967              Instruction::ICmp, pred, LHS, RHS, NameStr) {
968    assert(pred >= CmpInst::FIRST_ICMP_PREDICATE &&
969           pred <= CmpInst::LAST_ICMP_PREDICATE &&
970           "Invalid ICmp predicate value");
971    assert(getOperand(0)->getType() == getOperand(1)->getType() &&
972          "Both operands to ICmp instruction are not of the same type!");
973    // Check that the operands are the right type
974    assert((getOperand(0)->getType()->isIntOrIntVectorTy() ||
975            getOperand(0)->getType()->getScalarType()->isPointerTy()) &&
976           "Invalid operand types for ICmp instruction");
977  }
978
979  /// For example, EQ->EQ, SLE->SLE, UGT->SGT, etc.
980  /// @returns the predicate that would be the result if the operand were
981  /// regarded as signed.
982  /// \brief Return the signed version of the predicate
983  Predicate getSignedPredicate() const {
984    return getSignedPredicate(getPredicate());
985  }
986
987  /// This is a static version that you can use without an instruction.
988  /// \brief Return the signed version of the predicate.
989  static Predicate getSignedPredicate(Predicate pred);
990
991  /// For example, EQ->EQ, SLE->ULE, UGT->UGT, etc.
992  /// @returns the predicate that would be the result if the operand were
993  /// regarded as unsigned.
994  /// \brief Return the unsigned version of the predicate
995  Predicate getUnsignedPredicate() const {
996    return getUnsignedPredicate(getPredicate());
997  }
998
999  /// This is a static version that you can use without an instruction.
1000  /// \brief Return the unsigned version of the predicate.
1001  static Predicate getUnsignedPredicate(Predicate pred);
1002
1003  /// isEquality - Return true if this predicate is either EQ or NE.  This also
1004  /// tests for commutativity.
1005  static bool isEquality(Predicate P) {
1006    return P == ICMP_EQ || P == ICMP_NE;
1007  }
1008
1009  /// isEquality - Return true if this predicate is either EQ or NE.  This also
1010  /// tests for commutativity.
1011  bool isEquality() const {
1012    return isEquality(getPredicate());
1013  }
1014
1015  /// @returns true if the predicate of this ICmpInst is commutative
1016  /// \brief Determine if this relation is commutative.
1017  bool isCommutative() const { return isEquality(); }
1018
1019  /// isRelational - Return true if the predicate is relational (not EQ or NE).
1020  ///
1021  bool isRelational() const {
1022    return !isEquality();
1023  }
1024
1025  /// isRelational - Return true if the predicate is relational (not EQ or NE).
1026  ///
1027  static bool isRelational(Predicate P) {
1028    return !isEquality(P);
1029  }
1030
1031  /// Initialize a set of values that all satisfy the predicate with C.
1032  /// \brief Make a ConstantRange for a relation with a constant value.
1033  static ConstantRange makeConstantRange(Predicate pred, const APInt &C);
1034
1035  /// Exchange the two operands to this instruction in such a way that it does
1036  /// not modify the semantics of the instruction. The predicate value may be
1037  /// changed to retain the same result if the predicate is order dependent
1038  /// (e.g. ult).
1039  /// \brief Swap operands and adjust predicate.
1040  void swapOperands() {
1041    setPredicate(getSwappedPredicate());
1042    Op<0>().swap(Op<1>());
1043  }
1044
1045  // Methods for support type inquiry through isa, cast, and dyn_cast:
1046  static inline bool classof(const Instruction *I) {
1047    return I->getOpcode() == Instruction::ICmp;
1048  }
1049  static inline bool classof(const Value *V) {
1050    return isa<Instruction>(V) && classof(cast<Instruction>(V));
1051  }
1052
1053};
1054
1055//===----------------------------------------------------------------------===//
1056//                               FCmpInst Class
1057//===----------------------------------------------------------------------===//
1058
1059/// This instruction compares its operands according to the predicate given
1060/// to the constructor. It only operates on floating point values or packed
1061/// vectors of floating point values. The operands must be identical types.
1062/// \brief Represents a floating point comparison operator.
1063class FCmpInst: public CmpInst {
1064protected:
1065  /// \brief Clone an identical FCmpInst
1066  virtual FCmpInst *clone_impl() const;
1067public:
1068  /// \brief Constructor with insert-before-instruction semantics.
1069  FCmpInst(
1070    Instruction *InsertBefore, ///< Where to insert
1071    Predicate pred,  ///< The predicate to use for the comparison
1072    Value *LHS,      ///< The left-hand-side of the expression
1073    Value *RHS,      ///< The right-hand-side of the expression
1074    const Twine &NameStr = ""  ///< Name of the instruction
1075  ) : CmpInst(makeCmpResultType(LHS->getType()),
1076              Instruction::FCmp, pred, LHS, RHS, NameStr,
1077              InsertBefore) {
1078    assert(pred <= FCmpInst::LAST_FCMP_PREDICATE &&
1079           "Invalid FCmp predicate value");
1080    assert(getOperand(0)->getType() == getOperand(1)->getType() &&
1081           "Both operands to FCmp instruction are not of the same type!");
1082    // Check that the operands are the right type
1083    assert(getOperand(0)->getType()->isFPOrFPVectorTy() &&
1084           "Invalid operand types for FCmp instruction");
1085  }
1086
1087  /// \brief Constructor with insert-at-end semantics.
1088  FCmpInst(
1089    BasicBlock &InsertAtEnd, ///< Block to insert into.
1090    Predicate pred,  ///< The predicate to use for the comparison
1091    Value *LHS,      ///< The left-hand-side of the expression
1092    Value *RHS,      ///< The right-hand-side of the expression
1093    const Twine &NameStr = ""  ///< Name of the instruction
1094  ) : CmpInst(makeCmpResultType(LHS->getType()),
1095              Instruction::FCmp, pred, LHS, RHS, NameStr,
1096              &InsertAtEnd) {
1097    assert(pred <= FCmpInst::LAST_FCMP_PREDICATE &&
1098           "Invalid FCmp predicate value");
1099    assert(getOperand(0)->getType() == getOperand(1)->getType() &&
1100           "Both operands to FCmp instruction are not of the same type!");
1101    // Check that the operands are the right type
1102    assert(getOperand(0)->getType()->isFPOrFPVectorTy() &&
1103           "Invalid operand types for FCmp instruction");
1104  }
1105
1106  /// \brief Constructor with no-insertion semantics
1107  FCmpInst(
1108    Predicate pred, ///< The predicate to use for the comparison
1109    Value *LHS,     ///< The left-hand-side of the expression
1110    Value *RHS,     ///< The right-hand-side of the expression
1111    const Twine &NameStr = "" ///< Name of the instruction
1112  ) : CmpInst(makeCmpResultType(LHS->getType()),
1113              Instruction::FCmp, pred, LHS, RHS, NameStr) {
1114    assert(pred <= FCmpInst::LAST_FCMP_PREDICATE &&
1115           "Invalid FCmp predicate value");
1116    assert(getOperand(0)->getType() == getOperand(1)->getType() &&
1117           "Both operands to FCmp instruction are not of the same type!");
1118    // Check that the operands are the right type
1119    assert(getOperand(0)->getType()->isFPOrFPVectorTy() &&
1120           "Invalid operand types for FCmp instruction");
1121  }
1122
1123  /// @returns true if the predicate of this instruction is EQ or NE.
1124  /// \brief Determine if this is an equality predicate.
1125  bool isEquality() const {
1126    return getPredicate() == FCMP_OEQ || getPredicate() == FCMP_ONE ||
1127           getPredicate() == FCMP_UEQ || getPredicate() == FCMP_UNE;
1128  }
1129
1130  /// @returns true if the predicate of this instruction is commutative.
1131  /// \brief Determine if this is a commutative predicate.
1132  bool isCommutative() const {
1133    return isEquality() ||
1134           getPredicate() == FCMP_FALSE ||
1135           getPredicate() == FCMP_TRUE ||
1136           getPredicate() == FCMP_ORD ||
1137           getPredicate() == FCMP_UNO;
1138  }
1139
1140  /// @returns true if the predicate is relational (not EQ or NE).
1141  /// \brief Determine if this a relational predicate.
1142  bool isRelational() const { return !isEquality(); }
1143
1144  /// Exchange the two operands to this instruction in such a way that it does
1145  /// not modify the semantics of the instruction. The predicate value may be
1146  /// changed to retain the same result if the predicate is order dependent
1147  /// (e.g. ult).
1148  /// \brief Swap operands and adjust predicate.
1149  void swapOperands() {
1150    setPredicate(getSwappedPredicate());
1151    Op<0>().swap(Op<1>());
1152  }
1153
1154  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
1155  static inline bool classof(const Instruction *I) {
1156    return I->getOpcode() == Instruction::FCmp;
1157  }
1158  static inline bool classof(const Value *V) {
1159    return isa<Instruction>(V) && classof(cast<Instruction>(V));
1160  }
1161};
1162
1163//===----------------------------------------------------------------------===//
1164/// CallInst - This class represents a function call, abstracting a target
1165/// machine's calling convention.  This class uses low bit of the SubClassData
1166/// field to indicate whether or not this is a tail call.  The rest of the bits
1167/// hold the calling convention of the call.
1168///
1169class CallInst : public Instruction {
1170  AttributeSet AttributeList; ///< parameter attributes for call
1171  CallInst(const CallInst &CI);
1172  void init(Value *Func, ArrayRef<Value *> Args, const Twine &NameStr);
1173  void init(Value *Func, const Twine &NameStr);
1174
1175  /// Construct a CallInst given a range of arguments.
1176  /// \brief Construct a CallInst from a range of arguments
1177  inline CallInst(Value *Func, ArrayRef<Value *> Args,
1178                  const Twine &NameStr, Instruction *InsertBefore);
1179
1180  /// Construct a CallInst given a range of arguments.
1181  /// \brief Construct a CallInst from a range of arguments
1182  inline CallInst(Value *Func, ArrayRef<Value *> Args,
1183                  const Twine &NameStr, BasicBlock *InsertAtEnd);
1184
1185  CallInst(Value *F, Value *Actual, const Twine &NameStr,
1186           Instruction *InsertBefore);
1187  CallInst(Value *F, Value *Actual, const Twine &NameStr,
1188           BasicBlock *InsertAtEnd);
1189  explicit CallInst(Value *F, const Twine &NameStr,
1190                    Instruction *InsertBefore);
1191  CallInst(Value *F, const Twine &NameStr, BasicBlock *InsertAtEnd);
1192protected:
1193  virtual CallInst *clone_impl() const;
1194public:
1195  static CallInst *Create(Value *Func,
1196                          ArrayRef<Value *> Args,
1197                          const Twine &NameStr = "",
1198                          Instruction *InsertBefore = 0) {
1199    return new(unsigned(Args.size() + 1))
1200      CallInst(Func, Args, NameStr, InsertBefore);
1201  }
1202  static CallInst *Create(Value *Func,
1203                          ArrayRef<Value *> Args,
1204                          const Twine &NameStr, BasicBlock *InsertAtEnd) {
1205    return new(unsigned(Args.size() + 1))
1206      CallInst(Func, Args, NameStr, InsertAtEnd);
1207  }
1208  static CallInst *Create(Value *F, const Twine &NameStr = "",
1209                          Instruction *InsertBefore = 0) {
1210    return new(1) CallInst(F, NameStr, InsertBefore);
1211  }
1212  static CallInst *Create(Value *F, const Twine &NameStr,
1213                          BasicBlock *InsertAtEnd) {
1214    return new(1) CallInst(F, NameStr, InsertAtEnd);
1215  }
1216  /// CreateMalloc - Generate the IR for a call to malloc:
1217  /// 1. Compute the malloc call's argument as the specified type's size,
1218  ///    possibly multiplied by the array size if the array size is not
1219  ///    constant 1.
1220  /// 2. Call malloc with that argument.
1221  /// 3. Bitcast the result of the malloc call to the specified type.
1222  static Instruction *CreateMalloc(Instruction *InsertBefore,
1223                                   Type *IntPtrTy, Type *AllocTy,
1224                                   Value *AllocSize, Value *ArraySize = 0,
1225                                   Function* MallocF = 0,
1226                                   const Twine &Name = "");
1227  static Instruction *CreateMalloc(BasicBlock *InsertAtEnd,
1228                                   Type *IntPtrTy, Type *AllocTy,
1229                                   Value *AllocSize, Value *ArraySize = 0,
1230                                   Function* MallocF = 0,
1231                                   const Twine &Name = "");
1232  /// CreateFree - Generate the IR for a call to the builtin free function.
1233  static Instruction* CreateFree(Value* Source, Instruction *InsertBefore);
1234  static Instruction* CreateFree(Value* Source, BasicBlock *InsertAtEnd);
1235
1236  ~CallInst();
1237
1238  bool isTailCall() const { return getSubclassDataFromInstruction() & 1; }
1239  void setTailCall(bool isTC = true) {
1240    setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
1241                               unsigned(isTC));
1242  }
1243
1244  /// Provide fast operand accessors
1245  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
1246
1247  /// getNumArgOperands - Return the number of call arguments.
1248  ///
1249  unsigned getNumArgOperands() const { return getNumOperands() - 1; }
1250
1251  /// getArgOperand/setArgOperand - Return/set the i-th call argument.
1252  ///
1253  Value *getArgOperand(unsigned i) const { return getOperand(i); }
1254  void setArgOperand(unsigned i, Value *v) { setOperand(i, v); }
1255
1256  /// getCallingConv/setCallingConv - Get or set the calling convention of this
1257  /// function call.
1258  CallingConv::ID getCallingConv() const {
1259    return static_cast<CallingConv::ID>(getSubclassDataFromInstruction() >> 1);
1260  }
1261  void setCallingConv(CallingConv::ID CC) {
1262    setInstructionSubclassData((getSubclassDataFromInstruction() & 1) |
1263                               (static_cast<unsigned>(CC) << 1));
1264  }
1265
1266  /// getAttributes - Return the parameter attributes for this call.
1267  ///
1268  const AttributeSet &getAttributes() const { return AttributeList; }
1269
1270  /// setAttributes - Set the parameter attributes for this call.
1271  ///
1272  void setAttributes(const AttributeSet &Attrs) { AttributeList = Attrs; }
1273
1274  /// addAttribute - adds the attribute to the list of attributes.
1275  void addAttribute(unsigned i, Attribute::AttrKind attr);
1276
1277  /// removeAttribute - removes the attribute from the list of attributes.
1278  void removeAttribute(unsigned i, Attribute attr);
1279
1280  /// \brief Determine whether this call has the given attribute.
1281  bool hasFnAttr(Attribute::AttrKind A) const;
1282
1283  /// \brief Determine whether the call or the callee has the given attributes.
1284  bool paramHasAttr(unsigned i, Attribute::AttrKind A) const;
1285
1286  /// \brief Extract the alignment for a call or parameter (0=unknown).
1287  unsigned getParamAlignment(unsigned i) const {
1288    return AttributeList.getParamAlignment(i);
1289  }
1290
1291  /// \brief Return true if the call should not be inlined.
1292  bool isNoInline() const { return hasFnAttr(Attribute::NoInline); }
1293  void setIsNoInline() {
1294    addAttribute(AttributeSet::FunctionIndex, Attribute::NoInline);
1295  }
1296
1297  /// \brief Return true if the call can return twice
1298  bool canReturnTwice() const {
1299    return hasFnAttr(Attribute::ReturnsTwice);
1300  }
1301  void setCanReturnTwice() {
1302    addAttribute(AttributeSet::FunctionIndex, Attribute::ReturnsTwice);
1303  }
1304
1305  /// \brief Determine if the call does not access memory.
1306  bool doesNotAccessMemory() const {
1307    return hasFnAttr(Attribute::ReadNone);
1308  }
1309  void setDoesNotAccessMemory() {
1310    addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone);
1311  }
1312
1313  /// \brief Determine if the call does not access or only reads memory.
1314  bool onlyReadsMemory() const {
1315    return doesNotAccessMemory() || hasFnAttr(Attribute::ReadOnly);
1316  }
1317  void setOnlyReadsMemory() {
1318    addAttribute(AttributeSet::FunctionIndex, Attribute::ReadOnly);
1319  }
1320
1321  /// \brief Determine if the call cannot return.
1322  bool doesNotReturn() const { return hasFnAttr(Attribute::NoReturn); }
1323  void setDoesNotReturn() {
1324    addAttribute(AttributeSet::FunctionIndex, Attribute::NoReturn);
1325  }
1326
1327  /// \brief Determine if the call cannot unwind.
1328  bool doesNotThrow() const { return hasFnAttr(Attribute::NoUnwind); }
1329  void setDoesNotThrow() {
1330    addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind);
1331  }
1332
1333  /// \brief Determine if the call cannot be duplicated.
1334  bool cannotDuplicate() const {return hasFnAttr(Attribute::NoDuplicate); }
1335  void setCannotDuplicate() {
1336    addAttribute(AttributeSet::FunctionIndex, Attribute::NoDuplicate);
1337  }
1338
1339  /// \brief Determine if the call returns a structure through first
1340  /// pointer argument.
1341  bool hasStructRetAttr() const {
1342    // Be friendly and also check the callee.
1343    return paramHasAttr(1, Attribute::StructRet);
1344  }
1345
1346  /// \brief Determine if any call argument is an aggregate passed by value.
1347  bool hasByValArgument() const {
1348    return AttributeList.hasAttrSomewhere(Attribute::ByVal);
1349  }
1350
1351  /// getCalledFunction - Return the function called, or null if this is an
1352  /// indirect function invocation.
1353  ///
1354  Function *getCalledFunction() const {
1355    return dyn_cast<Function>(Op<-1>());
1356  }
1357
1358  /// getCalledValue - Get a pointer to the function that is invoked by this
1359  /// instruction.
1360  const Value *getCalledValue() const { return Op<-1>(); }
1361        Value *getCalledValue()       { return Op<-1>(); }
1362
1363  /// setCalledFunction - Set the function called.
1364  void setCalledFunction(Value* Fn) {
1365    Op<-1>() = Fn;
1366  }
1367
1368  /// isInlineAsm - Check if this call is an inline asm statement.
1369  bool isInlineAsm() const {
1370    return isa<InlineAsm>(Op<-1>());
1371  }
1372
1373  // Methods for support type inquiry through isa, cast, and dyn_cast:
1374  static inline bool classof(const Instruction *I) {
1375    return I->getOpcode() == Instruction::Call;
1376  }
1377  static inline bool classof(const Value *V) {
1378    return isa<Instruction>(V) && classof(cast<Instruction>(V));
1379  }
1380private:
1381  // Shadow Instruction::setInstructionSubclassData with a private forwarding
1382  // method so that subclasses cannot accidentally use it.
1383  void setInstructionSubclassData(unsigned short D) {
1384    Instruction::setInstructionSubclassData(D);
1385  }
1386};
1387
1388template <>
1389struct OperandTraits<CallInst> : public VariadicOperandTraits<CallInst, 1> {
1390};
1391
1392CallInst::CallInst(Value *Func, ArrayRef<Value *> Args,
1393                   const Twine &NameStr, BasicBlock *InsertAtEnd)
1394  : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
1395                                   ->getElementType())->getReturnType(),
1396                Instruction::Call,
1397                OperandTraits<CallInst>::op_end(this) - (Args.size() + 1),
1398                unsigned(Args.size() + 1), InsertAtEnd) {
1399  init(Func, Args, NameStr);
1400}
1401
1402CallInst::CallInst(Value *Func, ArrayRef<Value *> Args,
1403                   const Twine &NameStr, Instruction *InsertBefore)
1404  : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType())
1405                                   ->getElementType())->getReturnType(),
1406                Instruction::Call,
1407                OperandTraits<CallInst>::op_end(this) - (Args.size() + 1),
1408                unsigned(Args.size() + 1), InsertBefore) {
1409  init(Func, Args, NameStr);
1410}
1411
1412
1413// Note: if you get compile errors about private methods then
1414//       please update your code to use the high-level operand
1415//       interfaces. See line 943 above.
1416DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CallInst, Value)
1417
1418//===----------------------------------------------------------------------===//
1419//                               SelectInst Class
1420//===----------------------------------------------------------------------===//
1421
1422/// SelectInst - This class represents the LLVM 'select' instruction.
1423///
1424class SelectInst : public Instruction {
1425  void init(Value *C, Value *S1, Value *S2) {
1426    assert(!areInvalidOperands(C, S1, S2) && "Invalid operands for select");
1427    Op<0>() = C;
1428    Op<1>() = S1;
1429    Op<2>() = S2;
1430  }
1431
1432  SelectInst(Value *C, Value *S1, Value *S2, const Twine &NameStr,
1433             Instruction *InsertBefore)
1434    : Instruction(S1->getType(), Instruction::Select,
1435                  &Op<0>(), 3, InsertBefore) {
1436    init(C, S1, S2);
1437    setName(NameStr);
1438  }
1439  SelectInst(Value *C, Value *S1, Value *S2, const Twine &NameStr,
1440             BasicBlock *InsertAtEnd)
1441    : Instruction(S1->getType(), Instruction::Select,
1442                  &Op<0>(), 3, InsertAtEnd) {
1443    init(C, S1, S2);
1444    setName(NameStr);
1445  }
1446protected:
1447  virtual SelectInst *clone_impl() const;
1448public:
1449  static SelectInst *Create(Value *C, Value *S1, Value *S2,
1450                            const Twine &NameStr = "",
1451                            Instruction *InsertBefore = 0) {
1452    return new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
1453  }
1454  static SelectInst *Create(Value *C, Value *S1, Value *S2,
1455                            const Twine &NameStr,
1456                            BasicBlock *InsertAtEnd) {
1457    return new(3) SelectInst(C, S1, S2, NameStr, InsertAtEnd);
1458  }
1459
1460  const Value *getCondition() const { return Op<0>(); }
1461  const Value *getTrueValue() const { return Op<1>(); }
1462  const Value *getFalseValue() const { return Op<2>(); }
1463  Value *getCondition() { return Op<0>(); }
1464  Value *getTrueValue() { return Op<1>(); }
1465  Value *getFalseValue() { return Op<2>(); }
1466
1467  /// areInvalidOperands - Return a string if the specified operands are invalid
1468  /// for a select operation, otherwise return null.
1469  static const char *areInvalidOperands(Value *Cond, Value *True, Value *False);
1470
1471  /// Transparently provide more efficient getOperand methods.
1472  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
1473
1474  OtherOps getOpcode() const {
1475    return static_cast<OtherOps>(Instruction::getOpcode());
1476  }
1477
1478  // Methods for support type inquiry through isa, cast, and dyn_cast:
1479  static inline bool classof(const Instruction *I) {
1480    return I->getOpcode() == Instruction::Select;
1481  }
1482  static inline bool classof(const Value *V) {
1483    return isa<Instruction>(V) && classof(cast<Instruction>(V));
1484  }
1485};
1486
1487template <>
1488struct OperandTraits<SelectInst> : public FixedNumOperandTraits<SelectInst, 3> {
1489};
1490
1491DEFINE_TRANSPARENT_OPERAND_ACCESSORS(SelectInst, Value)
1492
1493//===----------------------------------------------------------------------===//
1494//                                VAArgInst Class
1495//===----------------------------------------------------------------------===//
1496
1497/// VAArgInst - This class represents the va_arg llvm instruction, which returns
1498/// an argument of the specified type given a va_list and increments that list
1499///
1500class VAArgInst : public UnaryInstruction {
1501protected:
1502  virtual VAArgInst *clone_impl() const;
1503
1504public:
1505  VAArgInst(Value *List, Type *Ty, const Twine &NameStr = "",
1506             Instruction *InsertBefore = 0)
1507    : UnaryInstruction(Ty, VAArg, List, InsertBefore) {
1508    setName(NameStr);
1509  }
1510  VAArgInst(Value *List, Type *Ty, const Twine &NameStr,
1511            BasicBlock *InsertAtEnd)
1512    : UnaryInstruction(Ty, VAArg, List, InsertAtEnd) {
1513    setName(NameStr);
1514  }
1515
1516  Value *getPointerOperand() { return getOperand(0); }
1517  const Value *getPointerOperand() const { return getOperand(0); }
1518  static unsigned getPointerOperandIndex() { return 0U; }
1519
1520  // Methods for support type inquiry through isa, cast, and dyn_cast:
1521  static inline bool classof(const Instruction *I) {
1522    return I->getOpcode() == VAArg;
1523  }
1524  static inline bool classof(const Value *V) {
1525    return isa<Instruction>(V) && classof(cast<Instruction>(V));
1526  }
1527};
1528
1529//===----------------------------------------------------------------------===//
1530//                                ExtractElementInst Class
1531//===----------------------------------------------------------------------===//
1532
1533/// ExtractElementInst - This instruction extracts a single (scalar)
1534/// element from a VectorType value
1535///
1536class ExtractElementInst : public Instruction {
1537  ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr = "",
1538                     Instruction *InsertBefore = 0);
1539  ExtractElementInst(Value *Vec, Value *Idx, const Twine &NameStr,
1540                     BasicBlock *InsertAtEnd);
1541protected:
1542  virtual ExtractElementInst *clone_impl() const;
1543
1544public:
1545  static ExtractElementInst *Create(Value *Vec, Value *Idx,
1546                                   const Twine &NameStr = "",
1547                                   Instruction *InsertBefore = 0) {
1548    return new(2) ExtractElementInst(Vec, Idx, NameStr, InsertBefore);
1549  }
1550  static ExtractElementInst *Create(Value *Vec, Value *Idx,
1551                                   const Twine &NameStr,
1552                                   BasicBlock *InsertAtEnd) {
1553    return new(2) ExtractElementInst(Vec, Idx, NameStr, InsertAtEnd);
1554  }
1555
1556  /// isValidOperands - Return true if an extractelement instruction can be
1557  /// formed with the specified operands.
1558  static bool isValidOperands(const Value *Vec, const Value *Idx);
1559
1560  Value *getVectorOperand() { return Op<0>(); }
1561  Value *getIndexOperand() { return Op<1>(); }
1562  const Value *getVectorOperand() const { return Op<0>(); }
1563  const Value *getIndexOperand() const { return Op<1>(); }
1564
1565  VectorType *getVectorOperandType() const {
1566    return cast<VectorType>(getVectorOperand()->getType());
1567  }
1568
1569
1570  /// Transparently provide more efficient getOperand methods.
1571  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
1572
1573  // Methods for support type inquiry through isa, cast, and dyn_cast:
1574  static inline bool classof(const Instruction *I) {
1575    return I->getOpcode() == Instruction::ExtractElement;
1576  }
1577  static inline bool classof(const Value *V) {
1578    return isa<Instruction>(V) && classof(cast<Instruction>(V));
1579  }
1580};
1581
1582template <>
1583struct OperandTraits<ExtractElementInst> :
1584  public FixedNumOperandTraits<ExtractElementInst, 2> {
1585};
1586
1587DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ExtractElementInst, Value)
1588
1589//===----------------------------------------------------------------------===//
1590//                                InsertElementInst Class
1591//===----------------------------------------------------------------------===//
1592
1593/// InsertElementInst - This instruction inserts a single (scalar)
1594/// element into a VectorType value
1595///
1596class InsertElementInst : public Instruction {
1597  InsertElementInst(Value *Vec, Value *NewElt, Value *Idx,
1598                    const Twine &NameStr = "",
1599                    Instruction *InsertBefore = 0);
1600  InsertElementInst(Value *Vec, Value *NewElt, Value *Idx,
1601                    const Twine &NameStr, BasicBlock *InsertAtEnd);
1602protected:
1603  virtual InsertElementInst *clone_impl() const;
1604
1605public:
1606  static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx,
1607                                   const Twine &NameStr = "",
1608                                   Instruction *InsertBefore = 0) {
1609    return new(3) InsertElementInst(Vec, NewElt, Idx, NameStr, InsertBefore);
1610  }
1611  static InsertElementInst *Create(Value *Vec, Value *NewElt, Value *Idx,
1612                                   const Twine &NameStr,
1613                                   BasicBlock *InsertAtEnd) {
1614    return new(3) InsertElementInst(Vec, NewElt, Idx, NameStr, InsertAtEnd);
1615  }
1616
1617  /// isValidOperands - Return true if an insertelement instruction can be
1618  /// formed with the specified operands.
1619  static bool isValidOperands(const Value *Vec, const Value *NewElt,
1620                              const Value *Idx);
1621
1622  /// getType - Overload to return most specific vector type.
1623  ///
1624  VectorType *getType() const {
1625    return cast<VectorType>(Instruction::getType());
1626  }
1627
1628  /// Transparently provide more efficient getOperand methods.
1629  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
1630
1631  // Methods for support type inquiry through isa, cast, and dyn_cast:
1632  static inline bool classof(const Instruction *I) {
1633    return I->getOpcode() == Instruction::InsertElement;
1634  }
1635  static inline bool classof(const Value *V) {
1636    return isa<Instruction>(V) && classof(cast<Instruction>(V));
1637  }
1638};
1639
1640template <>
1641struct OperandTraits<InsertElementInst> :
1642  public FixedNumOperandTraits<InsertElementInst, 3> {
1643};
1644
1645DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InsertElementInst, Value)
1646
1647//===----------------------------------------------------------------------===//
1648//                           ShuffleVectorInst Class
1649//===----------------------------------------------------------------------===//
1650
1651/// ShuffleVectorInst - This instruction constructs a fixed permutation of two
1652/// input vectors.
1653///
1654class ShuffleVectorInst : public Instruction {
1655protected:
1656  virtual ShuffleVectorInst *clone_impl() const;
1657
1658public:
1659  // allocate space for exactly three operands
1660  void *operator new(size_t s) {
1661    return User::operator new(s, 3);
1662  }
1663  ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
1664                    const Twine &NameStr = "",
1665                    Instruction *InsertBefor = 0);
1666  ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
1667                    const Twine &NameStr, BasicBlock *InsertAtEnd);
1668
1669  /// isValidOperands - Return true if a shufflevector instruction can be
1670  /// formed with the specified operands.
1671  static bool isValidOperands(const Value *V1, const Value *V2,
1672                              const Value *Mask);
1673
1674  /// getType - Overload to return most specific vector type.
1675  ///
1676  VectorType *getType() const {
1677    return cast<VectorType>(Instruction::getType());
1678  }
1679
1680  /// Transparently provide more efficient getOperand methods.
1681  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
1682
1683  Constant *getMask() const {
1684    return cast<Constant>(getOperand(2));
1685  }
1686
1687  /// getMaskValue - Return the index from the shuffle mask for the specified
1688  /// output result.  This is either -1 if the element is undef or a number less
1689  /// than 2*numelements.
1690  static int getMaskValue(Constant *Mask, unsigned i);
1691
1692  int getMaskValue(unsigned i) const {
1693    return getMaskValue(getMask(), i);
1694  }
1695
1696  /// getShuffleMask - Return the full mask for this instruction, where each
1697  /// element is the element number and undef's are returned as -1.
1698  static void getShuffleMask(Constant *Mask, SmallVectorImpl<int> &Result);
1699
1700  void getShuffleMask(SmallVectorImpl<int> &Result) const {
1701    return getShuffleMask(getMask(), Result);
1702  }
1703
1704  SmallVector<int, 16> getShuffleMask() const {
1705    SmallVector<int, 16> Mask;
1706    getShuffleMask(Mask);
1707    return Mask;
1708  }
1709
1710
1711  // Methods for support type inquiry through isa, cast, and dyn_cast:
1712  static inline bool classof(const Instruction *I) {
1713    return I->getOpcode() == Instruction::ShuffleVector;
1714  }
1715  static inline bool classof(const Value *V) {
1716    return isa<Instruction>(V) && classof(cast<Instruction>(V));
1717  }
1718};
1719
1720template <>
1721struct OperandTraits<ShuffleVectorInst> :
1722  public FixedNumOperandTraits<ShuffleVectorInst, 3> {
1723};
1724
1725DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ShuffleVectorInst, Value)
1726
1727//===----------------------------------------------------------------------===//
1728//                                ExtractValueInst Class
1729//===----------------------------------------------------------------------===//
1730
1731/// ExtractValueInst - This instruction extracts a struct member or array
1732/// element value from an aggregate value.
1733///
1734class ExtractValueInst : public UnaryInstruction {
1735  SmallVector<unsigned, 4> Indices;
1736
1737  ExtractValueInst(const ExtractValueInst &EVI);
1738  void init(ArrayRef<unsigned> Idxs, const Twine &NameStr);
1739
1740  /// Constructors - Create a extractvalue instruction with a base aggregate
1741  /// value and a list of indices.  The first ctor can optionally insert before
1742  /// an existing instruction, the second appends the new instruction to the
1743  /// specified BasicBlock.
1744  inline ExtractValueInst(Value *Agg,
1745                          ArrayRef<unsigned> Idxs,
1746                          const Twine &NameStr,
1747                          Instruction *InsertBefore);
1748  inline ExtractValueInst(Value *Agg,
1749                          ArrayRef<unsigned> Idxs,
1750                          const Twine &NameStr, BasicBlock *InsertAtEnd);
1751
1752  // allocate space for exactly one operand
1753  void *operator new(size_t s) {
1754    return User::operator new(s, 1);
1755  }
1756protected:
1757  virtual ExtractValueInst *clone_impl() const;
1758
1759public:
1760  static ExtractValueInst *Create(Value *Agg,
1761                                  ArrayRef<unsigned> Idxs,
1762                                  const Twine &NameStr = "",
1763                                  Instruction *InsertBefore = 0) {
1764    return new
1765      ExtractValueInst(Agg, Idxs, NameStr, InsertBefore);
1766  }
1767  static ExtractValueInst *Create(Value *Agg,
1768                                  ArrayRef<unsigned> Idxs,
1769                                  const Twine &NameStr,
1770                                  BasicBlock *InsertAtEnd) {
1771    return new ExtractValueInst(Agg, Idxs, NameStr, InsertAtEnd);
1772  }
1773
1774  /// getIndexedType - Returns the type of the element that would be extracted
1775  /// with an extractvalue instruction with the specified parameters.
1776  ///
1777  /// Null is returned if the indices are invalid for the specified type.
1778  static Type *getIndexedType(Type *Agg, ArrayRef<unsigned> Idxs);
1779
1780  typedef const unsigned* idx_iterator;
1781  inline idx_iterator idx_begin() const { return Indices.begin(); }
1782  inline idx_iterator idx_end()   const { return Indices.end(); }
1783
1784  Value *getAggregateOperand() {
1785    return getOperand(0);
1786  }
1787  const Value *getAggregateOperand() const {
1788    return getOperand(0);
1789  }
1790  static unsigned getAggregateOperandIndex() {
1791    return 0U;                      // get index for modifying correct operand
1792  }
1793
1794  ArrayRef<unsigned> getIndices() const {
1795    return Indices;
1796  }
1797
1798  unsigned getNumIndices() const {
1799    return (unsigned)Indices.size();
1800  }
1801
1802  bool hasIndices() const {
1803    return true;
1804  }
1805
1806  // Methods for support type inquiry through isa, cast, and dyn_cast:
1807  static inline bool classof(const Instruction *I) {
1808    return I->getOpcode() == Instruction::ExtractValue;
1809  }
1810  static inline bool classof(const Value *V) {
1811    return isa<Instruction>(V) && classof(cast<Instruction>(V));
1812  }
1813};
1814
1815ExtractValueInst::ExtractValueInst(Value *Agg,
1816                                   ArrayRef<unsigned> Idxs,
1817                                   const Twine &NameStr,
1818                                   Instruction *InsertBefore)
1819  : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)),
1820                     ExtractValue, Agg, InsertBefore) {
1821  init(Idxs, NameStr);
1822}
1823ExtractValueInst::ExtractValueInst(Value *Agg,
1824                                   ArrayRef<unsigned> Idxs,
1825                                   const Twine &NameStr,
1826                                   BasicBlock *InsertAtEnd)
1827  : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)),
1828                     ExtractValue, Agg, InsertAtEnd) {
1829  init(Idxs, NameStr);
1830}
1831
1832
1833//===----------------------------------------------------------------------===//
1834//                                InsertValueInst Class
1835//===----------------------------------------------------------------------===//
1836
1837/// InsertValueInst - This instruction inserts a struct field of array element
1838/// value into an aggregate value.
1839///
1840class InsertValueInst : public Instruction {
1841  SmallVector<unsigned, 4> Indices;
1842
1843  void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION;
1844  InsertValueInst(const InsertValueInst &IVI);
1845  void init(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs,
1846            const Twine &NameStr);
1847
1848  /// Constructors - Create a insertvalue instruction with a base aggregate
1849  /// value, a value to insert, and a list of indices.  The first ctor can
1850  /// optionally insert before an existing instruction, the second appends
1851  /// the new instruction to the specified BasicBlock.
1852  inline InsertValueInst(Value *Agg, Value *Val,
1853                         ArrayRef<unsigned> Idxs,
1854                         const Twine &NameStr,
1855                         Instruction *InsertBefore);
1856  inline InsertValueInst(Value *Agg, Value *Val,
1857                         ArrayRef<unsigned> Idxs,
1858                         const Twine &NameStr, BasicBlock *InsertAtEnd);
1859
1860  /// Constructors - These two constructors are convenience methods because one
1861  /// and two index insertvalue instructions are so common.
1862  InsertValueInst(Value *Agg, Value *Val,
1863                  unsigned Idx, const Twine &NameStr = "",
1864                  Instruction *InsertBefore = 0);
1865  InsertValueInst(Value *Agg, Value *Val, unsigned Idx,
1866                  const Twine &NameStr, BasicBlock *InsertAtEnd);
1867protected:
1868  virtual InsertValueInst *clone_impl() const;
1869public:
1870  // allocate space for exactly two operands
1871  void *operator new(size_t s) {
1872    return User::operator new(s, 2);
1873  }
1874
1875  static InsertValueInst *Create(Value *Agg, Value *Val,
1876                                 ArrayRef<unsigned> Idxs,
1877                                 const Twine &NameStr = "",
1878                                 Instruction *InsertBefore = 0) {
1879    return new InsertValueInst(Agg, Val, Idxs, NameStr, InsertBefore);
1880  }
1881  static InsertValueInst *Create(Value *Agg, Value *Val,
1882                                 ArrayRef<unsigned> Idxs,
1883                                 const Twine &NameStr,
1884                                 BasicBlock *InsertAtEnd) {
1885    return new InsertValueInst(Agg, Val, Idxs, NameStr, InsertAtEnd);
1886  }
1887
1888  /// Transparently provide more efficient getOperand methods.
1889  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
1890
1891  typedef const unsigned* idx_iterator;
1892  inline idx_iterator idx_begin() const { return Indices.begin(); }
1893  inline idx_iterator idx_end()   const { return Indices.end(); }
1894
1895  Value *getAggregateOperand() {
1896    return getOperand(0);
1897  }
1898  const Value *getAggregateOperand() const {
1899    return getOperand(0);
1900  }
1901  static unsigned getAggregateOperandIndex() {
1902    return 0U;                      // get index for modifying correct operand
1903  }
1904
1905  Value *getInsertedValueOperand() {
1906    return getOperand(1);
1907  }
1908  const Value *getInsertedValueOperand() const {
1909    return getOperand(1);
1910  }
1911  static unsigned getInsertedValueOperandIndex() {
1912    return 1U;                      // get index for modifying correct operand
1913  }
1914
1915  ArrayRef<unsigned> getIndices() const {
1916    return Indices;
1917  }
1918
1919  unsigned getNumIndices() const {
1920    return (unsigned)Indices.size();
1921  }
1922
1923  bool hasIndices() const {
1924    return true;
1925  }
1926
1927  // Methods for support type inquiry through isa, cast, and dyn_cast:
1928  static inline bool classof(const Instruction *I) {
1929    return I->getOpcode() == Instruction::InsertValue;
1930  }
1931  static inline bool classof(const Value *V) {
1932    return isa<Instruction>(V) && classof(cast<Instruction>(V));
1933  }
1934};
1935
1936template <>
1937struct OperandTraits<InsertValueInst> :
1938  public FixedNumOperandTraits<InsertValueInst, 2> {
1939};
1940
1941InsertValueInst::InsertValueInst(Value *Agg,
1942                                 Value *Val,
1943                                 ArrayRef<unsigned> Idxs,
1944                                 const Twine &NameStr,
1945                                 Instruction *InsertBefore)
1946  : Instruction(Agg->getType(), InsertValue,
1947                OperandTraits<InsertValueInst>::op_begin(this),
1948                2, InsertBefore) {
1949  init(Agg, Val, Idxs, NameStr);
1950}
1951InsertValueInst::InsertValueInst(Value *Agg,
1952                                 Value *Val,
1953                                 ArrayRef<unsigned> Idxs,
1954                                 const Twine &NameStr,
1955                                 BasicBlock *InsertAtEnd)
1956  : Instruction(Agg->getType(), InsertValue,
1957                OperandTraits<InsertValueInst>::op_begin(this),
1958                2, InsertAtEnd) {
1959  init(Agg, Val, Idxs, NameStr);
1960}
1961
1962DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InsertValueInst, Value)
1963
1964//===----------------------------------------------------------------------===//
1965//                               PHINode Class
1966//===----------------------------------------------------------------------===//
1967
1968// PHINode - The PHINode class is used to represent the magical mystical PHI
1969// node, that can not exist in nature, but can be synthesized in a computer
1970// scientist's overactive imagination.
1971//
1972class PHINode : public Instruction {
1973  void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION;
1974  /// ReservedSpace - The number of operands actually allocated.  NumOperands is
1975  /// the number actually in use.
1976  unsigned ReservedSpace;
1977  PHINode(const PHINode &PN);
1978  // allocate space for exactly zero operands
1979  void *operator new(size_t s) {
1980    return User::operator new(s, 0);
1981  }
1982  explicit PHINode(Type *Ty, unsigned NumReservedValues,
1983                   const Twine &NameStr = "", Instruction *InsertBefore = 0)
1984    : Instruction(Ty, Instruction::PHI, 0, 0, InsertBefore),
1985      ReservedSpace(NumReservedValues) {
1986    setName(NameStr);
1987    OperandList = allocHungoffUses(ReservedSpace);
1988  }
1989
1990  PHINode(Type *Ty, unsigned NumReservedValues, const Twine &NameStr,
1991          BasicBlock *InsertAtEnd)
1992    : Instruction(Ty, Instruction::PHI, 0, 0, InsertAtEnd),
1993      ReservedSpace(NumReservedValues) {
1994    setName(NameStr);
1995    OperandList = allocHungoffUses(ReservedSpace);
1996  }
1997protected:
1998  // allocHungoffUses - this is more complicated than the generic
1999  // User::allocHungoffUses, because we have to allocate Uses for the incoming
2000  // values and pointers to the incoming blocks, all in one allocation.
2001  Use *allocHungoffUses(unsigned) const;
2002
2003  virtual PHINode *clone_impl() const;
2004public:
2005  /// Constructors - NumReservedValues is a hint for the number of incoming
2006  /// edges that this phi node will have (use 0 if you really have no idea).
2007  static PHINode *Create(Type *Ty, unsigned NumReservedValues,
2008                         const Twine &NameStr = "",
2009                         Instruction *InsertBefore = 0) {
2010    return new PHINode(Ty, NumReservedValues, NameStr, InsertBefore);
2011  }
2012  static PHINode *Create(Type *Ty, unsigned NumReservedValues,
2013                         const Twine &NameStr, BasicBlock *InsertAtEnd) {
2014    return new PHINode(Ty, NumReservedValues, NameStr, InsertAtEnd);
2015  }
2016  ~PHINode();
2017
2018  /// Provide fast operand accessors
2019  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2020
2021  // Block iterator interface. This provides access to the list of incoming
2022  // basic blocks, which parallels the list of incoming values.
2023
2024  typedef BasicBlock **block_iterator;
2025  typedef BasicBlock * const *const_block_iterator;
2026
2027  block_iterator block_begin() {
2028    Use::UserRef *ref =
2029      reinterpret_cast<Use::UserRef*>(op_begin() + ReservedSpace);
2030    return reinterpret_cast<block_iterator>(ref + 1);
2031  }
2032
2033  const_block_iterator block_begin() const {
2034    const Use::UserRef *ref =
2035      reinterpret_cast<const Use::UserRef*>(op_begin() + ReservedSpace);
2036    return reinterpret_cast<const_block_iterator>(ref + 1);
2037  }
2038
2039  block_iterator block_end() {
2040    return block_begin() + getNumOperands();
2041  }
2042
2043  const_block_iterator block_end() const {
2044    return block_begin() + getNumOperands();
2045  }
2046
2047  /// getNumIncomingValues - Return the number of incoming edges
2048  ///
2049  unsigned getNumIncomingValues() const { return getNumOperands(); }
2050
2051  /// getIncomingValue - Return incoming value number x
2052  ///
2053  Value *getIncomingValue(unsigned i) const {
2054    return getOperand(i);
2055  }
2056  void setIncomingValue(unsigned i, Value *V) {
2057    setOperand(i, V);
2058  }
2059  static unsigned getOperandNumForIncomingValue(unsigned i) {
2060    return i;
2061  }
2062  static unsigned getIncomingValueNumForOperand(unsigned i) {
2063    return i;
2064  }
2065
2066  /// getIncomingBlock - Return incoming basic block number @p i.
2067  ///
2068  BasicBlock *getIncomingBlock(unsigned i) const {
2069    return block_begin()[i];
2070  }
2071
2072  /// getIncomingBlock - Return incoming basic block corresponding
2073  /// to an operand of the PHI.
2074  ///
2075  BasicBlock *getIncomingBlock(const Use &U) const {
2076    assert(this == U.getUser() && "Iterator doesn't point to PHI's Uses?");
2077    return getIncomingBlock(unsigned(&U - op_begin()));
2078  }
2079
2080  /// getIncomingBlock - Return incoming basic block corresponding
2081  /// to value use iterator.
2082  ///
2083  template <typename U>
2084  BasicBlock *getIncomingBlock(value_use_iterator<U> I) const {
2085    return getIncomingBlock(I.getUse());
2086  }
2087
2088  void setIncomingBlock(unsigned i, BasicBlock *BB) {
2089    block_begin()[i] = BB;
2090  }
2091
2092  /// addIncoming - Add an incoming value to the end of the PHI list
2093  ///
2094  void addIncoming(Value *V, BasicBlock *BB) {
2095    assert(V && "PHI node got a null value!");
2096    assert(BB && "PHI node got a null basic block!");
2097    assert(getType() == V->getType() &&
2098           "All operands to PHI node must be the same type as the PHI node!");
2099    if (NumOperands == ReservedSpace)
2100      growOperands();  // Get more space!
2101    // Initialize some new operands.
2102    ++NumOperands;
2103    setIncomingValue(NumOperands - 1, V);
2104    setIncomingBlock(NumOperands - 1, BB);
2105  }
2106
2107  /// removeIncomingValue - Remove an incoming value.  This is useful if a
2108  /// predecessor basic block is deleted.  The value removed is returned.
2109  ///
2110  /// If the last incoming value for a PHI node is removed (and DeletePHIIfEmpty
2111  /// is true), the PHI node is destroyed and any uses of it are replaced with
2112  /// dummy values.  The only time there should be zero incoming values to a PHI
2113  /// node is when the block is dead, so this strategy is sound.
2114  ///
2115  Value *removeIncomingValue(unsigned Idx, bool DeletePHIIfEmpty = true);
2116
2117  Value *removeIncomingValue(const BasicBlock *BB, bool DeletePHIIfEmpty=true) {
2118    int Idx = getBasicBlockIndex(BB);
2119    assert(Idx >= 0 && "Invalid basic block argument to remove!");
2120    return removeIncomingValue(Idx, DeletePHIIfEmpty);
2121  }
2122
2123  /// getBasicBlockIndex - Return the first index of the specified basic
2124  /// block in the value list for this PHI.  Returns -1 if no instance.
2125  ///
2126  int getBasicBlockIndex(const BasicBlock *BB) const {
2127    for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
2128      if (block_begin()[i] == BB)
2129        return i;
2130    return -1;
2131  }
2132
2133  Value *getIncomingValueForBlock(const BasicBlock *BB) const {
2134    int Idx = getBasicBlockIndex(BB);
2135    assert(Idx >= 0 && "Invalid basic block argument!");
2136    return getIncomingValue(Idx);
2137  }
2138
2139  /// hasConstantValue - If the specified PHI node always merges together the
2140  /// same value, return the value, otherwise return null.
2141  Value *hasConstantValue() const;
2142
2143  /// Methods for support type inquiry through isa, cast, and dyn_cast:
2144  static inline bool classof(const Instruction *I) {
2145    return I->getOpcode() == Instruction::PHI;
2146  }
2147  static inline bool classof(const Value *V) {
2148    return isa<Instruction>(V) && classof(cast<Instruction>(V));
2149  }
2150 private:
2151  void growOperands();
2152};
2153
2154template <>
2155struct OperandTraits<PHINode> : public HungoffOperandTraits<2> {
2156};
2157
2158DEFINE_TRANSPARENT_OPERAND_ACCESSORS(PHINode, Value)
2159
2160//===----------------------------------------------------------------------===//
2161//                           LandingPadInst Class
2162//===----------------------------------------------------------------------===//
2163
2164//===---------------------------------------------------------------------------
2165/// LandingPadInst - The landingpad instruction holds all of the information
2166/// necessary to generate correct exception handling. The landingpad instruction
2167/// cannot be moved from the top of a landing pad block, which itself is
2168/// accessible only from the 'unwind' edge of an invoke. This uses the
2169/// SubclassData field in Value to store whether or not the landingpad is a
2170/// cleanup.
2171///
2172class LandingPadInst : public Instruction {
2173  /// ReservedSpace - The number of operands actually allocated.  NumOperands is
2174  /// the number actually in use.
2175  unsigned ReservedSpace;
2176  LandingPadInst(const LandingPadInst &LP);
2177public:
2178  enum ClauseType { Catch, Filter };
2179private:
2180  void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION;
2181  // Allocate space for exactly zero operands.
2182  void *operator new(size_t s) {
2183    return User::operator new(s, 0);
2184  }
2185  void growOperands(unsigned Size);
2186  void init(Value *PersFn, unsigned NumReservedValues, const Twine &NameStr);
2187
2188  explicit LandingPadInst(Type *RetTy, Value *PersonalityFn,
2189                          unsigned NumReservedValues, const Twine &NameStr,
2190                          Instruction *InsertBefore);
2191  explicit LandingPadInst(Type *RetTy, Value *PersonalityFn,
2192                          unsigned NumReservedValues, const Twine &NameStr,
2193                          BasicBlock *InsertAtEnd);
2194protected:
2195  virtual LandingPadInst *clone_impl() const;
2196public:
2197  /// Constructors - NumReservedClauses is a hint for the number of incoming
2198  /// clauses that this landingpad will have (use 0 if you really have no idea).
2199  static LandingPadInst *Create(Type *RetTy, Value *PersonalityFn,
2200                                unsigned NumReservedClauses,
2201                                const Twine &NameStr = "",
2202                                Instruction *InsertBefore = 0);
2203  static LandingPadInst *Create(Type *RetTy, Value *PersonalityFn,
2204                                unsigned NumReservedClauses,
2205                                const Twine &NameStr, BasicBlock *InsertAtEnd);
2206  ~LandingPadInst();
2207
2208  /// Provide fast operand accessors
2209  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2210
2211  /// getPersonalityFn - Get the personality function associated with this
2212  /// landing pad.
2213  Value *getPersonalityFn() const { return getOperand(0); }
2214
2215  /// isCleanup - Return 'true' if this landingpad instruction is a
2216  /// cleanup. I.e., it should be run when unwinding even if its landing pad
2217  /// doesn't catch the exception.
2218  bool isCleanup() const { return getSubclassDataFromInstruction() & 1; }
2219
2220  /// setCleanup - Indicate that this landingpad instruction is a cleanup.
2221  void setCleanup(bool V) {
2222    setInstructionSubclassData((getSubclassDataFromInstruction() & ~1) |
2223                               (V ? 1 : 0));
2224  }
2225
2226  /// addClause - Add a catch or filter clause to the landing pad.
2227  void addClause(Value *ClauseVal);
2228
2229  /// getClause - Get the value of the clause at index Idx. Use isCatch/isFilter
2230  /// to determine what type of clause this is.
2231  Value *getClause(unsigned Idx) const { return OperandList[Idx + 1]; }
2232
2233  /// isCatch - Return 'true' if the clause and index Idx is a catch clause.
2234  bool isCatch(unsigned Idx) const {
2235    return !isa<ArrayType>(OperandList[Idx + 1]->getType());
2236  }
2237
2238  /// isFilter - Return 'true' if the clause and index Idx is a filter clause.
2239  bool isFilter(unsigned Idx) const {
2240    return isa<ArrayType>(OperandList[Idx + 1]->getType());
2241  }
2242
2243  /// getNumClauses - Get the number of clauses for this landing pad.
2244  unsigned getNumClauses() const { return getNumOperands() - 1; }
2245
2246  /// reserveClauses - Grow the size of the operand list to accommodate the new
2247  /// number of clauses.
2248  void reserveClauses(unsigned Size) { growOperands(Size); }
2249
2250  // Methods for support type inquiry through isa, cast, and dyn_cast:
2251  static inline bool classof(const Instruction *I) {
2252    return I->getOpcode() == Instruction::LandingPad;
2253  }
2254  static inline bool classof(const Value *V) {
2255    return isa<Instruction>(V) && classof(cast<Instruction>(V));
2256  }
2257};
2258
2259template <>
2260struct OperandTraits<LandingPadInst> : public HungoffOperandTraits<2> {
2261};
2262
2263DEFINE_TRANSPARENT_OPERAND_ACCESSORS(LandingPadInst, Value)
2264
2265//===----------------------------------------------------------------------===//
2266//                               ReturnInst Class
2267//===----------------------------------------------------------------------===//
2268
2269//===---------------------------------------------------------------------------
2270/// ReturnInst - Return a value (possibly void), from a function.  Execution
2271/// does not continue in this function any longer.
2272///
2273class ReturnInst : public TerminatorInst {
2274  ReturnInst(const ReturnInst &RI);
2275
2276private:
2277  // ReturnInst constructors:
2278  // ReturnInst()                  - 'ret void' instruction
2279  // ReturnInst(    null)          - 'ret void' instruction
2280  // ReturnInst(Value* X)          - 'ret X'    instruction
2281  // ReturnInst(    null, Inst *I) - 'ret void' instruction, insert before I
2282  // ReturnInst(Value* X, Inst *I) - 'ret X'    instruction, insert before I
2283  // ReturnInst(    null, BB *B)   - 'ret void' instruction, insert @ end of B
2284  // ReturnInst(Value* X, BB *B)   - 'ret X'    instruction, insert @ end of B
2285  //
2286  // NOTE: If the Value* passed is of type void then the constructor behaves as
2287  // if it was passed NULL.
2288  explicit ReturnInst(LLVMContext &C, Value *retVal = 0,
2289                      Instruction *InsertBefore = 0);
2290  ReturnInst(LLVMContext &C, Value *retVal, BasicBlock *InsertAtEnd);
2291  explicit ReturnInst(LLVMContext &C, BasicBlock *InsertAtEnd);
2292protected:
2293  virtual ReturnInst *clone_impl() const;
2294public:
2295  static ReturnInst* Create(LLVMContext &C, Value *retVal = 0,
2296                            Instruction *InsertBefore = 0) {
2297    return new(!!retVal) ReturnInst(C, retVal, InsertBefore);
2298  }
2299  static ReturnInst* Create(LLVMContext &C, Value *retVal,
2300                            BasicBlock *InsertAtEnd) {
2301    return new(!!retVal) ReturnInst(C, retVal, InsertAtEnd);
2302  }
2303  static ReturnInst* Create(LLVMContext &C, BasicBlock *InsertAtEnd) {
2304    return new(0) ReturnInst(C, InsertAtEnd);
2305  }
2306  virtual ~ReturnInst();
2307
2308  /// Provide fast operand accessors
2309  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2310
2311  /// Convenience accessor. Returns null if there is no return value.
2312  Value *getReturnValue() const {
2313    return getNumOperands() != 0 ? getOperand(0) : 0;
2314  }
2315
2316  unsigned getNumSuccessors() const { return 0; }
2317
2318  // Methods for support type inquiry through isa, cast, and dyn_cast:
2319  static inline bool classof(const Instruction *I) {
2320    return (I->getOpcode() == Instruction::Ret);
2321  }
2322  static inline bool classof(const Value *V) {
2323    return isa<Instruction>(V) && classof(cast<Instruction>(V));
2324  }
2325 private:
2326  virtual BasicBlock *getSuccessorV(unsigned idx) const;
2327  virtual unsigned getNumSuccessorsV() const;
2328  virtual void setSuccessorV(unsigned idx, BasicBlock *B);
2329};
2330
2331template <>
2332struct OperandTraits<ReturnInst> : public VariadicOperandTraits<ReturnInst> {
2333};
2334
2335DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ReturnInst, Value)
2336
2337//===----------------------------------------------------------------------===//
2338//                               BranchInst Class
2339//===----------------------------------------------------------------------===//
2340
2341//===---------------------------------------------------------------------------
2342/// BranchInst - Conditional or Unconditional Branch instruction.
2343///
2344class BranchInst : public TerminatorInst {
2345  /// Ops list - Branches are strange.  The operands are ordered:
2346  ///  [Cond, FalseDest,] TrueDest.  This makes some accessors faster because
2347  /// they don't have to check for cond/uncond branchness. These are mostly
2348  /// accessed relative from op_end().
2349  BranchInst(const BranchInst &BI);
2350  void AssertOK();
2351  // BranchInst constructors (where {B, T, F} are blocks, and C is a condition):
2352  // BranchInst(BB *B)                           - 'br B'
2353  // BranchInst(BB* T, BB *F, Value *C)          - 'br C, T, F'
2354  // BranchInst(BB* B, Inst *I)                  - 'br B'        insert before I
2355  // BranchInst(BB* T, BB *F, Value *C, Inst *I) - 'br C, T, F', insert before I
2356  // BranchInst(BB* B, BB *I)                    - 'br B'        insert at end
2357  // BranchInst(BB* T, BB *F, Value *C, BB *I)   - 'br C, T, F', insert at end
2358  explicit BranchInst(BasicBlock *IfTrue, Instruction *InsertBefore = 0);
2359  BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
2360             Instruction *InsertBefore = 0);
2361  BranchInst(BasicBlock *IfTrue, BasicBlock *InsertAtEnd);
2362  BranchInst(BasicBlock *IfTrue, BasicBlock *IfFalse, Value *Cond,
2363             BasicBlock *InsertAtEnd);
2364protected:
2365  virtual BranchInst *clone_impl() const;
2366public:
2367  static BranchInst *Create(BasicBlock *IfTrue, Instruction *InsertBefore = 0) {
2368    return new(1) BranchInst(IfTrue, InsertBefore);
2369  }
2370  static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *IfFalse,
2371                            Value *Cond, Instruction *InsertBefore = 0) {
2372    return new(3) BranchInst(IfTrue, IfFalse, Cond, InsertBefore);
2373  }
2374  static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *InsertAtEnd) {
2375    return new(1) BranchInst(IfTrue, InsertAtEnd);
2376  }
2377  static BranchInst *Create(BasicBlock *IfTrue, BasicBlock *IfFalse,
2378                            Value *Cond, BasicBlock *InsertAtEnd) {
2379    return new(3) BranchInst(IfTrue, IfFalse, Cond, InsertAtEnd);
2380  }
2381
2382  /// Transparently provide more efficient getOperand methods.
2383  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2384
2385  bool isUnconditional() const { return getNumOperands() == 1; }
2386  bool isConditional()   const { return getNumOperands() == 3; }
2387
2388  Value *getCondition() const {
2389    assert(isConditional() && "Cannot get condition of an uncond branch!");
2390    return Op<-3>();
2391  }
2392
2393  void setCondition(Value *V) {
2394    assert(isConditional() && "Cannot set condition of unconditional branch!");
2395    Op<-3>() = V;
2396  }
2397
2398  unsigned getNumSuccessors() const { return 1+isConditional(); }
2399
2400  BasicBlock *getSuccessor(unsigned i) const {
2401    assert(i < getNumSuccessors() && "Successor # out of range for Branch!");
2402    return cast_or_null<BasicBlock>((&Op<-1>() - i)->get());
2403  }
2404
2405  void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
2406    assert(idx < getNumSuccessors() && "Successor # out of range for Branch!");
2407    *(&Op<-1>() - idx) = (Value*)NewSucc;
2408  }
2409
2410  /// \brief Swap the successors of this branch instruction.
2411  ///
2412  /// Swaps the successors of the branch instruction. This also swaps any
2413  /// branch weight metadata associated with the instruction so that it
2414  /// continues to map correctly to each operand.
2415  void swapSuccessors();
2416
2417  // Methods for support type inquiry through isa, cast, and dyn_cast:
2418  static inline bool classof(const Instruction *I) {
2419    return (I->getOpcode() == Instruction::Br);
2420  }
2421  static inline bool classof(const Value *V) {
2422    return isa<Instruction>(V) && classof(cast<Instruction>(V));
2423  }
2424private:
2425  virtual BasicBlock *getSuccessorV(unsigned idx) const;
2426  virtual unsigned getNumSuccessorsV() const;
2427  virtual void setSuccessorV(unsigned idx, BasicBlock *B);
2428};
2429
2430template <>
2431struct OperandTraits<BranchInst> : public VariadicOperandTraits<BranchInst, 1> {
2432};
2433
2434DEFINE_TRANSPARENT_OPERAND_ACCESSORS(BranchInst, Value)
2435
2436//===----------------------------------------------------------------------===//
2437//                               SwitchInst Class
2438//===----------------------------------------------------------------------===//
2439
2440//===---------------------------------------------------------------------------
2441/// SwitchInst - Multiway switch
2442///
2443class SwitchInst : public TerminatorInst {
2444  void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION;
2445  unsigned ReservedSpace;
2446  // Operands format:
2447  // Operand[0]    = Value to switch on
2448  // Operand[1]    = Default basic block destination
2449  // Operand[2n  ] = Value to match
2450  // Operand[2n+1] = BasicBlock to go to on match
2451
2452  // Store case values separately from operands list. We needn't User-Use
2453  // concept here, since it is just a case value, it will always constant,
2454  // and case value couldn't reused with another instructions/values.
2455  // Additionally:
2456  // It allows us to use custom type for case values that is not inherited
2457  // from Value. Since case value is a complex type that implements
2458  // the subset of integers, we needn't extract sub-constants within
2459  // slow getAggregateElement method.
2460  // For case values we will use std::list to by two reasons:
2461  // 1. It allows to add/remove cases without whole collection reallocation.
2462  // 2. In most of cases we needn't random access.
2463  // Currently case values are also stored in Operands List, but it will moved
2464  // out in future commits.
2465  typedef std::list<IntegersSubset> Subsets;
2466  typedef Subsets::iterator SubsetsIt;
2467  typedef Subsets::const_iterator SubsetsConstIt;
2468
2469  Subsets TheSubsets;
2470
2471  SwitchInst(const SwitchInst &SI);
2472  void init(Value *Value, BasicBlock *Default, unsigned NumReserved);
2473  void growOperands();
2474  // allocate space for exactly zero operands
2475  void *operator new(size_t s) {
2476    return User::operator new(s, 0);
2477  }
2478  /// SwitchInst ctor - Create a new switch instruction, specifying a value to
2479  /// switch on and a default destination.  The number of additional cases can
2480  /// be specified here to make memory allocation more efficient.  This
2481  /// constructor can also autoinsert before another instruction.
2482  SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
2483             Instruction *InsertBefore);
2484
2485  /// SwitchInst ctor - Create a new switch instruction, specifying a value to
2486  /// switch on and a default destination.  The number of additional cases can
2487  /// be specified here to make memory allocation more efficient.  This
2488  /// constructor also autoinserts at the end of the specified BasicBlock.
2489  SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
2490             BasicBlock *InsertAtEnd);
2491protected:
2492  virtual SwitchInst *clone_impl() const;
2493public:
2494
2495  // FIXME: Currently there are a lot of unclean template parameters,
2496  // we need to make refactoring in future.
2497  // All these parameters are used to implement both iterator and const_iterator
2498  // without code duplication.
2499  // SwitchInstTy may be "const SwitchInst" or "SwitchInst"
2500  // ConstantIntTy may be "const ConstantInt" or "ConstantInt"
2501  // SubsetsItTy may be SubsetsConstIt or SubsetsIt
2502  // BasicBlockTy may be "const BasicBlock" or "BasicBlock"
2503  template <class SwitchInstTy, class ConstantIntTy,
2504            class SubsetsItTy, class BasicBlockTy>
2505    class CaseIteratorT;
2506
2507  typedef CaseIteratorT<const SwitchInst, const ConstantInt,
2508                        SubsetsConstIt, const BasicBlock> ConstCaseIt;
2509  class CaseIt;
2510
2511  // -2
2512  static const unsigned DefaultPseudoIndex = static_cast<unsigned>(~0L-1);
2513
2514  static SwitchInst *Create(Value *Value, BasicBlock *Default,
2515                            unsigned NumCases, Instruction *InsertBefore = 0) {
2516    return new SwitchInst(Value, Default, NumCases, InsertBefore);
2517  }
2518  static SwitchInst *Create(Value *Value, BasicBlock *Default,
2519                            unsigned NumCases, BasicBlock *InsertAtEnd) {
2520    return new SwitchInst(Value, Default, NumCases, InsertAtEnd);
2521  }
2522
2523  ~SwitchInst();
2524
2525  /// Provide fast operand accessors
2526  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2527
2528  // Accessor Methods for Switch stmt
2529  Value *getCondition() const { return getOperand(0); }
2530  void setCondition(Value *V) { setOperand(0, V); }
2531
2532  BasicBlock *getDefaultDest() const {
2533    return cast<BasicBlock>(getOperand(1));
2534  }
2535
2536  void setDefaultDest(BasicBlock *DefaultCase) {
2537    setOperand(1, reinterpret_cast<Value*>(DefaultCase));
2538  }
2539
2540  /// getNumCases - return the number of 'cases' in this switch instruction,
2541  /// except the default case
2542  unsigned getNumCases() const {
2543    return getNumOperands()/2 - 1;
2544  }
2545
2546  /// Returns a read/write iterator that points to the first
2547  /// case in SwitchInst.
2548  CaseIt case_begin() {
2549    return CaseIt(this, 0, TheSubsets.begin());
2550  }
2551  /// Returns a read-only iterator that points to the first
2552  /// case in the SwitchInst.
2553  ConstCaseIt case_begin() const {
2554    return ConstCaseIt(this, 0, TheSubsets.begin());
2555  }
2556
2557  /// Returns a read/write iterator that points one past the last
2558  /// in the SwitchInst.
2559  CaseIt case_end() {
2560    return CaseIt(this, getNumCases(), TheSubsets.end());
2561  }
2562  /// Returns a read-only iterator that points one past the last
2563  /// in the SwitchInst.
2564  ConstCaseIt case_end() const {
2565    return ConstCaseIt(this, getNumCases(), TheSubsets.end());
2566  }
2567  /// Returns an iterator that points to the default case.
2568  /// Note: this iterator allows to resolve successor only. Attempt
2569  /// to resolve case value causes an assertion.
2570  /// Also note, that increment and decrement also causes an assertion and
2571  /// makes iterator invalid.
2572  CaseIt case_default() {
2573    return CaseIt(this, DefaultPseudoIndex, TheSubsets.end());
2574  }
2575  ConstCaseIt case_default() const {
2576    return ConstCaseIt(this, DefaultPseudoIndex, TheSubsets.end());
2577  }
2578
2579  /// findCaseValue - Search all of the case values for the specified constant.
2580  /// If it is explicitly handled, return the case iterator of it, otherwise
2581  /// return default case iterator to indicate
2582  /// that it is handled by the default handler.
2583  CaseIt findCaseValue(const ConstantInt *C) {
2584    for (CaseIt i = case_begin(), e = case_end(); i != e; ++i)
2585      if (i.getCaseValueEx().isSatisfies(IntItem::fromConstantInt(C)))
2586        return i;
2587    return case_default();
2588  }
2589  ConstCaseIt findCaseValue(const ConstantInt *C) const {
2590    for (ConstCaseIt i = case_begin(), e = case_end(); i != e; ++i)
2591      if (i.getCaseValueEx().isSatisfies(IntItem::fromConstantInt(C)))
2592        return i;
2593    return case_default();
2594  }
2595
2596  /// findCaseDest - Finds the unique case value for a given successor. Returns
2597  /// null if the successor is not found, not unique, or is the default case.
2598  ConstantInt *findCaseDest(BasicBlock *BB) {
2599    if (BB == getDefaultDest()) return NULL;
2600
2601    ConstantInt *CI = NULL;
2602    for (CaseIt i = case_begin(), e = case_end(); i != e; ++i) {
2603      if (i.getCaseSuccessor() == BB) {
2604        if (CI) return NULL;   // Multiple cases lead to BB.
2605        else CI = i.getCaseValue();
2606      }
2607    }
2608    return CI;
2609  }
2610
2611  /// addCase - Add an entry to the switch instruction...
2612  /// @deprecated
2613  /// Note:
2614  /// This action invalidates case_end(). Old case_end() iterator will
2615  /// point to the added case.
2616  void addCase(ConstantInt *OnVal, BasicBlock *Dest);
2617
2618  /// addCase - Add an entry to the switch instruction.
2619  /// Note:
2620  /// This action invalidates case_end(). Old case_end() iterator will
2621  /// point to the added case.
2622  void addCase(IntegersSubset& OnVal, BasicBlock *Dest);
2623
2624  /// removeCase - This method removes the specified case and its successor
2625  /// from the switch instruction. Note that this operation may reorder the
2626  /// remaining cases at index idx and above.
2627  /// Note:
2628  /// This action invalidates iterators for all cases following the one removed,
2629  /// including the case_end() iterator.
2630  void removeCase(CaseIt& i);
2631
2632  unsigned getNumSuccessors() const { return getNumOperands()/2; }
2633  BasicBlock *getSuccessor(unsigned idx) const {
2634    assert(idx < getNumSuccessors() &&"Successor idx out of range for switch!");
2635    return cast<BasicBlock>(getOperand(idx*2+1));
2636  }
2637  void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
2638    assert(idx < getNumSuccessors() && "Successor # out of range for switch!");
2639    setOperand(idx*2+1, (Value*)NewSucc);
2640  }
2641
2642  uint16_t hash() const {
2643    uint32_t NumberOfCases = (uint32_t)getNumCases();
2644    uint16_t Hash = (0xFFFF & NumberOfCases) ^ (NumberOfCases >> 16);
2645    for (ConstCaseIt i = case_begin(), e = case_end();
2646         i != e; ++i) {
2647      uint32_t NumItems = (uint32_t)i.getCaseValueEx().getNumItems();
2648      Hash = (Hash << 1) ^ (0xFFFF & NumItems) ^ (NumItems >> 16);
2649    }
2650    return Hash;
2651  }
2652
2653  // Case iterators definition.
2654
2655  template <class SwitchInstTy, class ConstantIntTy,
2656            class SubsetsItTy, class BasicBlockTy>
2657  class CaseIteratorT {
2658  protected:
2659
2660    SwitchInstTy *SI;
2661    unsigned Index;
2662    SubsetsItTy SubsetIt;
2663
2664    /// Initializes case iterator for given SwitchInst and for given
2665    /// case number.
2666    friend class SwitchInst;
2667    CaseIteratorT(SwitchInstTy *SI, unsigned SuccessorIndex,
2668                  SubsetsItTy CaseValueIt) {
2669      this->SI = SI;
2670      Index = SuccessorIndex;
2671      this->SubsetIt = CaseValueIt;
2672    }
2673
2674  public:
2675    typedef typename SubsetsItTy::reference IntegersSubsetRef;
2676    typedef CaseIteratorT<SwitchInstTy, ConstantIntTy,
2677                          SubsetsItTy, BasicBlockTy> Self;
2678
2679    CaseIteratorT(SwitchInstTy *SI, unsigned CaseNum) {
2680          this->SI = SI;
2681          Index = CaseNum;
2682          SubsetIt = SI->TheSubsets.begin();
2683          std::advance(SubsetIt, CaseNum);
2684        }
2685
2686
2687    /// Initializes case iterator for given SwitchInst and for given
2688    /// TerminatorInst's successor index.
2689    static Self fromSuccessorIndex(SwitchInstTy *SI, unsigned SuccessorIndex) {
2690      assert(SuccessorIndex < SI->getNumSuccessors() &&
2691             "Successor index # out of range!");
2692      return SuccessorIndex != 0 ?
2693             Self(SI, SuccessorIndex - 1) :
2694             Self(SI, DefaultPseudoIndex);
2695    }
2696
2697    /// Resolves case value for current case.
2698    /// @deprecated
2699    ConstantIntTy *getCaseValue() {
2700      assert(Index < SI->getNumCases() && "Index out the number of cases.");
2701      IntegersSubsetRef CaseRanges = *SubsetIt;
2702
2703      // FIXME: Currently we work with ConstantInt based cases.
2704      // So return CaseValue as ConstantInt.
2705      return CaseRanges.getSingleNumber(0).toConstantInt();
2706    }
2707
2708    /// Resolves case value for current case.
2709    IntegersSubsetRef getCaseValueEx() {
2710      assert(Index < SI->getNumCases() && "Index out the number of cases.");
2711      return *SubsetIt;
2712    }
2713
2714    /// Resolves successor for current case.
2715    BasicBlockTy *getCaseSuccessor() {
2716      assert((Index < SI->getNumCases() ||
2717              Index == DefaultPseudoIndex) &&
2718             "Index out the number of cases.");
2719      return SI->getSuccessor(getSuccessorIndex());
2720    }
2721
2722    /// Returns number of current case.
2723    unsigned getCaseIndex() const { return Index; }
2724
2725    /// Returns TerminatorInst's successor index for current case successor.
2726    unsigned getSuccessorIndex() const {
2727      assert((Index == DefaultPseudoIndex || Index < SI->getNumCases()) &&
2728             "Index out the number of cases.");
2729      return Index != DefaultPseudoIndex ? Index + 1 : 0;
2730    }
2731
2732    Self operator++() {
2733      // Check index correctness after increment.
2734      // Note: Index == getNumCases() means end().
2735      assert(Index+1 <= SI->getNumCases() && "Index out the number of cases.");
2736      ++Index;
2737      if (Index == 0)
2738        SubsetIt = SI->TheSubsets.begin();
2739      else
2740        ++SubsetIt;
2741      return *this;
2742    }
2743    Self operator++(int) {
2744      Self tmp = *this;
2745      ++(*this);
2746      return tmp;
2747    }
2748    Self operator--() {
2749      // Check index correctness after decrement.
2750      // Note: Index == getNumCases() means end().
2751      // Also allow "-1" iterator here. That will became valid after ++.
2752      unsigned NumCases = SI->getNumCases();
2753      assert((Index == 0 || Index-1 <= NumCases) &&
2754             "Index out the number of cases.");
2755      --Index;
2756      if (Index == NumCases) {
2757        SubsetIt = SI->TheSubsets.end();
2758        return *this;
2759      }
2760
2761      if (Index != -1U)
2762        --SubsetIt;
2763
2764      return *this;
2765    }
2766    Self operator--(int) {
2767      Self tmp = *this;
2768      --(*this);
2769      return tmp;
2770    }
2771    bool operator==(const Self& RHS) const {
2772      assert(RHS.SI == SI && "Incompatible operators.");
2773      return RHS.Index == Index;
2774    }
2775    bool operator!=(const Self& RHS) const {
2776      assert(RHS.SI == SI && "Incompatible operators.");
2777      return RHS.Index != Index;
2778    }
2779  };
2780
2781  class CaseIt : public CaseIteratorT<SwitchInst, ConstantInt,
2782                                      SubsetsIt, BasicBlock> {
2783    typedef CaseIteratorT<SwitchInst, ConstantInt, SubsetsIt, BasicBlock>
2784      ParentTy;
2785
2786  protected:
2787    friend class SwitchInst;
2788    CaseIt(SwitchInst *SI, unsigned CaseNum, SubsetsIt SubsetIt) :
2789      ParentTy(SI, CaseNum, SubsetIt) {}
2790
2791    void updateCaseValueOperand(IntegersSubset& V) {
2792      SI->setOperand(2 + Index*2, reinterpret_cast<Value*>((Constant*)V));
2793    }
2794
2795  public:
2796
2797    CaseIt(SwitchInst *SI, unsigned CaseNum) : ParentTy(SI, CaseNum) {}
2798
2799    CaseIt(const ParentTy& Src) : ParentTy(Src) {}
2800
2801    /// Sets the new value for current case.
2802    /// @deprecated.
2803    void setValue(ConstantInt *V) {
2804      assert(Index < SI->getNumCases() && "Index out the number of cases.");
2805      IntegersSubsetToBB Mapping;
2806      // FIXME: Currently we work with ConstantInt based cases.
2807      // So inititalize IntItem container directly from ConstantInt.
2808      Mapping.add(IntItem::fromConstantInt(V));
2809      *SubsetIt = Mapping.getCase();
2810      updateCaseValueOperand(*SubsetIt);
2811    }
2812
2813    /// Sets the new value for current case.
2814    void setValueEx(IntegersSubset& V) {
2815      assert(Index < SI->getNumCases() && "Index out the number of cases.");
2816      *SubsetIt = V;
2817      updateCaseValueOperand(*SubsetIt);
2818    }
2819
2820    /// Sets the new successor for current case.
2821    void setSuccessor(BasicBlock *S) {
2822      SI->setSuccessor(getSuccessorIndex(), S);
2823    }
2824  };
2825
2826  // Methods for support type inquiry through isa, cast, and dyn_cast:
2827
2828  static inline bool classof(const Instruction *I) {
2829    return I->getOpcode() == Instruction::Switch;
2830  }
2831  static inline bool classof(const Value *V) {
2832    return isa<Instruction>(V) && classof(cast<Instruction>(V));
2833  }
2834private:
2835  virtual BasicBlock *getSuccessorV(unsigned idx) const;
2836  virtual unsigned getNumSuccessorsV() const;
2837  virtual void setSuccessorV(unsigned idx, BasicBlock *B);
2838};
2839
2840template <>
2841struct OperandTraits<SwitchInst> : public HungoffOperandTraits<2> {
2842};
2843
2844DEFINE_TRANSPARENT_OPERAND_ACCESSORS(SwitchInst, Value)
2845
2846
2847//===----------------------------------------------------------------------===//
2848//                             IndirectBrInst Class
2849//===----------------------------------------------------------------------===//
2850
2851//===---------------------------------------------------------------------------
2852/// IndirectBrInst - Indirect Branch Instruction.
2853///
2854class IndirectBrInst : public TerminatorInst {
2855  void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION;
2856  unsigned ReservedSpace;
2857  // Operand[0]    = Value to switch on
2858  // Operand[1]    = Default basic block destination
2859  // Operand[2n  ] = Value to match
2860  // Operand[2n+1] = BasicBlock to go to on match
2861  IndirectBrInst(const IndirectBrInst &IBI);
2862  void init(Value *Address, unsigned NumDests);
2863  void growOperands();
2864  // allocate space for exactly zero operands
2865  void *operator new(size_t s) {
2866    return User::operator new(s, 0);
2867  }
2868  /// IndirectBrInst ctor - Create a new indirectbr instruction, specifying an
2869  /// Address to jump to.  The number of expected destinations can be specified
2870  /// here to make memory allocation more efficient.  This constructor can also
2871  /// autoinsert before another instruction.
2872  IndirectBrInst(Value *Address, unsigned NumDests, Instruction *InsertBefore);
2873
2874  /// IndirectBrInst ctor - Create a new indirectbr instruction, specifying an
2875  /// Address to jump to.  The number of expected destinations can be specified
2876  /// here to make memory allocation more efficient.  This constructor also
2877  /// autoinserts at the end of the specified BasicBlock.
2878  IndirectBrInst(Value *Address, unsigned NumDests, BasicBlock *InsertAtEnd);
2879protected:
2880  virtual IndirectBrInst *clone_impl() const;
2881public:
2882  static IndirectBrInst *Create(Value *Address, unsigned NumDests,
2883                                Instruction *InsertBefore = 0) {
2884    return new IndirectBrInst(Address, NumDests, InsertBefore);
2885  }
2886  static IndirectBrInst *Create(Value *Address, unsigned NumDests,
2887                                BasicBlock *InsertAtEnd) {
2888    return new IndirectBrInst(Address, NumDests, InsertAtEnd);
2889  }
2890  ~IndirectBrInst();
2891
2892  /// Provide fast operand accessors.
2893  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2894
2895  // Accessor Methods for IndirectBrInst instruction.
2896  Value *getAddress() { return getOperand(0); }
2897  const Value *getAddress() const { return getOperand(0); }
2898  void setAddress(Value *V) { setOperand(0, V); }
2899
2900
2901  /// getNumDestinations - return the number of possible destinations in this
2902  /// indirectbr instruction.
2903  unsigned getNumDestinations() const { return getNumOperands()-1; }
2904
2905  /// getDestination - Return the specified destination.
2906  BasicBlock *getDestination(unsigned i) { return getSuccessor(i); }
2907  const BasicBlock *getDestination(unsigned i) const { return getSuccessor(i); }
2908
2909  /// addDestination - Add a destination.
2910  ///
2911  void addDestination(BasicBlock *Dest);
2912
2913  /// removeDestination - This method removes the specified successor from the
2914  /// indirectbr instruction.
2915  void removeDestination(unsigned i);
2916
2917  unsigned getNumSuccessors() const { return getNumOperands()-1; }
2918  BasicBlock *getSuccessor(unsigned i) const {
2919    return cast<BasicBlock>(getOperand(i+1));
2920  }
2921  void setSuccessor(unsigned i, BasicBlock *NewSucc) {
2922    setOperand(i+1, (Value*)NewSucc);
2923  }
2924
2925  // Methods for support type inquiry through isa, cast, and dyn_cast:
2926  static inline bool classof(const Instruction *I) {
2927    return I->getOpcode() == Instruction::IndirectBr;
2928  }
2929  static inline bool classof(const Value *V) {
2930    return isa<Instruction>(V) && classof(cast<Instruction>(V));
2931  }
2932private:
2933  virtual BasicBlock *getSuccessorV(unsigned idx) const;
2934  virtual unsigned getNumSuccessorsV() const;
2935  virtual void setSuccessorV(unsigned idx, BasicBlock *B);
2936};
2937
2938template <>
2939struct OperandTraits<IndirectBrInst> : public HungoffOperandTraits<1> {
2940};
2941
2942DEFINE_TRANSPARENT_OPERAND_ACCESSORS(IndirectBrInst, Value)
2943
2944
2945//===----------------------------------------------------------------------===//
2946//                               InvokeInst Class
2947//===----------------------------------------------------------------------===//
2948
2949/// InvokeInst - Invoke instruction.  The SubclassData field is used to hold the
2950/// calling convention of the call.
2951///
2952class InvokeInst : public TerminatorInst {
2953  AttributeSet AttributeList;
2954  InvokeInst(const InvokeInst &BI);
2955  void init(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
2956            ArrayRef<Value *> Args, const Twine &NameStr);
2957
2958  /// Construct an InvokeInst given a range of arguments.
2959  ///
2960  /// \brief Construct an InvokeInst from a range of arguments
2961  inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
2962                    ArrayRef<Value *> Args, unsigned Values,
2963                    const Twine &NameStr, Instruction *InsertBefore);
2964
2965  /// Construct an InvokeInst given a range of arguments.
2966  ///
2967  /// \brief Construct an InvokeInst from a range of arguments
2968  inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
2969                    ArrayRef<Value *> Args, unsigned Values,
2970                    const Twine &NameStr, BasicBlock *InsertAtEnd);
2971protected:
2972  virtual InvokeInst *clone_impl() const;
2973public:
2974  static InvokeInst *Create(Value *Func,
2975                            BasicBlock *IfNormal, BasicBlock *IfException,
2976                            ArrayRef<Value *> Args, const Twine &NameStr = "",
2977                            Instruction *InsertBefore = 0) {
2978    unsigned Values = unsigned(Args.size()) + 3;
2979    return new(Values) InvokeInst(Func, IfNormal, IfException, Args,
2980                                  Values, NameStr, InsertBefore);
2981  }
2982  static InvokeInst *Create(Value *Func,
2983                            BasicBlock *IfNormal, BasicBlock *IfException,
2984                            ArrayRef<Value *> Args, const Twine &NameStr,
2985                            BasicBlock *InsertAtEnd) {
2986    unsigned Values = unsigned(Args.size()) + 3;
2987    return new(Values) InvokeInst(Func, IfNormal, IfException, Args,
2988                                  Values, NameStr, InsertAtEnd);
2989  }
2990
2991  /// Provide fast operand accessors
2992  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2993
2994  /// getNumArgOperands - Return the number of invoke arguments.
2995  ///
2996  unsigned getNumArgOperands() const { return getNumOperands() - 3; }
2997
2998  /// getArgOperand/setArgOperand - Return/set the i-th invoke argument.
2999  ///
3000  Value *getArgOperand(unsigned i) const { return getOperand(i); }
3001  void setArgOperand(unsigned i, Value *v) { setOperand(i, v); }
3002
3003  /// getCallingConv/setCallingConv - Get or set the calling convention of this
3004  /// function call.
3005  CallingConv::ID getCallingConv() const {
3006    return static_cast<CallingConv::ID>(getSubclassDataFromInstruction());
3007  }
3008  void setCallingConv(CallingConv::ID CC) {
3009    setInstructionSubclassData(static_cast<unsigned>(CC));
3010  }
3011
3012  /// getAttributes - Return the parameter attributes for this invoke.
3013  ///
3014  const AttributeSet &getAttributes() const { return AttributeList; }
3015
3016  /// setAttributes - Set the parameter attributes for this invoke.
3017  ///
3018  void setAttributes(const AttributeSet &Attrs) { AttributeList = Attrs; }
3019
3020  /// addAttribute - adds the attribute to the list of attributes.
3021  void addAttribute(unsigned i, Attribute::AttrKind attr);
3022
3023  /// removeAttribute - removes the attribute from the list of attributes.
3024  void removeAttribute(unsigned i, Attribute attr);
3025
3026  /// \brief Determine whether this call has the NoAlias attribute.
3027  bool hasFnAttr(Attribute::AttrKind A) const;
3028
3029  /// \brief Determine whether the call or the callee has the given attributes.
3030  bool paramHasAttr(unsigned i, Attribute::AttrKind A) const;
3031
3032  /// \brief Extract the alignment for a call or parameter (0=unknown).
3033  unsigned getParamAlignment(unsigned i) const {
3034    return AttributeList.getParamAlignment(i);
3035  }
3036
3037  /// \brief Return true if the call should not be inlined.
3038  bool isNoInline() const { return hasFnAttr(Attribute::NoInline); }
3039  void setIsNoInline() {
3040    addAttribute(AttributeSet::FunctionIndex, Attribute::NoInline);
3041  }
3042
3043  /// \brief Determine if the call does not access memory.
3044  bool doesNotAccessMemory() const {
3045    return hasFnAttr(Attribute::ReadNone);
3046  }
3047  void setDoesNotAccessMemory() {
3048    addAttribute(AttributeSet::FunctionIndex, Attribute::ReadNone);
3049  }
3050
3051  /// \brief Determine if the call does not access or only reads memory.
3052  bool onlyReadsMemory() const {
3053    return doesNotAccessMemory() || hasFnAttr(Attribute::ReadOnly);
3054  }
3055  void setOnlyReadsMemory() {
3056    addAttribute(AttributeSet::FunctionIndex, Attribute::ReadOnly);
3057  }
3058
3059  /// \brief Determine if the call cannot return.
3060  bool doesNotReturn() const { return hasFnAttr(Attribute::NoReturn); }
3061  void setDoesNotReturn() {
3062    addAttribute(AttributeSet::FunctionIndex, Attribute::NoReturn);
3063  }
3064
3065  /// \brief Determine if the call cannot unwind.
3066  bool doesNotThrow() const { return hasFnAttr(Attribute::NoUnwind); }
3067  void setDoesNotThrow() {
3068    addAttribute(AttributeSet::FunctionIndex, Attribute::NoUnwind);
3069  }
3070
3071  /// \brief Determine if the call returns a structure through first
3072  /// pointer argument.
3073  bool hasStructRetAttr() const {
3074    // Be friendly and also check the callee.
3075    return paramHasAttr(1, Attribute::StructRet);
3076  }
3077
3078  /// \brief Determine if any call argument is an aggregate passed by value.
3079  bool hasByValArgument() const {
3080    return AttributeList.hasAttrSomewhere(Attribute::ByVal);
3081  }
3082
3083  /// getCalledFunction - Return the function called, or null if this is an
3084  /// indirect function invocation.
3085  ///
3086  Function *getCalledFunction() const {
3087    return dyn_cast<Function>(Op<-3>());
3088  }
3089
3090  /// getCalledValue - Get a pointer to the function that is invoked by this
3091  /// instruction
3092  const Value *getCalledValue() const { return Op<-3>(); }
3093        Value *getCalledValue()       { return Op<-3>(); }
3094
3095  /// setCalledFunction - Set the function called.
3096  void setCalledFunction(Value* Fn) {
3097    Op<-3>() = Fn;
3098  }
3099
3100  // get*Dest - Return the destination basic blocks...
3101  BasicBlock *getNormalDest() const {
3102    return cast<BasicBlock>(Op<-2>());
3103  }
3104  BasicBlock *getUnwindDest() const {
3105    return cast<BasicBlock>(Op<-1>());
3106  }
3107  void setNormalDest(BasicBlock *B) {
3108    Op<-2>() = reinterpret_cast<Value*>(B);
3109  }
3110  void setUnwindDest(BasicBlock *B) {
3111    Op<-1>() = reinterpret_cast<Value*>(B);
3112  }
3113
3114  /// getLandingPadInst - Get the landingpad instruction from the landing pad
3115  /// block (the unwind destination).
3116  LandingPadInst *getLandingPadInst() const;
3117
3118  BasicBlock *getSuccessor(unsigned i) const {
3119    assert(i < 2 && "Successor # out of range for invoke!");
3120    return i == 0 ? getNormalDest() : getUnwindDest();
3121  }
3122
3123  void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
3124    assert(idx < 2 && "Successor # out of range for invoke!");
3125    *(&Op<-2>() + idx) = reinterpret_cast<Value*>(NewSucc);
3126  }
3127
3128  unsigned getNumSuccessors() const { return 2; }
3129
3130  // Methods for support type inquiry through isa, cast, and dyn_cast:
3131  static inline bool classof(const Instruction *I) {
3132    return (I->getOpcode() == Instruction::Invoke);
3133  }
3134  static inline bool classof(const Value *V) {
3135    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3136  }
3137
3138private:
3139  virtual BasicBlock *getSuccessorV(unsigned idx) const;
3140  virtual unsigned getNumSuccessorsV() const;
3141  virtual void setSuccessorV(unsigned idx, BasicBlock *B);
3142
3143  // Shadow Instruction::setInstructionSubclassData with a private forwarding
3144  // method so that subclasses cannot accidentally use it.
3145  void setInstructionSubclassData(unsigned short D) {
3146    Instruction::setInstructionSubclassData(D);
3147  }
3148};
3149
3150template <>
3151struct OperandTraits<InvokeInst> : public VariadicOperandTraits<InvokeInst, 3> {
3152};
3153
3154InvokeInst::InvokeInst(Value *Func,
3155                       BasicBlock *IfNormal, BasicBlock *IfException,
3156                       ArrayRef<Value *> Args, unsigned Values,
3157                       const Twine &NameStr, Instruction *InsertBefore)
3158  : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType())
3159                                      ->getElementType())->getReturnType(),
3160                   Instruction::Invoke,
3161                   OperandTraits<InvokeInst>::op_end(this) - Values,
3162                   Values, InsertBefore) {
3163  init(Func, IfNormal, IfException, Args, NameStr);
3164}
3165InvokeInst::InvokeInst(Value *Func,
3166                       BasicBlock *IfNormal, BasicBlock *IfException,
3167                       ArrayRef<Value *> Args, unsigned Values,
3168                       const Twine &NameStr, BasicBlock *InsertAtEnd)
3169  : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType())
3170                                      ->getElementType())->getReturnType(),
3171                   Instruction::Invoke,
3172                   OperandTraits<InvokeInst>::op_end(this) - Values,
3173                   Values, InsertAtEnd) {
3174  init(Func, IfNormal, IfException, Args, NameStr);
3175}
3176
3177DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InvokeInst, Value)
3178
3179//===----------------------------------------------------------------------===//
3180//                              ResumeInst Class
3181//===----------------------------------------------------------------------===//
3182
3183//===---------------------------------------------------------------------------
3184/// ResumeInst - Resume the propagation of an exception.
3185///
3186class ResumeInst : public TerminatorInst {
3187  ResumeInst(const ResumeInst &RI);
3188
3189  explicit ResumeInst(Value *Exn, Instruction *InsertBefore=0);
3190  ResumeInst(Value *Exn, BasicBlock *InsertAtEnd);
3191protected:
3192  virtual ResumeInst *clone_impl() const;
3193public:
3194  static ResumeInst *Create(Value *Exn, Instruction *InsertBefore = 0) {
3195    return new(1) ResumeInst(Exn, InsertBefore);
3196  }
3197  static ResumeInst *Create(Value *Exn, BasicBlock *InsertAtEnd) {
3198    return new(1) ResumeInst(Exn, InsertAtEnd);
3199  }
3200
3201  /// Provide fast operand accessors
3202  DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
3203
3204  /// Convenience accessor.
3205  Value *getValue() const { return Op<0>(); }
3206
3207  unsigned getNumSuccessors() const { return 0; }
3208
3209  // Methods for support type inquiry through isa, cast, and dyn_cast:
3210  static inline bool classof(const Instruction *I) {
3211    return I->getOpcode() == Instruction::Resume;
3212  }
3213  static inline bool classof(const Value *V) {
3214    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3215  }
3216private:
3217  virtual BasicBlock *getSuccessorV(unsigned idx) const;
3218  virtual unsigned getNumSuccessorsV() const;
3219  virtual void setSuccessorV(unsigned idx, BasicBlock *B);
3220};
3221
3222template <>
3223struct OperandTraits<ResumeInst> :
3224    public FixedNumOperandTraits<ResumeInst, 1> {
3225};
3226
3227DEFINE_TRANSPARENT_OPERAND_ACCESSORS(ResumeInst, Value)
3228
3229//===----------------------------------------------------------------------===//
3230//                           UnreachableInst Class
3231//===----------------------------------------------------------------------===//
3232
3233//===---------------------------------------------------------------------------
3234/// UnreachableInst - This function has undefined behavior.  In particular, the
3235/// presence of this instruction indicates some higher level knowledge that the
3236/// end of the block cannot be reached.
3237///
3238class UnreachableInst : public TerminatorInst {
3239  void *operator new(size_t, unsigned) LLVM_DELETED_FUNCTION;
3240protected:
3241  virtual UnreachableInst *clone_impl() const;
3242
3243public:
3244  // allocate space for exactly zero operands
3245  void *operator new(size_t s) {
3246    return User::operator new(s, 0);
3247  }
3248  explicit UnreachableInst(LLVMContext &C, Instruction *InsertBefore = 0);
3249  explicit UnreachableInst(LLVMContext &C, BasicBlock *InsertAtEnd);
3250
3251  unsigned getNumSuccessors() const { return 0; }
3252
3253  // Methods for support type inquiry through isa, cast, and dyn_cast:
3254  static inline bool classof(const Instruction *I) {
3255    return I->getOpcode() == Instruction::Unreachable;
3256  }
3257  static inline bool classof(const Value *V) {
3258    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3259  }
3260private:
3261  virtual BasicBlock *getSuccessorV(unsigned idx) const;
3262  virtual unsigned getNumSuccessorsV() const;
3263  virtual void setSuccessorV(unsigned idx, BasicBlock *B);
3264};
3265
3266//===----------------------------------------------------------------------===//
3267//                                 TruncInst Class
3268//===----------------------------------------------------------------------===//
3269
3270/// \brief This class represents a truncation of integer types.
3271class TruncInst : public CastInst {
3272protected:
3273  /// \brief Clone an identical TruncInst
3274  virtual TruncInst *clone_impl() const;
3275
3276public:
3277  /// \brief Constructor with insert-before-instruction semantics
3278  TruncInst(
3279    Value *S,                     ///< The value to be truncated
3280    Type *Ty,               ///< The (smaller) type to truncate to
3281    const Twine &NameStr = "",    ///< A name for the new instruction
3282    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3283  );
3284
3285  /// \brief Constructor with insert-at-end-of-block semantics
3286  TruncInst(
3287    Value *S,                     ///< The value to be truncated
3288    Type *Ty,               ///< The (smaller) type to truncate to
3289    const Twine &NameStr,         ///< A name for the new instruction
3290    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3291  );
3292
3293  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
3294  static inline bool classof(const Instruction *I) {
3295    return I->getOpcode() == Trunc;
3296  }
3297  static inline bool classof(const Value *V) {
3298    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3299  }
3300};
3301
3302//===----------------------------------------------------------------------===//
3303//                                 ZExtInst Class
3304//===----------------------------------------------------------------------===//
3305
3306/// \brief This class represents zero extension of integer types.
3307class ZExtInst : public CastInst {
3308protected:
3309  /// \brief Clone an identical ZExtInst
3310  virtual ZExtInst *clone_impl() const;
3311
3312public:
3313  /// \brief Constructor with insert-before-instruction semantics
3314  ZExtInst(
3315    Value *S,                     ///< The value to be zero extended
3316    Type *Ty,               ///< The type to zero extend to
3317    const Twine &NameStr = "",    ///< A name for the new instruction
3318    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3319  );
3320
3321  /// \brief Constructor with insert-at-end semantics.
3322  ZExtInst(
3323    Value *S,                     ///< The value to be zero extended
3324    Type *Ty,               ///< The type to zero extend to
3325    const Twine &NameStr,         ///< A name for the new instruction
3326    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3327  );
3328
3329  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
3330  static inline bool classof(const Instruction *I) {
3331    return I->getOpcode() == ZExt;
3332  }
3333  static inline bool classof(const Value *V) {
3334    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3335  }
3336};
3337
3338//===----------------------------------------------------------------------===//
3339//                                 SExtInst Class
3340//===----------------------------------------------------------------------===//
3341
3342/// \brief This class represents a sign extension of integer types.
3343class SExtInst : public CastInst {
3344protected:
3345  /// \brief Clone an identical SExtInst
3346  virtual SExtInst *clone_impl() const;
3347
3348public:
3349  /// \brief Constructor with insert-before-instruction semantics
3350  SExtInst(
3351    Value *S,                     ///< The value to be sign extended
3352    Type *Ty,               ///< The type to sign extend to
3353    const Twine &NameStr = "",    ///< A name for the new instruction
3354    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3355  );
3356
3357  /// \brief Constructor with insert-at-end-of-block semantics
3358  SExtInst(
3359    Value *S,                     ///< The value to be sign extended
3360    Type *Ty,               ///< The type to sign extend to
3361    const Twine &NameStr,         ///< A name for the new instruction
3362    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3363  );
3364
3365  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
3366  static inline bool classof(const Instruction *I) {
3367    return I->getOpcode() == SExt;
3368  }
3369  static inline bool classof(const Value *V) {
3370    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3371  }
3372};
3373
3374//===----------------------------------------------------------------------===//
3375//                                 FPTruncInst Class
3376//===----------------------------------------------------------------------===//
3377
3378/// \brief This class represents a truncation of floating point types.
3379class FPTruncInst : public CastInst {
3380protected:
3381  /// \brief Clone an identical FPTruncInst
3382  virtual FPTruncInst *clone_impl() const;
3383
3384public:
3385  /// \brief Constructor with insert-before-instruction semantics
3386  FPTruncInst(
3387    Value *S,                     ///< The value to be truncated
3388    Type *Ty,               ///< The type to truncate to
3389    const Twine &NameStr = "",    ///< A name for the new instruction
3390    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3391  );
3392
3393  /// \brief Constructor with insert-before-instruction semantics
3394  FPTruncInst(
3395    Value *S,                     ///< The value to be truncated
3396    Type *Ty,               ///< The type to truncate to
3397    const Twine &NameStr,         ///< A name for the new instruction
3398    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3399  );
3400
3401  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
3402  static inline bool classof(const Instruction *I) {
3403    return I->getOpcode() == FPTrunc;
3404  }
3405  static inline bool classof(const Value *V) {
3406    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3407  }
3408};
3409
3410//===----------------------------------------------------------------------===//
3411//                                 FPExtInst Class
3412//===----------------------------------------------------------------------===//
3413
3414/// \brief This class represents an extension of floating point types.
3415class FPExtInst : public CastInst {
3416protected:
3417  /// \brief Clone an identical FPExtInst
3418  virtual FPExtInst *clone_impl() const;
3419
3420public:
3421  /// \brief Constructor with insert-before-instruction semantics
3422  FPExtInst(
3423    Value *S,                     ///< The value to be extended
3424    Type *Ty,               ///< The type to extend to
3425    const Twine &NameStr = "",    ///< A name for the new instruction
3426    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3427  );
3428
3429  /// \brief Constructor with insert-at-end-of-block semantics
3430  FPExtInst(
3431    Value *S,                     ///< The value to be extended
3432    Type *Ty,               ///< The type to extend to
3433    const Twine &NameStr,         ///< A name for the new instruction
3434    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3435  );
3436
3437  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
3438  static inline bool classof(const Instruction *I) {
3439    return I->getOpcode() == FPExt;
3440  }
3441  static inline bool classof(const Value *V) {
3442    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3443  }
3444};
3445
3446//===----------------------------------------------------------------------===//
3447//                                 UIToFPInst Class
3448//===----------------------------------------------------------------------===//
3449
3450/// \brief This class represents a cast unsigned integer to floating point.
3451class UIToFPInst : public CastInst {
3452protected:
3453  /// \brief Clone an identical UIToFPInst
3454  virtual UIToFPInst *clone_impl() const;
3455
3456public:
3457  /// \brief Constructor with insert-before-instruction semantics
3458  UIToFPInst(
3459    Value *S,                     ///< The value to be converted
3460    Type *Ty,               ///< The type to convert to
3461    const Twine &NameStr = "",    ///< A name for the new instruction
3462    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3463  );
3464
3465  /// \brief Constructor with insert-at-end-of-block semantics
3466  UIToFPInst(
3467    Value *S,                     ///< The value to be converted
3468    Type *Ty,               ///< The type to convert to
3469    const Twine &NameStr,         ///< A name for the new instruction
3470    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3471  );
3472
3473  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
3474  static inline bool classof(const Instruction *I) {
3475    return I->getOpcode() == UIToFP;
3476  }
3477  static inline bool classof(const Value *V) {
3478    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3479  }
3480};
3481
3482//===----------------------------------------------------------------------===//
3483//                                 SIToFPInst Class
3484//===----------------------------------------------------------------------===//
3485
3486/// \brief This class represents a cast from signed integer to floating point.
3487class SIToFPInst : public CastInst {
3488protected:
3489  /// \brief Clone an identical SIToFPInst
3490  virtual SIToFPInst *clone_impl() const;
3491
3492public:
3493  /// \brief Constructor with insert-before-instruction semantics
3494  SIToFPInst(
3495    Value *S,                     ///< The value to be converted
3496    Type *Ty,               ///< The type to convert to
3497    const Twine &NameStr = "",    ///< A name for the new instruction
3498    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3499  );
3500
3501  /// \brief Constructor with insert-at-end-of-block semantics
3502  SIToFPInst(
3503    Value *S,                     ///< The value to be converted
3504    Type *Ty,               ///< The type to convert to
3505    const Twine &NameStr,         ///< A name for the new instruction
3506    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3507  );
3508
3509  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
3510  static inline bool classof(const Instruction *I) {
3511    return I->getOpcode() == SIToFP;
3512  }
3513  static inline bool classof(const Value *V) {
3514    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3515  }
3516};
3517
3518//===----------------------------------------------------------------------===//
3519//                                 FPToUIInst Class
3520//===----------------------------------------------------------------------===//
3521
3522/// \brief This class represents a cast from floating point to unsigned integer
3523class FPToUIInst  : public CastInst {
3524protected:
3525  /// \brief Clone an identical FPToUIInst
3526  virtual FPToUIInst *clone_impl() const;
3527
3528public:
3529  /// \brief Constructor with insert-before-instruction semantics
3530  FPToUIInst(
3531    Value *S,                     ///< The value to be converted
3532    Type *Ty,               ///< The type to convert to
3533    const Twine &NameStr = "",    ///< A name for the new instruction
3534    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3535  );
3536
3537  /// \brief Constructor with insert-at-end-of-block semantics
3538  FPToUIInst(
3539    Value *S,                     ///< The value to be converted
3540    Type *Ty,               ///< The type to convert to
3541    const Twine &NameStr,         ///< A name for the new instruction
3542    BasicBlock *InsertAtEnd       ///< Where to insert the new instruction
3543  );
3544
3545  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
3546  static inline bool classof(const Instruction *I) {
3547    return I->getOpcode() == FPToUI;
3548  }
3549  static inline bool classof(const Value *V) {
3550    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3551  }
3552};
3553
3554//===----------------------------------------------------------------------===//
3555//                                 FPToSIInst Class
3556//===----------------------------------------------------------------------===//
3557
3558/// \brief This class represents a cast from floating point to signed integer.
3559class FPToSIInst  : public CastInst {
3560protected:
3561  /// \brief Clone an identical FPToSIInst
3562  virtual FPToSIInst *clone_impl() const;
3563
3564public:
3565  /// \brief Constructor with insert-before-instruction semantics
3566  FPToSIInst(
3567    Value *S,                     ///< The value to be converted
3568    Type *Ty,               ///< The type to convert to
3569    const Twine &NameStr = "",    ///< A name for the new instruction
3570    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3571  );
3572
3573  /// \brief Constructor with insert-at-end-of-block semantics
3574  FPToSIInst(
3575    Value *S,                     ///< The value to be converted
3576    Type *Ty,               ///< The type to convert to
3577    const Twine &NameStr,         ///< A name for the new instruction
3578    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3579  );
3580
3581  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
3582  static inline bool classof(const Instruction *I) {
3583    return I->getOpcode() == FPToSI;
3584  }
3585  static inline bool classof(const Value *V) {
3586    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3587  }
3588};
3589
3590//===----------------------------------------------------------------------===//
3591//                                 IntToPtrInst Class
3592//===----------------------------------------------------------------------===//
3593
3594/// \brief This class represents a cast from an integer to a pointer.
3595class IntToPtrInst : public CastInst {
3596public:
3597  /// \brief Constructor with insert-before-instruction semantics
3598  IntToPtrInst(
3599    Value *S,                     ///< The value to be converted
3600    Type *Ty,               ///< The type to convert to
3601    const Twine &NameStr = "",    ///< A name for the new instruction
3602    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3603  );
3604
3605  /// \brief Constructor with insert-at-end-of-block semantics
3606  IntToPtrInst(
3607    Value *S,                     ///< The value to be converted
3608    Type *Ty,               ///< The type to convert to
3609    const Twine &NameStr,         ///< A name for the new instruction
3610    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3611  );
3612
3613  /// \brief Clone an identical IntToPtrInst
3614  virtual IntToPtrInst *clone_impl() const;
3615
3616  /// \brief Returns the address space of this instruction's pointer type.
3617  unsigned getAddressSpace() const {
3618    return getType()->getPointerAddressSpace();
3619  }
3620
3621  // Methods for support type inquiry through isa, cast, and dyn_cast:
3622  static inline bool classof(const Instruction *I) {
3623    return I->getOpcode() == IntToPtr;
3624  }
3625  static inline bool classof(const Value *V) {
3626    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3627  }
3628};
3629
3630//===----------------------------------------------------------------------===//
3631//                                 PtrToIntInst Class
3632//===----------------------------------------------------------------------===//
3633
3634/// \brief This class represents a cast from a pointer to an integer
3635class PtrToIntInst : public CastInst {
3636protected:
3637  /// \brief Clone an identical PtrToIntInst
3638  virtual PtrToIntInst *clone_impl() const;
3639
3640public:
3641  /// \brief Constructor with insert-before-instruction semantics
3642  PtrToIntInst(
3643    Value *S,                     ///< The value to be converted
3644    Type *Ty,               ///< The type to convert to
3645    const Twine &NameStr = "",    ///< A name for the new instruction
3646    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3647  );
3648
3649  /// \brief Constructor with insert-at-end-of-block semantics
3650  PtrToIntInst(
3651    Value *S,                     ///< The value to be converted
3652    Type *Ty,               ///< The type to convert to
3653    const Twine &NameStr,         ///< A name for the new instruction
3654    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3655  );
3656
3657  /// \brief Gets the pointer operand.
3658  Value *getPointerOperand() { return getOperand(0); }
3659  /// \brief Gets the pointer operand.
3660  const Value *getPointerOperand() const { return getOperand(0); }
3661  /// \brief Gets the operand index of the pointer operand.
3662  static unsigned getPointerOperandIndex() { return 0U; }
3663
3664  /// \brief Returns the address space of the pointer operand.
3665  unsigned getPointerAddressSpace() const {
3666    return getPointerOperand()->getType()->getPointerAddressSpace();
3667  }
3668
3669  // Methods for support type inquiry through isa, cast, and dyn_cast:
3670  static inline bool classof(const Instruction *I) {
3671    return I->getOpcode() == PtrToInt;
3672  }
3673  static inline bool classof(const Value *V) {
3674    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3675  }
3676};
3677
3678//===----------------------------------------------------------------------===//
3679//                             BitCastInst Class
3680//===----------------------------------------------------------------------===//
3681
3682/// \brief This class represents a no-op cast from one type to another.
3683class BitCastInst : public CastInst {
3684protected:
3685  /// \brief Clone an identical BitCastInst
3686  virtual BitCastInst *clone_impl() const;
3687
3688public:
3689  /// \brief Constructor with insert-before-instruction semantics
3690  BitCastInst(
3691    Value *S,                     ///< The value to be casted
3692    Type *Ty,               ///< The type to casted to
3693    const Twine &NameStr = "",    ///< A name for the new instruction
3694    Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3695  );
3696
3697  /// \brief Constructor with insert-at-end-of-block semantics
3698  BitCastInst(
3699    Value *S,                     ///< The value to be casted
3700    Type *Ty,               ///< The type to casted to
3701    const Twine &NameStr,         ///< A name for the new instruction
3702    BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3703  );
3704
3705  // Methods for support type inquiry through isa, cast, and dyn_cast:
3706  static inline bool classof(const Instruction *I) {
3707    return I->getOpcode() == BitCast;
3708  }
3709  static inline bool classof(const Value *V) {
3710    return isa<Instruction>(V) && classof(cast<Instruction>(V));
3711  }
3712};
3713
3714} // End llvm namespace
3715
3716#endif
3717