From 2577c22131fbcf58cefdad63114c3e14a9d00c26 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Fri, 12 May 2006 07:01:44 +0000 Subject: [PATCH] Add a method to generate a string representation from a TargetData. This continues the work on PR 761. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28239 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Target/TargetData.h | 5 +++++ lib/Target/TargetData.cpp | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/llvm/Target/TargetData.h b/include/llvm/Target/TargetData.h index 26821bd8a7b..428d05fdd5c 100644 --- a/include/llvm/Target/TargetData.h +++ b/include/llvm/Target/TargetData.h @@ -94,6 +94,11 @@ public: unsigned char getPointerSize() const { return PointerSize; } unsigned char getPointerSizeInBits() const { return 8*PointerSize; } + /// getStringRepresentation - Return the string representation of the + /// TargetData. This representation is in the same format accepted by the + /// string constructor above. + std::string getStringRepresentation() const; + /// getTypeSize - Return the number of bytes necessary to hold the specified /// type. /// diff --git a/lib/Target/TargetData.cpp b/lib/Target/TargetData.cpp index 14ce6e89de7..f7c0d7800b7 100644 --- a/lib/Target/TargetData.cpp +++ b/lib/Target/TargetData.cpp @@ -25,6 +25,7 @@ #include "llvm/ADT/StringExtras.h" #include #include +#include using namespace llvm; // Handle the Pass registration stuff necessary to use TargetData's. @@ -218,6 +219,26 @@ TargetData::~TargetData() { } } +std::string TargetData::getStringRepresentation() const { + std::stringstream repr; + + if (LittleEndian) + repr << "e"; + else + repr << "E"; + + repr << "-p:" << (PointerSize * 8) << ":" << (PointerAlignment * 8); + repr << "-d:64:" << (DoubleAlignment * 8); + repr << "-f:32:" << (FloatAlignment * 8); + repr << "-l:64:" << (LongAlignment * 8); + repr << "-i:32:" << (IntAlignment * 8); + repr << "-s:16:" << (ShortAlignment * 8); + repr << "-b:8:" << (ByteAlignment * 8); + repr << "-B:8:" << (BoolAlignment * 8); + + return repr.str(); +} + const StructLayout *TargetData::getStructLayout(const StructType *Ty) const { if (Layouts == 0) Layouts = new std::map,