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