Simplify the allocation and freeing of Users' operand lists, now that
[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) 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) 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   /// Transparently provide more efficient getOperand methods.
2086   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2087
2088   bool isUnconditional() const { return getNumOperands() == 1; }
2089   bool isConditional()   const { return getNumOperands() == 3; }
2090
2091   Value *getCondition() const {
2092     assert(isConditional() && "Cannot get condition of an uncond branch!");
2093     return Op<-3>();
2094   }
2095
2096   void setCondition(Value *V) {
2097     assert(isConditional() && "Cannot set condition of unconditional branch!");
2098     Op<-3>() = V;
2099   }
2100
2101   unsigned getNumSuccessors() const { return 1+isConditional(); }
2102
2103   BasicBlock *getSuccessor(unsigned i) const {
2104     assert(i < getNumSuccessors() && "Successor # out of range for Branch!");
2105     return cast_or_null<BasicBlock>((&Op<-1>() - i)->get());
2106   }
2107
2108   void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
2109     assert(idx < getNumSuccessors() && "Successor # out of range for Branch!");
2110     *(&Op<-1>() - idx) = (Value*)NewSucc;
2111   }
2112
2113   // Methods for support type inquiry through isa, cast, and dyn_cast:
2114   static inline bool classof(const BranchInst *) { return true; }
2115   static inline bool classof(const Instruction *I) {
2116     return (I->getOpcode() == Instruction::Br);
2117   }
2118   static inline bool classof(const Value *V) {
2119     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2120   }
2121 private:
2122   virtual BasicBlock *getSuccessorV(unsigned idx) const;
2123   virtual unsigned getNumSuccessorsV() const;
2124   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
2125 };
2126
2127 template <>
2128 struct OperandTraits<BranchInst> : public VariadicOperandTraits<1> {};
2129
2130 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(BranchInst, Value)
2131
2132 //===----------------------------------------------------------------------===//
2133 //                               SwitchInst Class
2134 //===----------------------------------------------------------------------===//
2135
2136 //===---------------------------------------------------------------------------
2137 /// SwitchInst - Multiway switch
2138 ///
2139 class SwitchInst : public TerminatorInst {
2140   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
2141   unsigned ReservedSpace;
2142   // Operand[0]    = Value to switch on
2143   // Operand[1]    = Default basic block destination
2144   // Operand[2n  ] = Value to match
2145   // Operand[2n+1] = BasicBlock to go to on match
2146   SwitchInst(const SwitchInst &SI);
2147   void init(Value *Value, BasicBlock *Default, unsigned NumReserved);
2148   void resizeOperands(unsigned No);
2149   // allocate space for exactly zero operands
2150   void *operator new(size_t s) {
2151     return User::operator new(s, 0);
2152   }
2153   /// SwitchInst ctor - Create a new switch instruction, specifying a value to
2154   /// switch on and a default destination.  The number of additional cases can
2155   /// be specified here to make memory allocation more efficient.  This
2156   /// constructor can also autoinsert before another instruction.
2157   SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
2158              Instruction *InsertBefore);
2159
2160   /// SwitchInst ctor - Create a new switch instruction, specifying a value to
2161   /// switch on and a default destination.  The number of additional cases can
2162   /// be specified here to make memory allocation more efficient.  This
2163   /// constructor also autoinserts at the end of the specified BasicBlock.
2164   SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
2165              BasicBlock *InsertAtEnd);
2166 protected:
2167   virtual SwitchInst *clone_impl() const;
2168 public:
2169   static SwitchInst *Create(Value *Value, BasicBlock *Default,
2170                             unsigned NumCases, Instruction *InsertBefore = 0) {
2171     return new SwitchInst(Value, Default, NumCases, InsertBefore);
2172   }
2173   static SwitchInst *Create(Value *Value, BasicBlock *Default,
2174                             unsigned NumCases, BasicBlock *InsertAtEnd) {
2175     return new SwitchInst(Value, Default, NumCases, InsertAtEnd);
2176   }
2177   ~SwitchInst();
2178
2179   /// Provide fast operand accessors
2180   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2181
2182   // Accessor Methods for Switch stmt
2183   Value *getCondition() const { return getOperand(0); }
2184   void setCondition(Value *V) { setOperand(0, V); }
2185
2186   BasicBlock *getDefaultDest() const {
2187     return cast<BasicBlock>(getOperand(1));
2188   }
2189
2190   /// getNumCases - return the number of 'cases' in this switch instruction.
2191   /// Note that case #0 is always the default case.
2192   unsigned getNumCases() const {
2193     return getNumOperands()/2;
2194   }
2195
2196   /// getCaseValue - Return the specified case value.  Note that case #0, the
2197   /// default destination, does not have a case value.
2198   ConstantInt *getCaseValue(unsigned i) {
2199     assert(i && i < getNumCases() && "Illegal case value to get!");
2200     return getSuccessorValue(i);
2201   }
2202
2203   /// getCaseValue - Return the specified case value.  Note that case #0, the
2204   /// default destination, does not have a case value.
2205   const ConstantInt *getCaseValue(unsigned i) const {
2206     assert(i && i < getNumCases() && "Illegal case value to get!");
2207     return getSuccessorValue(i);
2208   }
2209
2210   /// findCaseValue - Search all of the case values for the specified constant.
2211   /// If it is explicitly handled, return the case number of it, otherwise
2212   /// return 0 to indicate that it is handled by the default handler.
2213   unsigned findCaseValue(const ConstantInt *C) const {
2214     for (unsigned i = 1, e = getNumCases(); i != e; ++i)
2215       if (getCaseValue(i) == C)
2216         return i;
2217     return 0;
2218   }
2219
2220   /// findCaseDest - Finds the unique case value for a given successor. Returns
2221   /// null if the successor is not found, not unique, or is the default case.
2222   ConstantInt *findCaseDest(BasicBlock *BB) {
2223     if (BB == getDefaultDest()) return NULL;
2224
2225     ConstantInt *CI = NULL;
2226     for (unsigned i = 1, e = getNumCases(); i != e; ++i) {
2227       if (getSuccessor(i) == BB) {
2228         if (CI) return NULL;   // Multiple cases lead to BB.
2229         else CI = getCaseValue(i);
2230       }
2231     }
2232     return CI;
2233   }
2234
2235   /// addCase - Add an entry to the switch instruction...
2236   ///
2237   void addCase(ConstantInt *OnVal, BasicBlock *Dest);
2238
2239   /// removeCase - This method removes the specified successor from the switch
2240   /// instruction.  Note that this cannot be used to remove the default
2241   /// destination (successor #0).
2242   ///
2243   void removeCase(unsigned idx);
2244
2245   unsigned getNumSuccessors() const { return getNumOperands()/2; }
2246   BasicBlock *getSuccessor(unsigned idx) const {
2247     assert(idx < getNumSuccessors() &&"Successor idx out of range for switch!");
2248     return cast<BasicBlock>(getOperand(idx*2+1));
2249   }
2250   void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
2251     assert(idx < getNumSuccessors() && "Successor # out of range for switch!");
2252     setOperand(idx*2+1, (Value*)NewSucc);
2253   }
2254
2255   // getSuccessorValue - Return the value associated with the specified
2256   // successor.
2257   ConstantInt *getSuccessorValue(unsigned idx) const {
2258     assert(idx < getNumSuccessors() && "Successor # out of range!");
2259     return reinterpret_cast<ConstantInt*>(getOperand(idx*2));
2260   }
2261
2262   // Methods for support type inquiry through isa, cast, and dyn_cast:
2263   static inline bool classof(const SwitchInst *) { return true; }
2264   static inline bool classof(const Instruction *I) {
2265     return I->getOpcode() == Instruction::Switch;
2266   }
2267   static inline bool classof(const Value *V) {
2268     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2269   }
2270 private:
2271   virtual BasicBlock *getSuccessorV(unsigned idx) const;
2272   virtual unsigned getNumSuccessorsV() const;
2273   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
2274 };
2275
2276 template <>
2277 struct OperandTraits<SwitchInst> : public HungoffOperandTraits<2> {
2278 };
2279
2280 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(SwitchInst, Value)
2281
2282
2283 //===----------------------------------------------------------------------===//
2284 //                             IndirectBrInst Class
2285 //===----------------------------------------------------------------------===//
2286
2287 //===---------------------------------------------------------------------------
2288 /// IndirectBrInst - Indirect Branch Instruction.
2289 ///
2290 class IndirectBrInst : public TerminatorInst {
2291   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
2292   unsigned ReservedSpace;
2293   // Operand[0]    = Value to switch on
2294   // Operand[1]    = Default basic block destination
2295   // Operand[2n  ] = Value to match
2296   // Operand[2n+1] = BasicBlock to go to on match
2297   IndirectBrInst(const IndirectBrInst &IBI);
2298   void init(Value *Address, unsigned NumDests);
2299   void resizeOperands(unsigned No);
2300   // allocate space for exactly zero operands
2301   void *operator new(size_t s) {
2302     return User::operator new(s, 0);
2303   }
2304   /// IndirectBrInst ctor - Create a new indirectbr instruction, specifying an
2305   /// Address to jump to.  The number of expected destinations can be specified
2306   /// here to make memory allocation more efficient.  This constructor can also
2307   /// autoinsert before another instruction.
2308   IndirectBrInst(Value *Address, unsigned NumDests, Instruction *InsertBefore);
2309
2310   /// IndirectBrInst ctor - Create a new indirectbr instruction, specifying an
2311   /// Address to jump to.  The number of expected destinations can be specified
2312   /// here to make memory allocation more efficient.  This constructor also
2313   /// autoinserts at the end of the specified BasicBlock.
2314   IndirectBrInst(Value *Address, unsigned NumDests, BasicBlock *InsertAtEnd);
2315 protected:
2316   virtual IndirectBrInst *clone_impl() const;
2317 public:
2318   static IndirectBrInst *Create(Value *Address, unsigned NumDests,
2319                                 Instruction *InsertBefore = 0) {
2320     return new IndirectBrInst(Address, NumDests, InsertBefore);
2321   }
2322   static IndirectBrInst *Create(Value *Address, unsigned NumDests,
2323                                 BasicBlock *InsertAtEnd) {
2324     return new IndirectBrInst(Address, NumDests, InsertAtEnd);
2325   }
2326   ~IndirectBrInst();
2327
2328   /// Provide fast operand accessors.
2329   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2330
2331   // Accessor Methods for IndirectBrInst instruction.
2332   Value *getAddress() { return getOperand(0); }
2333   const Value *getAddress() const { return getOperand(0); }
2334   void setAddress(Value *V) { setOperand(0, V); }
2335
2336
2337   /// getNumDestinations - return the number of possible destinations in this
2338   /// indirectbr instruction.
2339   unsigned getNumDestinations() const { return getNumOperands()-1; }
2340
2341   /// getDestination - Return the specified destination.
2342   BasicBlock *getDestination(unsigned i) { return getSuccessor(i); }
2343   const BasicBlock *getDestination(unsigned i) const { return getSuccessor(i); }
2344
2345   /// addDestination - Add a destination.
2346   ///
2347   void addDestination(BasicBlock *Dest);
2348
2349   /// removeDestination - This method removes the specified successor from the
2350   /// indirectbr instruction.
2351   void removeDestination(unsigned i);
2352
2353   unsigned getNumSuccessors() const { return getNumOperands()-1; }
2354   BasicBlock *getSuccessor(unsigned i) const {
2355     return cast<BasicBlock>(getOperand(i+1));
2356   }
2357   void setSuccessor(unsigned i, BasicBlock *NewSucc) {
2358     setOperand(i+1, (Value*)NewSucc);
2359   }
2360
2361   // Methods for support type inquiry through isa, cast, and dyn_cast:
2362   static inline bool classof(const IndirectBrInst *) { return true; }
2363   static inline bool classof(const Instruction *I) {
2364     return I->getOpcode() == Instruction::IndirectBr;
2365   }
2366   static inline bool classof(const Value *V) {
2367     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2368   }
2369 private:
2370   virtual BasicBlock *getSuccessorV(unsigned idx) const;
2371   virtual unsigned getNumSuccessorsV() const;
2372   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
2373 };
2374
2375 template <>
2376 struct OperandTraits<IndirectBrInst> : public HungoffOperandTraits<1> {
2377 };
2378
2379 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(IndirectBrInst, Value)
2380
2381
2382 //===----------------------------------------------------------------------===//
2383 //                               InvokeInst Class
2384 //===----------------------------------------------------------------------===//
2385
2386 /// InvokeInst - Invoke instruction.  The SubclassData field is used to hold the
2387 /// calling convention of the call.
2388 ///
2389 class InvokeInst : public TerminatorInst {
2390   AttrListPtr AttributeList;
2391   InvokeInst(const InvokeInst &BI);
2392   void init(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException,
2393             Value* const *Args, unsigned NumArgs);
2394
2395   template<typename RandomAccessIterator>
2396   void init(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
2397             RandomAccessIterator ArgBegin, RandomAccessIterator ArgEnd,
2398             const Twine &NameStr,
2399             // This argument ensures that we have an iterator we can
2400             // do arithmetic on in constant time
2401             std::random_access_iterator_tag) {
2402     unsigned NumArgs = (unsigned)std::distance(ArgBegin, ArgEnd);
2403
2404     // This requires that the iterator points to contiguous memory.
2405     init(Func, IfNormal, IfException, NumArgs ? &*ArgBegin : 0, NumArgs);
2406     setName(NameStr);
2407   }
2408
2409   /// Construct an InvokeInst given a range of arguments.
2410   /// RandomAccessIterator must be a random-access iterator pointing to
2411   /// contiguous storage (e.g. a std::vector<>::iterator).  Checks are
2412   /// made for random-accessness but not for contiguous storage as
2413   /// that would incur runtime overhead.
2414   ///
2415   /// @brief Construct an InvokeInst from a range of arguments
2416   template<typename RandomAccessIterator>
2417   inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
2418                     RandomAccessIterator ArgBegin, RandomAccessIterator ArgEnd,
2419                     unsigned Values,
2420                     const Twine &NameStr, Instruction *InsertBefore);
2421
2422   /// Construct an InvokeInst given a range of arguments.
2423   /// RandomAccessIterator must be a random-access iterator pointing to
2424   /// contiguous storage (e.g. a std::vector<>::iterator).  Checks are
2425   /// made for random-accessness but not for contiguous storage as
2426   /// that would incur runtime overhead.
2427   ///
2428   /// @brief Construct an InvokeInst from a range of arguments
2429   template<typename RandomAccessIterator>
2430   inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException,
2431                     RandomAccessIterator ArgBegin, RandomAccessIterator ArgEnd,
2432                     unsigned Values,
2433                     const Twine &NameStr, BasicBlock *InsertAtEnd);
2434 protected:
2435   virtual InvokeInst *clone_impl() const;
2436 public:
2437   template<typename RandomAccessIterator>
2438   static InvokeInst *Create(Value *Func,
2439                             BasicBlock *IfNormal, BasicBlock *IfException,
2440                             RandomAccessIterator ArgBegin,
2441                             RandomAccessIterator ArgEnd,
2442                             const Twine &NameStr = "",
2443                             Instruction *InsertBefore = 0) {
2444     unsigned Values(ArgEnd - ArgBegin + 3);
2445     return new(Values) InvokeInst(Func, IfNormal, IfException, ArgBegin, ArgEnd,
2446                                   Values, NameStr, InsertBefore);
2447   }
2448   template<typename RandomAccessIterator>
2449   static InvokeInst *Create(Value *Func,
2450                             BasicBlock *IfNormal, BasicBlock *IfException,
2451                             RandomAccessIterator ArgBegin,
2452                             RandomAccessIterator ArgEnd,
2453                             const Twine &NameStr,
2454                             BasicBlock *InsertAtEnd) {
2455     unsigned Values(ArgEnd - ArgBegin + 3);
2456     return new(Values) InvokeInst(Func, IfNormal, IfException, ArgBegin, ArgEnd,
2457                                   Values, NameStr, InsertAtEnd);
2458   }
2459
2460   /// Provide fast operand accessors
2461   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
2462
2463   /// getNumArgOperands - Return the number of invoke arguments.
2464   ///
2465   unsigned getNumArgOperands() const { return getNumOperands() - 3; }
2466
2467   /// getArgOperand/setArgOperand - Return/set the i-th invoke argument.
2468   ///
2469   Value *getArgOperand(unsigned i) const { return getOperand(i); }
2470   void setArgOperand(unsigned i, Value *v) { setOperand(i, v); }
2471
2472   /// getCallingConv/setCallingConv - Get or set the calling convention of this
2473   /// function call.
2474   CallingConv::ID getCallingConv() const {
2475     return static_cast<CallingConv::ID>(getSubclassDataFromInstruction());
2476   }
2477   void setCallingConv(CallingConv::ID CC) {
2478     setInstructionSubclassData(static_cast<unsigned>(CC));
2479   }
2480
2481   /// getAttributes - Return the parameter attributes for this invoke.
2482   ///
2483   const AttrListPtr &getAttributes() const { return AttributeList; }
2484
2485   /// setAttributes - Set the parameter attributes for this invoke.
2486   ///
2487   void setAttributes(const AttrListPtr &Attrs) { AttributeList = Attrs; }
2488
2489   /// addAttribute - adds the attribute to the list of attributes.
2490   void addAttribute(unsigned i, Attributes attr);
2491
2492   /// removeAttribute - removes the attribute from the list of attributes.
2493   void removeAttribute(unsigned i, Attributes attr);
2494
2495   /// @brief Determine whether the call or the callee has the given attribute.
2496   bool paramHasAttr(unsigned i, Attributes attr) const;
2497
2498   /// @brief Extract the alignment for a call or parameter (0=unknown).
2499   unsigned getParamAlignment(unsigned i) const {
2500     return AttributeList.getParamAlignment(i);
2501   }
2502
2503   /// @brief Return true if the call should not be inlined.
2504   bool isNoInline() const { return paramHasAttr(~0, Attribute::NoInline); }
2505   void setIsNoInline(bool Value = true) {
2506     if (Value) addAttribute(~0, Attribute::NoInline);
2507     else removeAttribute(~0, Attribute::NoInline);
2508   }
2509
2510   /// @brief Determine if the call does not access memory.
2511   bool doesNotAccessMemory() const {
2512     return paramHasAttr(~0, Attribute::ReadNone);
2513   }
2514   void setDoesNotAccessMemory(bool NotAccessMemory = true) {
2515     if (NotAccessMemory) addAttribute(~0, Attribute::ReadNone);
2516     else removeAttribute(~0, Attribute::ReadNone);
2517   }
2518
2519   /// @brief Determine if the call does not access or only reads memory.
2520   bool onlyReadsMemory() const {
2521     return doesNotAccessMemory() || paramHasAttr(~0, Attribute::ReadOnly);
2522   }
2523   void setOnlyReadsMemory(bool OnlyReadsMemory = true) {
2524     if (OnlyReadsMemory) addAttribute(~0, Attribute::ReadOnly);
2525     else removeAttribute(~0, Attribute::ReadOnly | Attribute::ReadNone);
2526   }
2527
2528   /// @brief Determine if the call cannot return.
2529   bool doesNotReturn() const { return paramHasAttr(~0, Attribute::NoReturn); }
2530   void setDoesNotReturn(bool DoesNotReturn = true) {
2531     if (DoesNotReturn) addAttribute(~0, Attribute::NoReturn);
2532     else removeAttribute(~0, Attribute::NoReturn);
2533   }
2534
2535   /// @brief Determine if the call cannot unwind.
2536   bool doesNotThrow() const { return paramHasAttr(~0, Attribute::NoUnwind); }
2537   void setDoesNotThrow(bool DoesNotThrow = true) {
2538     if (DoesNotThrow) addAttribute(~0, Attribute::NoUnwind);
2539     else removeAttribute(~0, Attribute::NoUnwind);
2540   }
2541
2542   /// @brief Determine if the call returns a structure through first
2543   /// pointer argument.
2544   bool hasStructRetAttr() const {
2545     // Be friendly and also check the callee.
2546     return paramHasAttr(1, Attribute::StructRet);
2547   }
2548
2549   /// @brief Determine if any call argument is an aggregate passed by value.
2550   bool hasByValArgument() const {
2551     return AttributeList.hasAttrSomewhere(Attribute::ByVal);
2552   }
2553
2554   /// getCalledFunction - Return the function called, or null if this is an
2555   /// indirect function invocation.
2556   ///
2557   Function *getCalledFunction() const {
2558     return dyn_cast<Function>(Op<-3>());
2559   }
2560
2561   /// getCalledValue - Get a pointer to the function that is invoked by this
2562   /// instruction
2563   const Value *getCalledValue() const { return Op<-3>(); }
2564         Value *getCalledValue()       { return Op<-3>(); }
2565
2566   /// setCalledFunction - Set the function called.
2567   void setCalledFunction(Value* Fn) {
2568     Op<-3>() = Fn;
2569   }
2570
2571   // get*Dest - Return the destination basic blocks...
2572   BasicBlock *getNormalDest() const {
2573     return cast<BasicBlock>(Op<-2>());
2574   }
2575   BasicBlock *getUnwindDest() const {
2576     return cast<BasicBlock>(Op<-1>());
2577   }
2578   void setNormalDest(BasicBlock *B) {
2579     Op<-2>() = reinterpret_cast<Value*>(B);
2580   }
2581   void setUnwindDest(BasicBlock *B) {
2582     Op<-1>() = reinterpret_cast<Value*>(B);
2583   }
2584
2585   BasicBlock *getSuccessor(unsigned i) const {
2586     assert(i < 2 && "Successor # out of range for invoke!");
2587     return i == 0 ? getNormalDest() : getUnwindDest();
2588   }
2589
2590   void setSuccessor(unsigned idx, BasicBlock *NewSucc) {
2591     assert(idx < 2 && "Successor # out of range for invoke!");
2592     *(&Op<-2>() + idx) = reinterpret_cast<Value*>(NewSucc);
2593   }
2594
2595   unsigned getNumSuccessors() const { return 2; }
2596
2597   // Methods for support type inquiry through isa, cast, and dyn_cast:
2598   static inline bool classof(const InvokeInst *) { return true; }
2599   static inline bool classof(const Instruction *I) {
2600     return (I->getOpcode() == Instruction::Invoke);
2601   }
2602   static inline bool classof(const Value *V) {
2603     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2604   }
2605
2606 private:
2607   virtual BasicBlock *getSuccessorV(unsigned idx) const;
2608   virtual unsigned getNumSuccessorsV() const;
2609   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
2610
2611   // Shadow Instruction::setInstructionSubclassData with a private forwarding
2612   // method so that subclasses cannot accidentally use it.
2613   void setInstructionSubclassData(unsigned short D) {
2614     Instruction::setInstructionSubclassData(D);
2615   }
2616 };
2617
2618 template <>
2619 struct OperandTraits<InvokeInst> : public VariadicOperandTraits<3> {
2620 };
2621
2622 template<typename RandomAccessIterator>
2623 InvokeInst::InvokeInst(Value *Func,
2624                        BasicBlock *IfNormal, BasicBlock *IfException,
2625                        RandomAccessIterator ArgBegin,
2626                        RandomAccessIterator ArgEnd,
2627                        unsigned Values,
2628                        const Twine &NameStr, Instruction *InsertBefore)
2629   : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType())
2630                                       ->getElementType())->getReturnType(),
2631                    Instruction::Invoke,
2632                    OperandTraits<InvokeInst>::op_end(this) - Values,
2633                    Values, InsertBefore) {
2634   init(Func, IfNormal, IfException, ArgBegin, ArgEnd, NameStr,
2635        typename std::iterator_traits<RandomAccessIterator>
2636        ::iterator_category());
2637 }
2638 template<typename RandomAccessIterator>
2639 InvokeInst::InvokeInst(Value *Func,
2640                        BasicBlock *IfNormal, BasicBlock *IfException,
2641                        RandomAccessIterator ArgBegin,
2642                        RandomAccessIterator ArgEnd,
2643                        unsigned Values,
2644                        const Twine &NameStr, BasicBlock *InsertAtEnd)
2645   : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType())
2646                                       ->getElementType())->getReturnType(),
2647                    Instruction::Invoke,
2648                    OperandTraits<InvokeInst>::op_end(this) - Values,
2649                    Values, InsertAtEnd) {
2650   init(Func, IfNormal, IfException, ArgBegin, ArgEnd, NameStr,
2651        typename std::iterator_traits<RandomAccessIterator>
2652        ::iterator_category());
2653 }
2654
2655 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(InvokeInst, Value)
2656
2657 //===----------------------------------------------------------------------===//
2658 //                              UnwindInst Class
2659 //===----------------------------------------------------------------------===//
2660
2661 //===---------------------------------------------------------------------------
2662 /// UnwindInst - Immediately exit the current function, unwinding the stack
2663 /// until an invoke instruction is found.
2664 ///
2665 class UnwindInst : public TerminatorInst {
2666   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
2667 protected:
2668   virtual UnwindInst *clone_impl() const;
2669 public:
2670   // allocate space for exactly zero operands
2671   void *operator new(size_t s) {
2672     return User::operator new(s, 0);
2673   }
2674   explicit UnwindInst(LLVMContext &C, Instruction *InsertBefore = 0);
2675   explicit UnwindInst(LLVMContext &C, BasicBlock *InsertAtEnd);
2676
2677   unsigned getNumSuccessors() const { return 0; }
2678
2679   // Methods for support type inquiry through isa, cast, and dyn_cast:
2680   static inline bool classof(const UnwindInst *) { return true; }
2681   static inline bool classof(const Instruction *I) {
2682     return I->getOpcode() == Instruction::Unwind;
2683   }
2684   static inline bool classof(const Value *V) {
2685     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2686   }
2687 private:
2688   virtual BasicBlock *getSuccessorV(unsigned idx) const;
2689   virtual unsigned getNumSuccessorsV() const;
2690   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
2691 };
2692
2693 //===----------------------------------------------------------------------===//
2694 //                           UnreachableInst Class
2695 //===----------------------------------------------------------------------===//
2696
2697 //===---------------------------------------------------------------------------
2698 /// UnreachableInst - This function has undefined behavior.  In particular, the
2699 /// presence of this instruction indicates some higher level knowledge that the
2700 /// end of the block cannot be reached.
2701 ///
2702 class UnreachableInst : public TerminatorInst {
2703   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
2704 protected:
2705   virtual UnreachableInst *clone_impl() const;
2706
2707 public:
2708   // allocate space for exactly zero operands
2709   void *operator new(size_t s) {
2710     return User::operator new(s, 0);
2711   }
2712   explicit UnreachableInst(LLVMContext &C, Instruction *InsertBefore = 0);
2713   explicit UnreachableInst(LLVMContext &C, BasicBlock *InsertAtEnd);
2714
2715   unsigned getNumSuccessors() const { return 0; }
2716
2717   // Methods for support type inquiry through isa, cast, and dyn_cast:
2718   static inline bool classof(const UnreachableInst *) { return true; }
2719   static inline bool classof(const Instruction *I) {
2720     return I->getOpcode() == Instruction::Unreachable;
2721   }
2722   static inline bool classof(const Value *V) {
2723     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2724   }
2725 private:
2726   virtual BasicBlock *getSuccessorV(unsigned idx) const;
2727   virtual unsigned getNumSuccessorsV() const;
2728   virtual void setSuccessorV(unsigned idx, BasicBlock *B);
2729 };
2730
2731 //===----------------------------------------------------------------------===//
2732 //                                 TruncInst Class
2733 //===----------------------------------------------------------------------===//
2734
2735 /// @brief This class represents a truncation of integer types.
2736 class TruncInst : public CastInst {
2737 protected:
2738   /// @brief Clone an identical TruncInst
2739   virtual TruncInst *clone_impl() const;
2740
2741 public:
2742   /// @brief Constructor with insert-before-instruction semantics
2743   TruncInst(
2744     Value *S,                     ///< The value to be truncated
2745     const Type *Ty,               ///< The (smaller) type to truncate to
2746     const Twine &NameStr = "",    ///< A name for the new instruction
2747     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
2748   );
2749
2750   /// @brief Constructor with insert-at-end-of-block semantics
2751   TruncInst(
2752     Value *S,                     ///< The value to be truncated
2753     const Type *Ty,               ///< The (smaller) type to truncate to
2754     const Twine &NameStr,         ///< A name for the new instruction
2755     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
2756   );
2757
2758   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
2759   static inline bool classof(const TruncInst *) { return true; }
2760   static inline bool classof(const Instruction *I) {
2761     return I->getOpcode() == Trunc;
2762   }
2763   static inline bool classof(const Value *V) {
2764     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2765   }
2766 };
2767
2768 //===----------------------------------------------------------------------===//
2769 //                                 ZExtInst Class
2770 //===----------------------------------------------------------------------===//
2771
2772 /// @brief This class represents zero extension of integer types.
2773 class ZExtInst : public CastInst {
2774 protected:
2775   /// @brief Clone an identical ZExtInst
2776   virtual ZExtInst *clone_impl() const;
2777
2778 public:
2779   /// @brief Constructor with insert-before-instruction semantics
2780   ZExtInst(
2781     Value *S,                     ///< The value to be zero extended
2782     const Type *Ty,               ///< The type to zero extend to
2783     const Twine &NameStr = "",    ///< A name for the new instruction
2784     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
2785   );
2786
2787   /// @brief Constructor with insert-at-end semantics.
2788   ZExtInst(
2789     Value *S,                     ///< The value to be zero extended
2790     const Type *Ty,               ///< The type to zero extend to
2791     const Twine &NameStr,         ///< A name for the new instruction
2792     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
2793   );
2794
2795   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
2796   static inline bool classof(const ZExtInst *) { return true; }
2797   static inline bool classof(const Instruction *I) {
2798     return I->getOpcode() == ZExt;
2799   }
2800   static inline bool classof(const Value *V) {
2801     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2802   }
2803 };
2804
2805 //===----------------------------------------------------------------------===//
2806 //                                 SExtInst Class
2807 //===----------------------------------------------------------------------===//
2808
2809 /// @brief This class represents a sign extension of integer types.
2810 class SExtInst : public CastInst {
2811 protected:
2812   /// @brief Clone an identical SExtInst
2813   virtual SExtInst *clone_impl() const;
2814
2815 public:
2816   /// @brief Constructor with insert-before-instruction semantics
2817   SExtInst(
2818     Value *S,                     ///< The value to be sign extended
2819     const Type *Ty,               ///< The type to sign extend to
2820     const Twine &NameStr = "",    ///< A name for the new instruction
2821     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
2822   );
2823
2824   /// @brief Constructor with insert-at-end-of-block semantics
2825   SExtInst(
2826     Value *S,                     ///< The value to be sign extended
2827     const Type *Ty,               ///< The type to sign extend to
2828     const Twine &NameStr,         ///< A name for the new instruction
2829     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
2830   );
2831
2832   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
2833   static inline bool classof(const SExtInst *) { return true; }
2834   static inline bool classof(const Instruction *I) {
2835     return I->getOpcode() == SExt;
2836   }
2837   static inline bool classof(const Value *V) {
2838     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2839   }
2840 };
2841
2842 //===----------------------------------------------------------------------===//
2843 //                                 FPTruncInst Class
2844 //===----------------------------------------------------------------------===//
2845
2846 /// @brief This class represents a truncation of floating point types.
2847 class FPTruncInst : public CastInst {
2848 protected:
2849   /// @brief Clone an identical FPTruncInst
2850   virtual FPTruncInst *clone_impl() const;
2851
2852 public:
2853   /// @brief Constructor with insert-before-instruction semantics
2854   FPTruncInst(
2855     Value *S,                     ///< The value to be truncated
2856     const Type *Ty,               ///< The type to truncate to
2857     const Twine &NameStr = "",    ///< A name for the new instruction
2858     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
2859   );
2860
2861   /// @brief Constructor with insert-before-instruction semantics
2862   FPTruncInst(
2863     Value *S,                     ///< The value to be truncated
2864     const Type *Ty,               ///< The type to truncate to
2865     const Twine &NameStr,         ///< A name for the new instruction
2866     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
2867   );
2868
2869   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
2870   static inline bool classof(const FPTruncInst *) { return true; }
2871   static inline bool classof(const Instruction *I) {
2872     return I->getOpcode() == FPTrunc;
2873   }
2874   static inline bool classof(const Value *V) {
2875     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2876   }
2877 };
2878
2879 //===----------------------------------------------------------------------===//
2880 //                                 FPExtInst Class
2881 //===----------------------------------------------------------------------===//
2882
2883 /// @brief This class represents an extension of floating point types.
2884 class FPExtInst : public CastInst {
2885 protected:
2886   /// @brief Clone an identical FPExtInst
2887   virtual FPExtInst *clone_impl() const;
2888
2889 public:
2890   /// @brief Constructor with insert-before-instruction semantics
2891   FPExtInst(
2892     Value *S,                     ///< The value to be extended
2893     const Type *Ty,               ///< The type to extend to
2894     const Twine &NameStr = "",    ///< A name for the new instruction
2895     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
2896   );
2897
2898   /// @brief Constructor with insert-at-end-of-block semantics
2899   FPExtInst(
2900     Value *S,                     ///< The value to be extended
2901     const Type *Ty,               ///< The type to extend to
2902     const Twine &NameStr,         ///< A name for the new instruction
2903     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
2904   );
2905
2906   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
2907   static inline bool classof(const FPExtInst *) { return true; }
2908   static inline bool classof(const Instruction *I) {
2909     return I->getOpcode() == FPExt;
2910   }
2911   static inline bool classof(const Value *V) {
2912     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2913   }
2914 };
2915
2916 //===----------------------------------------------------------------------===//
2917 //                                 UIToFPInst Class
2918 //===----------------------------------------------------------------------===//
2919
2920 /// @brief This class represents a cast unsigned integer to floating point.
2921 class UIToFPInst : public CastInst {
2922 protected:
2923   /// @brief Clone an identical UIToFPInst
2924   virtual UIToFPInst *clone_impl() const;
2925
2926 public:
2927   /// @brief Constructor with insert-before-instruction semantics
2928   UIToFPInst(
2929     Value *S,                     ///< The value to be converted
2930     const Type *Ty,               ///< The type to convert to
2931     const Twine &NameStr = "",    ///< A name for the new instruction
2932     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
2933   );
2934
2935   /// @brief Constructor with insert-at-end-of-block semantics
2936   UIToFPInst(
2937     Value *S,                     ///< The value to be converted
2938     const Type *Ty,               ///< The type to convert to
2939     const Twine &NameStr,         ///< A name for the new instruction
2940     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
2941   );
2942
2943   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
2944   static inline bool classof(const UIToFPInst *) { return true; }
2945   static inline bool classof(const Instruction *I) {
2946     return I->getOpcode() == UIToFP;
2947   }
2948   static inline bool classof(const Value *V) {
2949     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2950   }
2951 };
2952
2953 //===----------------------------------------------------------------------===//
2954 //                                 SIToFPInst Class
2955 //===----------------------------------------------------------------------===//
2956
2957 /// @brief This class represents a cast from signed integer to floating point.
2958 class SIToFPInst : public CastInst {
2959 protected:
2960   /// @brief Clone an identical SIToFPInst
2961   virtual SIToFPInst *clone_impl() const;
2962
2963 public:
2964   /// @brief Constructor with insert-before-instruction semantics
2965   SIToFPInst(
2966     Value *S,                     ///< The value to be converted
2967     const Type *Ty,               ///< The type to convert to
2968     const Twine &NameStr = "",    ///< A name for the new instruction
2969     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
2970   );
2971
2972   /// @brief Constructor with insert-at-end-of-block semantics
2973   SIToFPInst(
2974     Value *S,                     ///< The value to be converted
2975     const Type *Ty,               ///< The type to convert to
2976     const Twine &NameStr,         ///< A name for the new instruction
2977     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
2978   );
2979
2980   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
2981   static inline bool classof(const SIToFPInst *) { return true; }
2982   static inline bool classof(const Instruction *I) {
2983     return I->getOpcode() == SIToFP;
2984   }
2985   static inline bool classof(const Value *V) {
2986     return isa<Instruction>(V) && classof(cast<Instruction>(V));
2987   }
2988 };
2989
2990 //===----------------------------------------------------------------------===//
2991 //                                 FPToUIInst Class
2992 //===----------------------------------------------------------------------===//
2993
2994 /// @brief This class represents a cast from floating point to unsigned integer
2995 class FPToUIInst  : public CastInst {
2996 protected:
2997   /// @brief Clone an identical FPToUIInst
2998   virtual FPToUIInst *clone_impl() const;
2999
3000 public:
3001   /// @brief Constructor with insert-before-instruction semantics
3002   FPToUIInst(
3003     Value *S,                     ///< The value to be converted
3004     const Type *Ty,               ///< The type to convert to
3005     const Twine &NameStr = "",    ///< A name for the new instruction
3006     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3007   );
3008
3009   /// @brief Constructor with insert-at-end-of-block semantics
3010   FPToUIInst(
3011     Value *S,                     ///< The value to be converted
3012     const Type *Ty,               ///< The type to convert to
3013     const Twine &NameStr,         ///< A name for the new instruction
3014     BasicBlock *InsertAtEnd       ///< Where to insert the new instruction
3015   );
3016
3017   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
3018   static inline bool classof(const FPToUIInst *) { return true; }
3019   static inline bool classof(const Instruction *I) {
3020     return I->getOpcode() == FPToUI;
3021   }
3022   static inline bool classof(const Value *V) {
3023     return isa<Instruction>(V) && classof(cast<Instruction>(V));
3024   }
3025 };
3026
3027 //===----------------------------------------------------------------------===//
3028 //                                 FPToSIInst Class
3029 //===----------------------------------------------------------------------===//
3030
3031 /// @brief This class represents a cast from floating point to signed integer.
3032 class FPToSIInst  : public CastInst {
3033 protected:
3034   /// @brief Clone an identical FPToSIInst
3035   virtual FPToSIInst *clone_impl() const;
3036
3037 public:
3038   /// @brief Constructor with insert-before-instruction semantics
3039   FPToSIInst(
3040     Value *S,                     ///< The value to be converted
3041     const Type *Ty,               ///< The type to convert to
3042     const Twine &NameStr = "",    ///< A name for the new instruction
3043     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3044   );
3045
3046   /// @brief Constructor with insert-at-end-of-block semantics
3047   FPToSIInst(
3048     Value *S,                     ///< The value to be converted
3049     const Type *Ty,               ///< The type to convert to
3050     const Twine &NameStr,         ///< A name for the new instruction
3051     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3052   );
3053
3054   /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
3055   static inline bool classof(const FPToSIInst *) { return true; }
3056   static inline bool classof(const Instruction *I) {
3057     return I->getOpcode() == FPToSI;
3058   }
3059   static inline bool classof(const Value *V) {
3060     return isa<Instruction>(V) && classof(cast<Instruction>(V));
3061   }
3062 };
3063
3064 //===----------------------------------------------------------------------===//
3065 //                                 IntToPtrInst Class
3066 //===----------------------------------------------------------------------===//
3067
3068 /// @brief This class represents a cast from an integer to a pointer.
3069 class IntToPtrInst : public CastInst {
3070 public:
3071   /// @brief Constructor with insert-before-instruction semantics
3072   IntToPtrInst(
3073     Value *S,                     ///< The value to be converted
3074     const Type *Ty,               ///< The type to convert to
3075     const Twine &NameStr = "",    ///< A name for the new instruction
3076     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3077   );
3078
3079   /// @brief Constructor with insert-at-end-of-block semantics
3080   IntToPtrInst(
3081     Value *S,                     ///< The value to be converted
3082     const Type *Ty,               ///< The type to convert to
3083     const Twine &NameStr,         ///< A name for the new instruction
3084     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3085   );
3086
3087   /// @brief Clone an identical IntToPtrInst
3088   virtual IntToPtrInst *clone_impl() const;
3089
3090   // Methods for support type inquiry through isa, cast, and dyn_cast:
3091   static inline bool classof(const IntToPtrInst *) { return true; }
3092   static inline bool classof(const Instruction *I) {
3093     return I->getOpcode() == IntToPtr;
3094   }
3095   static inline bool classof(const Value *V) {
3096     return isa<Instruction>(V) && classof(cast<Instruction>(V));
3097   }
3098 };
3099
3100 //===----------------------------------------------------------------------===//
3101 //                                 PtrToIntInst Class
3102 //===----------------------------------------------------------------------===//
3103
3104 /// @brief This class represents a cast from a pointer to an integer
3105 class PtrToIntInst : public CastInst {
3106 protected:
3107   /// @brief Clone an identical PtrToIntInst
3108   virtual PtrToIntInst *clone_impl() const;
3109
3110 public:
3111   /// @brief Constructor with insert-before-instruction semantics
3112   PtrToIntInst(
3113     Value *S,                     ///< The value to be converted
3114     const Type *Ty,               ///< The type to convert to
3115     const Twine &NameStr = "",    ///< A name for the new instruction
3116     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3117   );
3118
3119   /// @brief Constructor with insert-at-end-of-block semantics
3120   PtrToIntInst(
3121     Value *S,                     ///< The value to be converted
3122     const Type *Ty,               ///< The type to convert to
3123     const Twine &NameStr,         ///< A name for the new instruction
3124     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3125   );
3126
3127   // Methods for support type inquiry through isa, cast, and dyn_cast:
3128   static inline bool classof(const PtrToIntInst *) { return true; }
3129   static inline bool classof(const Instruction *I) {
3130     return I->getOpcode() == PtrToInt;
3131   }
3132   static inline bool classof(const Value *V) {
3133     return isa<Instruction>(V) && classof(cast<Instruction>(V));
3134   }
3135 };
3136
3137 //===----------------------------------------------------------------------===//
3138 //                             BitCastInst Class
3139 //===----------------------------------------------------------------------===//
3140
3141 /// @brief This class represents a no-op cast from one type to another.
3142 class BitCastInst : public CastInst {
3143 protected:
3144   /// @brief Clone an identical BitCastInst
3145   virtual BitCastInst *clone_impl() const;
3146
3147 public:
3148   /// @brief Constructor with insert-before-instruction semantics
3149   BitCastInst(
3150     Value *S,                     ///< The value to be casted
3151     const Type *Ty,               ///< The type to casted to
3152     const Twine &NameStr = "",    ///< A name for the new instruction
3153     Instruction *InsertBefore = 0 ///< Where to insert the new instruction
3154   );
3155
3156   /// @brief Constructor with insert-at-end-of-block semantics
3157   BitCastInst(
3158     Value *S,                     ///< The value to be casted
3159     const Type *Ty,               ///< The type to casted to
3160     const Twine &NameStr,         ///< A name for the new instruction
3161     BasicBlock *InsertAtEnd       ///< The block to insert the instruction into
3162   );
3163
3164   // Methods for support type inquiry through isa, cast, and dyn_cast:
3165   static inline bool classof(const BitCastInst *) { return true; }
3166   static inline bool classof(const Instruction *I) {
3167     return I->getOpcode() == BitCast;
3168   }
3169   static inline bool classof(const Value *V) {
3170     return isa<Instruction>(V) && classof(cast<Instruction>(V));
3171   }
3172 };
3173
3174 } // End llvm namespace
3175
3176 #endif