[llvm-commits] [PATCH] Cleanup DataLayout
Villmow, Micah
Micah.Villmow at amd.com
Fri Oct 26 10:16:10 PDT 2012
Yeah, I noticed that, but this API is only passed poitner types, I'll add in an assert just to be clear.
I noticed that getIntPtrTy does not have this gaurantee, because you are getting a pointer type based on the passed in type, not that the passed in type is a pointer also.
> -----Original Message-----
> From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-
> bounces at cs.uiuc.edu] On Behalf Of Duncan Sands
> Sent: Friday, October 26, 2012 10:10 AM
> To: llvm-commits at cs.uiuc.edu
> Subject: Re: [llvm-commits] [PATCH] Cleanup DataLayout
>
> Hi Micah, I just did something similar in my own tree but masses of
> tests fail because I put an assertion that the type actually is a
> pointer type (or vector of pointer type), and unfortunately random non
> pointer types are being passed in all over the place. So I don't think
> you addressed a core
> issue: that only pointer types have address spaces, and trying to use
> any of these routines on a non pointer type should assert, and not do
> something meaningless (like use address space 0).
>
> Ciao, Duncan.
>
> On 26/10/12 18:56, Micah Villmow wrote:
> > Hi chandlerc,
> >
> > This is a patch to cleanup the getPointerTypeSizeInBits API.
> >
> > http://llvm-reviews.chandlerc.com/D84
> >
> > Files:
> > include/llvm/DataLayout.h
> > lib/VMCore/DataLayout.cpp
> >
> > Index: include/llvm/DataLayout.h
> > ===================================================================
> > --- include/llvm/DataLayout.h
> > +++ include/llvm/DataLayout.h
> > @@ -238,6 +238,7 @@
> > }
> > return val->second.ABIAlign;
> > }
> > +
> > /// Return target's alignment for stack-based pointers
> > unsigned getPointerPrefAlignment(unsigned AS) const {
> > DenseMap<unsigned, PointerAlignElem>::const_iterator val =
> > Pointers.find(AS); @@ -246,6 +247,7 @@
> > }
> > return val->second.PrefAlign;
> > }
> > +
> > /// Layout pointer size
> > unsigned getPointerSize(unsigned AS) const {
> > DenseMap<unsigned, PointerAlignElem>::const_iterator val =
> > Pointers.find(AS); @@ -254,6 +256,7 @@
> > }
> > return val->second.TypeBitWidth;
> > }
> > +
> > /// Layout pointer size, in bits
> > unsigned getPointerSizeInBits(unsigned AS) const {
> > DenseMap<unsigned, PointerAlignElem>::const_iterator val =
> > Pointers.find(AS); @@ -262,12 +265,15 @@
> > }
> > return 8*val->second.TypeBitWidth;
> > }
> > - /// Layout pointer size, in bits, based on the type.
> > +
> > + /// \brief Layout pointer size, in bits, based on the type.
> > + ///
> > /// If this function is called with a pointer type, then
> > /// the type size of the pointer is returned.
> > /// If this function is called with a vector of pointers,
> > /// then the type size of the pointer is returned.
> > - /// Otherwise the type sizeo f a default pointer is returned.
> > + ///
> > + /// \returns Returns the size in bits of the pointer type.
> > unsigned getPointerTypeSizeInBits(Type* Ty) const;
> >
> > /// Size examples:
> > Index: lib/VMCore/DataLayout.cpp
> > ===================================================================
> > --- lib/VMCore/DataLayout.cpp
> > +++ lib/VMCore/DataLayout.cpp
> > @@ -524,13 +524,13 @@
> > return OS.str();
> > }
> >
> > -unsigned DataLayout::getPointerTypeSizeInBits(Type *Ty) const -{
> > - if (Ty->isPointerTy()) return getTypeSizeInBits(Ty);
> > - if (Ty->isVectorTy()
> > - && cast<VectorType>(Ty)->getElementType()->isPointerTy())
> > - return getTypeSizeInBits(cast<VectorType>(Ty)-
> >getElementType());
> > - return getPointerSizeInBits(0);
> > +unsigned DataLayout::getPointerTypeSizeInBits(Type *Ty) const {
> > + // If the type is a vector, then use the address
> > + // space of the element pointer type.
> > + if (Ty->isVectorTy()) Ty = Ty->getVectorElementType();
> > +
> > + // Return the size of the pointer type.
> > + return getPointerSizeInBits(Ty->getPointerAddressSpace());
> > }
> >
> > uint64_t DataLayout::getTypeSizeInBits(Type *Ty) const {
> >
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list