[PATCH] TargetInfo: Use DataLayout to compute pointer width in getPointerWidth()
Tom Stellard
tom at stellard.net
Fri Jul 25 11:42:08 PDT 2014
On Wed, Jun 25, 2014 at 02:57:39PM -0700, Matt Arsenault wrote:
> On 06/25/2014 02:10 PM, Tom Stellard wrote:
> > Hi Reid,
> >
> > Here is an updated patch with a Sema test.
> >
> > -Tom
> >
> > On Wed, Jun 25, 2014 at 04:31:52PM -0400, Tom Stellard wrote:
> >> ---
> >> include/clang/Basic/TargetInfo.h | 4 +---
> >> lib/Basic/TargetInfo.cpp | 9 +++++++++
> >> test/CodeGen/record-lowering-non-zero-as.cl | 14 ++++++++++++++
> >> 3 files changed, 24 insertions(+), 3 deletions(-)
> >> create mode 100644 test/CodeGen/record-lowering-non-zero-as.cl
> >>
> >> diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h
> >> index e1d0116..65dc101 100644
> >> --- a/include/clang/Basic/TargetInfo.h
> >> +++ b/include/clang/Basic/TargetInfo.h
> >> @@ -790,9 +790,7 @@ public:
> >> }
> >>
> >> protected:
> >> - virtual uint64_t getPointerWidthV(unsigned AddrSpace) const {
> >> - return PointerWidth;
> >> - }
> >> + virtual uint64_t getPointerWidthV(unsigned AddrSpace) const;
> >> virtual uint64_t getPointerAlignV(unsigned AddrSpace) const {
> >> return PointerAlign;
> >> }
> >> diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp
> >> index 71e39dd..d0f6306 100644
> >> --- a/lib/Basic/TargetInfo.cpp
> >> +++ b/lib/Basic/TargetInfo.cpp
> >> @@ -17,6 +17,7 @@
> >> #include "clang/Basic/LangOptions.h"
> >> #include "llvm/ADT/APFloat.h"
> >> #include "llvm/ADT/STLExtras.h"
> >> +#include "llvm/IR/DataLayout.h"
> >> #include "llvm/Support/ErrorHandling.h"
> >> #include <cstdlib>
> >> using namespace clang;
> >> @@ -242,6 +243,14 @@ bool TargetInfo::isTypeSigned(IntType T) {
> >> };
> >> }
> >>
> >> +uint64_t TargetInfo::getPointerWidthV(unsigned AddrSpace) const {
> >> + if (!DescriptionString)
> >> + return PointerWidth;
> >> +
> >> + llvm::DataLayout DL(DescriptionString);
> >> + return DL.getPointerSizeInBits(AddrSpace);
> >> +}
>
> Can you do this without reparsing the datalayout string every time this
> is used?
>
I wasn't able to find a good way to cache the DataLayout, so I just
implemented this for R600. (See attached patch). I also drop the
requires from the test.
-Tom
> >> +
> >> /// setForcedLangOptions - Set forced language options.
> >> /// Apply changes to the target information with respect to certain
> >> /// language options which change the target configuration.
> >> diff --git a/test/CodeGen/record-lowering-non-zero-as.cl b/test/CodeGen/record-lowering-non-zero-as.cl
> >> new file mode 100644
> >> index 0000000..a96756f
> >> --- /dev/null
> >> +++ b/test/CodeGen/record-lowering-non-zero-as.cl
> >> @@ -0,0 +1,14 @@
> >> +// REQUIRES: r600-registered-target
> >> +// RUN: %clang -target r600 -mcpu=verde -S -emit-llvm -o - %s
> >> +
> >> +// Record lowering was crashing on SI and newer targets, because it
> >> +// was using the wrong size for test::ptr. Since global memory
> >> +// has 64-bit pointers, sizeof(test::ptr) should be 8.
> >> +
> >> +struct test {
> >> + global int *ptr;
> >> +};
> >> +
> >> +void func(struct test t, global int *ptr) {
> >> + *ptr = 0;
> >> +}
> >> --
> >> 1.8.1.5
> >>
> >> _______________________________________________
> >> cfe-commits mailing list
> >> cfe-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> >>
> >>
> >> _______________________________________________
> >> cfe-commits mailing list
> >> cfe-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-R600-Implement-getPointerWidthV.patch
Type: text/x-diff
Size: 2426 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140725/3b8b44f2/attachment.patch>
More information about the cfe-commits
mailing list