aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-07-14 18:13:54 +0000
committerChris Lattner <sabre@nondot.org>2004-07-14 18:13:54 +0000
commitb757f160fc86b7668e7d0ffcadccde36c4dcfec8 (patch)
tree6eebc43ca9f6ec0e4d281e4845d296fc6c873bfe /include
parent32caa8de629d9872e50264905b9a29b740c44db7 (diff)
downloadexternal_llvm-b757f160fc86b7668e7d0ffcadccde36c4dcfec8.zip
external_llvm-b757f160fc86b7668e7d0ffcadccde36c4dcfec8.tar.gz
external_llvm-b757f160fc86b7668e7d0ffcadccde36c4dcfec8.tar.bz2
* Change code to use a static_cast instead of reinterpret_cast
* Add comments * Add two new gep ctors for the very common case of creating a two operand GEP instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14820 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/iMemory.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/include/llvm/iMemory.h b/include/llvm/iMemory.h
index 5421582..dcc647f 100644
--- a/include/llvm/iMemory.h
+++ b/include/llvm/iMemory.h
@@ -273,18 +273,31 @@ public:
///
class GetElementPtrInst : public Instruction {
GetElementPtrInst(const GetElementPtrInst &EPI)
- : Instruction(reinterpret_cast<const Type*>(EPI.getType()), GetElementPtr) {
+ : Instruction((static_cast<const Instruction*>(&EPI)->getType()),
+ GetElementPtr) {
Operands.reserve(EPI.Operands.size());
for (unsigned i = 0, E = EPI.Operands.size(); i != E; ++i)
Operands.push_back(Use(EPI.Operands[i], this));
}
void init(Value *Ptr, const std::vector<Value*> &Idx);
-
+ void init(Value *Ptr, Value *Idx0, Value *Idx1);
public:
+ /// Constructors - Create a getelementptr instruction with a base pointer an
+ /// list of indices. The first ctor can optionally insert before an existing
+ /// instruction, the second appends the new instruction to the specified
+ /// BasicBlock.
GetElementPtrInst(Value *Ptr, const std::vector<Value*> &Idx,
const std::string &Name = "", Instruction *InsertBefore =0);
GetElementPtrInst(Value *Ptr, const std::vector<Value*> &Idx,
const std::string &Name, BasicBlock *InsertAtEnd);
+
+ /// Constructors - These two constructors are convenience methods because two
+ /// index getelementptr instructions are so common.
+ GetElementPtrInst(Value *Ptr, Value *Idx0, Value *Idx1,
+ const std::string &Name = "", Instruction *InsertBefore =0);
+ GetElementPtrInst(Value *Ptr, Value *Idx0, Value *Idx1,
+ const std::string &Name, BasicBlock *InsertAtEnd);
+
virtual Instruction *clone() const { return new GetElementPtrInst(*this); }
// getType - Overload to return most specific pointer type...
@@ -301,6 +314,8 @@ public:
static const Type *getIndexedType(const Type *Ptr,
const std::vector<Value*> &Indices,
bool AllowStructLeaf = false);
+ static const Type *getIndexedType(const Type *Ptr, Value *Idx0, Value *Idx1,
+ bool AllowStructLeaf = false);
inline op_iterator idx_begin() { return op_begin()+1; }
inline const_op_iterator idx_begin() const { return op_begin()+1; }