[llvm] r256656 - Revert "Revert "[ptr-traits] Implement the base pointer traits using the actual""
Robinson, Paul via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 30 21:04:47 PST 2015
> -----Original Message-----
> From: llvm-commits [mailto:llvm-commits-bounces at lists.llvm.org] On Behalf
> Of Chandler Carruth via llvm-commits
> Sent: Wednesday, December 30, 2015 3:37 PM
> To: llvm-commits at lists.llvm.org
> Subject: [llvm] r256656 - Revert "Revert "[ptr-traits] Implement the base
> pointer traits using the actual""
>
> Author: chandlerc
> Date: Wed Dec 30 17:37:25 2015
> New Revision: 256656
>
> URL: http://llvm.org/viewvc/llvm-project?rev=256656&view=rev
> Log:
> Revert "Revert "[ptr-traits] Implement the base pointer traits using the
> actual""
Could we please have the log for this sort of thing use the pattern
Reapply "[ptr-traits] ...
More specifically, use at most one leading "Revert" or "Reapply" word in
the log headline.
I'm reminded of a series some time back that had a half-dozen or so leading
"Revert"s on it, and while that sort of thing is entertaining, it's not
actually that *helpful* when looking at logs. Or email chains.
Not to pick on Chandler specifically, this is just the first example to
come up after I resolved to say something about it.
Thanks,
--paulr
>
> This reverts commit r256642 and restores r256620 now that Tobias has
> updated Polly.
>
> There are still some potential problems with the code in Polly that I've
> sent post-commit review about, but they're unlikely to break anything in
> practice, and I'd like to avoid the rest of LLVM and Clang regressing
> here.
>
> Modified:
> llvm/trunk/include/llvm/Support/PointerLikeTypeTraits.h
>
> Modified: llvm/trunk/include/llvm/Support/PointerLikeTypeTraits.h
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/include/llvm/Support/PointerLikeTypeTraits.h?rev=256656
> &r1=256655&r2=256656&view=diff
> ==========================================================================
> ====
> --- llvm/trunk/include/llvm/Support/PointerLikeTypeTraits.h (original)
> +++ llvm/trunk/include/llvm/Support/PointerLikeTypeTraits.h Wed Dec 30
> 17:37:25 2015
> @@ -15,6 +15,7 @@
> #ifndef LLVM_SUPPORT_POINTERLIKETYPETRAITS_H
> #define LLVM_SUPPORT_POINTERLIKETYPETRAITS_H
>
> +#include "llvm/Support/AlignOf.h"
> #include "llvm/Support/DataTypes.h"
>
> namespace llvm {
> @@ -27,15 +28,32 @@ template <typename T> class PointerLikeT
> // getNumLowBitsAvailable
> };
>
> +namespace detail {
> +/// A tiny meta function to compute the log2 of a compile time constant.
> +template <size_t N>
> +struct ConstantLog2
> + : std::integral_constant<size_t, ConstantLog2<N / 2>::value + 1> {};
> +template <> struct ConstantLog2<1> : std::integral_constant<size_t, 0>
> {};
> +}
> +
> // Provide PointerLikeTypeTraits for non-cvr pointers.
> -template <typename T> class PointerLikeTypeTraits<T *> {
> -public:
> +template <typename T> struct PointerLikeTypeTraits<T *> {
> static inline void *getAsVoidPointer(T *P) { return P; }
> static inline T *getFromVoidPointer(void *P) { return static_cast<T
> *>(P); }
>
> - /// Note, we assume here that malloc returns objects at least 4-byte
> aligned.
> - /// However, this may be wrong, or pointers may be from something other
> than
> - /// malloc. In this case, you should specialize this template to
> reduce this.
> + enum {
> + NumLowBitsAvailable =
> detail::ConstantLog2<AlignOf<T>::Alignment>::value
> + };
> +};
> +
> +template <> struct PointerLikeTypeTraits<void *> {
> + static inline void *getAsVoidPointer(void *P) { return P; }
> + static inline void *getFromVoidPointer(void *P) { return P; }
> +
> + /// Note, we assume here that void* is related to raw malloc'ed memory
> and
> + /// that malloc returns objects at least 4-byte aligned. However, this
> may be
> + /// wrong, or pointers may be from something other than malloc. In this
> case,
> + /// you should specify a real typed pointer or avoid this template.
> ///
> /// All clients should use assertions to do a run-time check to ensure
> that
> /// this is actually true.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list