From 1cecd3a1d2846315c00cb1cf122372d7e096af8a Mon Sep 17 00:00:00 2001 From: Alkis Evlogimenos Date: Sat, 19 Mar 2005 11:40:31 +0000 Subject: [PATCH] Add new function getPtrPtrFromArrayPtr(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20684 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Constants.h | 4 ++++ lib/VMCore/Constants.cpp | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index 91e7b208a21..99b768f69b4 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -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. /// diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 71754fdac4b..ee60f804b3c 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -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 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)