[llvm-commits] CVS: llvm/include/llvm/iMemory.h

Chris Lattner lattner at cs.uiuc.edu
Wed Jul 14 11:14:04 PDT 2004



Changes in directory llvm/include/llvm:

iMemory.h updated: 1.47 -> 1.48

---
Log message:

* 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.




---
Diffs of the changes:  (+17 -2)

Index: llvm/include/llvm/iMemory.h
diff -u llvm/include/llvm/iMemory.h:1.47 llvm/include/llvm/iMemory.h:1.48
--- llvm/include/llvm/iMemory.h:1.47	Thu Jul  1 15:22:31 2004
+++ llvm/include/llvm/iMemory.h	Wed Jul 14 13:13:54 2004
@@ -273,18 +273,31 @@
 ///
 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...
@@ -300,6 +313,8 @@
   ///
   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; }





More information about the llvm-commits mailing list