~ubuntu-branches/ubuntu/wily/clamav/wily-proposed

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/include/llvm/Instructions.h

  • Committer: Package Import Robot
  • Author(s): Scott Kitterman, Sebastian Andrzej Siewior, Andreas Cadhalpun, Scott Kitterman, Javier Fernández-Sanguino
  • Date: 2015-01-28 00:25:13 UTC
  • mfrom: (0.48.14 sid)
  • Revision ID: package-import@ubuntu.com-20150128002513-lil2oi74cooy4lzr
Tags: 0.98.6+dfsg-1
[ Sebastian Andrzej Siewior ]
* update "fix-ssize_t-size_t-off_t-printf-modifier", include of misc.h was
  missing but was pulled in via the systemd patch.
* Don't leak return codes from libmspack to clamav API. (Closes: #774686).

[ Andreas Cadhalpun ]
* Add patch to avoid emitting incremental progress messages when not
  outputting to a terminal. (Closes: #767350)
* Update lintian-overrides for unused-file-paragraph-in-dep5-copyright.
* clamav-base.postinst: always chown /var/log/clamav and /var/lib/clamav
  to clamav:clamav, not only on fresh installations. (Closes: #775400)
* Adapt the clamav-daemon and clamav-freshclam logrotate scripts,
  so that they correctly work under systemd.
* Move the PidFile variable from the clamd/freshclam configuration files
  to the init scripts. This makes the init scripts more robust against
  misconfiguration and avoids error messages with systemd. (Closes: #767353)
* debian/copyright: drop files from Files-Excluded only present in github
  tarballs
* Drop Workaround-a-bug-in-libc-on-Hurd.patch, because hurd got fixed.
  (see #752237)
* debian/rules: Remove useless --with-system-tommath --without-included-ltdl
  configure options.

[ Scott Kitterman ]
* Stop stripping llvm when repacking the tarball as the system llvm on some
  releases is too old to use
* New upstream bugfix release
  - Library shared object revisions.
  - Includes a patch from Sebastian Andrzej Siewior making ClamAV pid files
    compatible with systemd.
  - Fix a heap out of bounds condition with crafted Yoda's crypter files.
    This issue was discovered by Felix Groebert of the Google Security Team.
  - Fix a heap out of bounds condition with crafted mew packer files. This
    issue was discovered by Felix Groebert of the Google Security Team.
  - Fix a heap out of bounds condition with crafted upx packer files. This
    issue was discovered by Kevin Szkudlapski of Quarkslab.
  - Fix a heap out of bounds condition with crafted upack packer files. This
    issue was discovered by Sebastian Andrzej Siewior. CVE-2014-9328.
  - Compensate a crash due to incorrect compiler optimization when handling
    crafted petite packer files. This issue was discovered by Sebastian
    Andrzej Siewior.
* Update lintian override for embedded zlib to match new so version

[ Javier Fernández-Sanguino ]
* Updated Spanish Debconf template translation (Closes: #773563)

Show diffs side-by-side

added added

removed removed

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