Add new function getPtrPtrFromArrayPtr().
authorAlkis Evlogimenos <alkis@evlogimenos.com>
Sat, 19 Mar 2005 11:40:31 +0000 (11:40 +0000)
committerAlkis Evlogimenos <alkis@evlogimenos.com>
Sat, 19 Mar 2005 11:40:31 +0000 (11:40 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20684 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Constants.h
lib/VMCore/Constants.cpp

index 91e7b208a21b08ce335b214e93e68272c2a20537..99b768f69b49ba92f40c9cad3f80ebb3a76d36f0 100644 (file)
@@ -562,6 +562,10 @@ public:
   ///
   static Constant *getSizeOf(const Type *Ty);
 
+  /// getPtrPtrFromArrayPtr constant expr - given a pointer to a constant array,
+  /// return a pointer to a pointer of the array element type.
+  static Constant *getPtrPtrFromArrayPtr(Constant *C);
+
   /// ConstantExpr::get - Return a binary or shift operator constant expression,
   /// folding if possible.
   ///
index 71754fdac4b93428ee875bcd06a507e18f75c062..ee60f804b3cbd765d9962d3bb0d3726478db340b 100644 (file)
@@ -1298,6 +1298,13 @@ Constant *ConstantExpr::getSizeOf(const Type *Ty) {
     Type::ULongTy);
 }
 
+Constant *ConstantExpr::getPtrPtrFromArrayPtr(Constant *C) {
+  // pointer from array is implemented as: getelementptr arr ptr, 0, 0
+  static std::vector<Constant*> Indices(2, ConstantUInt::get(Type::UIntTy, 0));
+
+  return ConstantExpr::getGetElementPtr(C, Indices);
+}
+
 Constant *ConstantExpr::getTy(const Type *ReqTy, unsigned Opcode,
                               Constant *C1, Constant *C2) {
   if (Opcode == Instruction::Shl || Opcode == Instruction::Shr)