From: Chris Lattner Date: Fri, 9 May 2008 06:08:39 +0000 (+0000) Subject: parameterize pointer size/align better without doing virtual method calls in normal... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=927686fe8c968ca786fa44d2353eebf59c4f5b8a;p=clang parameterize pointer size/align better without doing virtual method calls in normal case. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50890 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index d135fe00ab..36fbb0d1c2 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -35,11 +35,12 @@ protected: // Target values set by the ctor of the actual target implementation. Default // values are specified by the TargetInfo constructor. bool CharIsSigned; - unsigned WCharWidth, WCharAlign; - unsigned IntWidth, IntAlign; - unsigned DoubleWidth, DoubleAlign; - unsigned LongWidth, LongAlign; - unsigned LongLongWidth, LongLongAlign; + unsigned char PointerWidth, PointerAlign; + unsigned char WCharWidth, WCharAlign; + unsigned char IntWidth, IntAlign; + unsigned char DoubleWidth, DoubleAlign; + unsigned char LongWidth, LongAlign; + unsigned char LongLongWidth, LongLongAlign; const llvm::fltSemantics *FloatFormat, *DoubleFormat, *LongDoubleFormat; @@ -61,9 +62,19 @@ public: bool isCharSigned() const { return CharIsSigned; } /// getPointerWidth - Return the width of pointers on this target, for the - /// specified address space. FIXME: implement correctly. - virtual uint64_t getPointerWidth(unsigned AddrSpace) const { return 32; } - virtual uint64_t getPointerAlign(unsigned AddrSpace) const { return 32; } + /// specified address space. + uint64_t getPointerWidth(unsigned AddrSpace) const { + return AddrSpace == 0 ? PointerWidth : getPointerWidthV(AddrSpace); + } + uint64_t getPointerAlign(unsigned AddrSpace) const { + return AddrSpace == 0 ? PointerAlign : getPointerAlignV(AddrSpace); + } + virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { + return PointerWidth; + } + virtual uint64_t getPointerAlignV(unsigned AddrSpace) const { + return PointerAlign; + } /// getBoolWidth/Align - Return the size of '_Bool' and C++ 'bool' for this /// target, in bits. diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp index dd1fe648d4..e8fc9232e1 100644 --- a/lib/Basic/TargetInfo.cpp +++ b/lib/Basic/TargetInfo.cpp @@ -23,6 +23,7 @@ using namespace clang; TargetInfo::TargetInfo(const std::string &T) : Triple(T) { // Set defaults. These should be overridden by concrete targets as needed. CharIsSigned = true; + PointerWidth = PointerAlign = 32; WCharWidth = WCharAlign = 32; IntWidth = IntAlign = 32; LongWidth = LongAlign = 32; diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 25bc6fbb4d..9c1675d6af 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -869,10 +869,8 @@ namespace { PIC16TargetInfo(const std::string& triple) : TargetInfo(triple) { IntWidth = IntAlign = 16; } - virtual uint64_t getPointerWidth(unsigned AddrSpace) const { return 16; } - virtual uint64_t getPointerAlign(unsigned AddrSpace) const { return 8; } - virtual unsigned getIntWidth() const { return 16; } - virtual unsigned getIntAlign() const { return 8; } + virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { return 16; } + virtual uint64_t getPointerAlignV(unsigned AddrSpace) const { return 8; } virtual void getTargetDefines(std::vector &Defines) const { Define(Defines, "__pic16"); }