[llvm] r211080 - Expose ValueMap's mutex type as a typedef instead of a sys::Mutex.

David Blaikie dblaikie at gmail.com
Mon Jun 16 22:38:06 PDT 2014


I'm assuming this is so you can change smaller amounts of code/work
incrementally, and at the end everything will be std::murex and this new
template parameter can be removed?
On Jun 16, 2014 5:27 PM, "Zachary Turner" <zturner at google.com> wrote:

> Author: zturner
> Date: Mon Jun 16 19:17:38 2014
> New Revision: 211080
>
> URL: http://llvm.org/viewvc/llvm-project?rev=211080&view=rev
> Log:
> Expose ValueMap's mutex type as a typedef instead of a sys::Mutex.
>
> This enables static polymorphism of the mutex type, which is
> necessary in order to replace the standard mutex implementation
> with a different type.
>
> Modified:
>     llvm/trunk/include/llvm/IR/ValueMap.h
>     llvm/trunk/unittests/IR/ValueMapTest.cpp
>
> Modified: llvm/trunk/include/llvm/IR/ValueMap.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/ValueMap.h?rev=211080&r1=211079&r2=211080&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/ValueMap.h (original)
> +++ llvm/trunk/include/llvm/IR/ValueMap.h Mon Jun 16 19:17:38 2014
> @@ -45,8 +45,10 @@ class ValueMapConstIterator;
>  /// This class defines the default behavior for configurable aspects of
>  /// ValueMap<>.  User Configs should inherit from this class to be as
> compatible
>  /// as possible with future versions of ValueMap.
> -template<typename KeyT>
> +template<typename KeyT, typename MutexT = sys::Mutex>
>  struct ValueMapConfig {
> +  typedef MutexT mutex_type;
> +
>    /// If FollowRAUW is true, the ValueMap will update mappings on RAUW.
> If it's
>    /// false, the ValueMap will leave the original mapping in place.
>    enum { FollowRAUW = true };
> @@ -67,7 +69,7 @@ struct ValueMapConfig {
>    /// and onDelete) and not inside other ValueMap methods.  NULL means
> that no
>    /// mutex is necessary.
>    template<typename ExtraDataT>
> -  static sys::Mutex *getMutex(const ExtraDataT &/*Data*/) { return
> nullptr; }
> +  static mutex_type *getMutex(const ExtraDataT &/*Data*/) { return
> nullptr; }
>  };
>
>  /// See the file comment.
> @@ -212,7 +214,7 @@ public:
>    void deleted() override {
>      // Make a copy that won't get changed even when *this is destroyed.
>      ValueMapCallbackVH Copy(*this);
> -    sys::Mutex *M = Config::getMutex(Copy.Map->Data);
> +    typename Config::mutex_type *M = Config::getMutex(Copy.Map->Data);
>      if (M)
>        M->acquire();
>      Config::onDelete(Copy.Map->Data, Copy.Unwrap());  // May destroy
> *this.
> @@ -225,7 +227,7 @@ public:
>             "Invalid RAUW on key of ValueMap<>");
>      // Make a copy that won't get changed even when *this is destroyed.
>      ValueMapCallbackVH Copy(*this);
> -    sys::Mutex *M = Config::getMutex(Copy.Map->Data);
> +    typename Config::mutex_type *M = Config::getMutex(Copy.Map->Data);
>      if (M)
>        M->acquire();
>
>
> Modified: llvm/trunk/unittests/IR/ValueMapTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/ValueMapTest.cpp?rev=211080&r1=211079&r2=211080&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/IR/ValueMapTest.cpp (original)
> +++ llvm/trunk/unittests/IR/ValueMapTest.cpp Mon Jun 16 19:17:38 2014
> @@ -177,10 +177,10 @@ TYPED_TEST(ValueMapTest, ConfiguredColli
>    // TODO: Implement this when someone needs it.
>  }
>
> -template<typename KeyT>
> -struct LockMutex : ValueMapConfig<KeyT> {
> +template<typename KeyT, typename MutexT>
> +struct LockMutex : ValueMapConfig<KeyT, MutexT> {
>    struct ExtraData {
> -    sys::Mutex *M;
> +    mutex_type *M;
>      bool *CalledRAUW;
>      bool *CalledDeleted;
>    };
> @@ -192,15 +192,15 @@ struct LockMutex : ValueMapConfig<KeyT>
>      *Data.CalledDeleted = true;
>      EXPECT_FALSE(Data.M->tryacquire()) << "Mutex should already be
> locked.";
>    }
> -  static sys::Mutex *getMutex(const ExtraData &Data) { return Data.M; }
> +  static mutex_type *getMutex(const ExtraData &Data) { return Data.M; }
>  };
>  #if LLVM_ENABLE_THREADS
>  TYPED_TEST(ValueMapTest, LocksMutex) {
>    sys::Mutex M(false);  // Not recursive.
>    bool CalledRAUW = false, CalledDeleted = false;
> -  typename LockMutex<TypeParam*>::ExtraData Data =
> -    {&M, &CalledRAUW, &CalledDeleted};
> -  ValueMap<TypeParam*, int, LockMutex<TypeParam*> > VM(Data);
> +  typedef LockMutex<TypeParam*, sys::Mutex> ConfigType;
> +  typename ConfigType::ExtraData Data = {&M, &CalledRAUW, &CalledDeleted};
> +  ValueMap<TypeParam*, int, ConfigType> VM(Data);
>    VM[this->BitcastV.get()] = 7;
>    this->BitcastV->replaceAllUsesWith(this->AddV.get());
>    this->AddV.reset();
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140616/985d1893/attachment.html>


More information about the llvm-commits mailing list