[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