mt_allocator.h (__mt_alloc<>::allocate): Factor out some duplicated code.
authorPaolo Carlini <pcarlini@suse.de>
Sat, 3 Apr 2004 13:39:16 +0000 (13:39 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sat, 3 Apr 2004 13:39:16 +0000 (13:39 +0000)
2004-04-03  Paolo Carlini  <pcarlini@suse.de>

* include/ext/mt_allocator.h (__mt_alloc<>::allocate): Factor out
some duplicated code.
(__mt_alloc<>::_Bin_record): Spare the space of _M_free and _M_used
in the single threaded case.
* testsuite/performance/20_util/allocator/list_sort_search.cc:
Reorder and renumber the tests consistently with the other testfiles.
* testsuite/performance/20_util/allocator/map_mt_find.cc: Ditto.
* testsuite/performance/20_util/allocator/map_thread.cc: Ditto.
* testsuite/performance/20_util/allocator/producer_consumer.cc: Ditto.

From-SVN: r80375

libstdc++-v3/ChangeLog
libstdc++-v3/include/ext/mt_allocator.h
libstdc++-v3/testsuite/performance/20_util/allocator/list_sort_search.cc
libstdc++-v3/testsuite/performance/20_util/allocator/map_mt_find.cc
libstdc++-v3/testsuite/performance/20_util/allocator/map_thread.cc
libstdc++-v3/testsuite/performance/20_util/allocator/producer_consumer.cc

index 3248c3243bcaf963f97320efb3cbb1abe7a48ea3..39cfd05674a196a652ffd267e2f6a1710ec2147d 100644 (file)
@@ -1,3 +1,15 @@
+2004-04-03  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/ext/mt_allocator.h (__mt_alloc<>::allocate): Factor out
+       some duplicated code.
+       (__mt_alloc<>::_Bin_record): Spare the space of _M_free and _M_used
+       in the single threaded case.
+       * testsuite/performance/20_util/allocator/list_sort_search.cc:
+       Reorder and renumber the tests consistently with the other testfiles.
+       * testsuite/performance/20_util/allocator/map_mt_find.cc: Ditto.
+       * testsuite/performance/20_util/allocator/map_thread.cc: Ditto.
+       * testsuite/performance/20_util/allocator/producer_consumer.cc: Ditto.
+
 2004-04-02  Paolo Carlini  <pcarlini@suse.de>
 
        * include/ext/mt_allocator.h (__mt_alloc<>::deallocate):
index d69b0e1ebd9152c1ac9246d4b3d7190ca1f73ac0..401fc3f0d45ab7abdaf8c0befe88f1572ceb9dd2 100644 (file)
@@ -228,8 +228,8 @@ namespace __gnu_cxx
        // Points to the block_record of the next free block.
         _Block_record* volatile         _M_next;
 
-       // The thread id of the thread which has requested this block.
 #ifdef __GTHREADS
+       // The thread id of the thread which has requested this block.
         size_t                          _M_thread_id;
 #endif
       };
@@ -241,6 +241,7 @@ namespace __gnu_cxx
        // for _S_max_threads + global pool 0.
         _Block_record** volatile        _M_first;
 
+#ifdef __GTHREADS
        // An "array" of counters used to keep track of the amount of
        // blocks that are on the freelist/used for each thread id.
        // Memory to these "arrays" is allocated in _S_initialize() for
@@ -251,7 +252,6 @@ namespace __gnu_cxx
        // Each bin has its own mutex which is used to ensure data
        // integrity while changing "ownership" on a block.  The mutex
        // is initialized in _S_initialize().
-#ifdef __GTHREADS
         __gthread_mutex_t*              _M_mutex;
 #endif
       };
@@ -359,14 +359,6 @@ namespace __gnu_cxx
                    }
                  __gthread_mutex_unlock(__bin._M_mutex);
                }
-             
-             // Return the first newly added block in our list and
-             // update the counters
-             __block = __bin._M_first[__thread_id];
-             __bin._M_first[__thread_id] = __bin._M_first[__thread_id]->_M_next;
-             __block->_M_thread_id = __thread_id;
-             --__bin._M_free[__thread_id];
-             ++__bin._M_used[__thread_id];
            }
          else
 #endif
@@ -384,28 +376,20 @@ namespace __gnu_cxx
                  --__block_count;
                }
              __block->_M_next = NULL;
-             
-             // Remove from list.
-             __block = __bin._M_first[0];
-             __bin._M_first[0] = __bin._M_first[0]->_M_next;
            }
        }
-      else
-       {
-         // "Default" operation - we have blocks on our own freelist
-         // grab the first record and update the counters.
-         __block = __bin._M_first[__thread_id];
-         __bin._M_first[__thread_id] = __bin._M_first[__thread_id]->_M_next;
 
+      __block = __bin._M_first[__thread_id];
+      __bin._M_first[__thread_id] = __bin._M_first[__thread_id]->_M_next;
 #ifdef __GTHREADS
-         if (__gthread_active_p())
-           {
-             __block->_M_thread_id = __thread_id;
-             --__bin._M_free[__thread_id];
-             ++__bin._M_used[__thread_id];
-           }
-#endif
+      if (__gthread_active_p())
+       {
+         __block->_M_thread_id = __thread_id;
+         --__bin._M_free[__thread_id];
+         ++__bin._M_used[__thread_id];
        }
+#endif
+
       char* __c = reinterpret_cast<char*>(__block) + sizeof(_Block_record);
       return static_cast<_Tp*>(static_cast<void*>(__c));
     }
index f39e814752aaaa7df66050940e34283d2b5cef8a..317a615b4362a621bb845de8cff37d6f631c32ef 100644 (file)
@@ -116,10 +116,10 @@ int main ()
   do_test<malloc_allocator<int> >();
 #endif
 #ifdef TEST_S2
-  do_test<bitmap_allocator<int> >();
+  do_test<__mt_alloc<int> >();
 #endif
 #ifdef TEST_S3
-  do_test<__mt_alloc<int> >();
+  do_test<bitmap_allocator<int> >();
 #endif
 #ifdef TEST_S4
   do_test<__pool_alloc<int> >();
index 35bba56e473bdc2597bd56bde19ea19a4b39ecd7..2ee20f23d687886ab20bd2a475bb513665d48316 100644 (file)
@@ -142,10 +142,10 @@ int main()
   exec_tests<malloc_allocator<int> >();
 #endif
 #ifdef TEST_T2
-  exec_tests<bitmap_allocator<int> >();
+  exec_tests<__mt_alloc<int> >();
 #endif
 #ifdef TEST_T3
-  exec_tests<__mt_alloc<int> >();
+  exec_tests<bitmap_allocator<int> >();
 #endif
 #ifdef TEST_T4
   exec_tests<__pool_alloc<int> >();
index 667d50b171e4b092758cd62c82b69de92bb91e4e..c9cf34c6096218523b10a69e4f63ca2811c3a997 100644 (file)
@@ -111,23 +111,23 @@ template<typename Container>
 
 int main(void)
 {
-#ifdef TEST_T1
+#ifdef TEST_T0
   test_container(map<int, int>());
 #endif
-#ifdef TEST_T2
+#ifdef TEST_T1
   test_container(map<int, int, less<const int>, new_allocator<int> >());
 #endif
-#ifdef TEST_T3
+#ifdef TEST_T2
   test_container(map<int, int, less<const int>, malloc_allocator<int> >());
 #endif
-#ifdef TEST_T4
+#ifdef TEST_T3
   test_container(map<int, int, less<const int>,
                      __mt_alloc< pair<const int, int> > >());
 #endif
-#ifdef TEST_T5
+#ifdef TEST_T4
   test_container(map<int, int, less<const int>, bitmap_allocator<int> >());
 #endif
-#ifdef TEST_T6
+#ifdef TEST_T5
   test_container(map<int, int, less<const int>, __pool_alloc<int> >());
 #endif
   return 0;
index 4e13a5cc0b2f6f9c0fb3e0213212b36fb2309fee..98f39c19709f685a7c4434a38ad4f38f2451dd16 100644 (file)
@@ -290,51 +290,51 @@ template<typename Container>
 
 int main(void)
 {
-#ifdef TEST_T1
+#ifdef TEST_T0
   test_container(vector<test_type, malloc_alloc_type>());
 #endif
-#ifdef TEST_T2
+#ifdef TEST_T1
   test_container(vector<test_type, new_alloc_type>());
 #endif
-#ifdef TEST_T3
+#ifdef TEST_T2
   test_container(vector<test_type, so_alloc_type>());
 #endif
-#ifdef TEST_T4
+#ifdef TEST_T3
   test_container(vector<test_type, bit_alloc_type>());
 #endif
-#ifdef TEST_T5
+#ifdef TEST_T4
   test_container(vector<test_type, po_alloc_type>());
 #endif
 
-#ifdef TEST_T6
+#ifdef TEST_T5
   test_container(list<test_type, malloc_alloc_type>());
 #endif
-#ifdef TEST_T7
+#ifdef TEST_T6
   test_container(list<test_type, new_alloc_type>());
 #endif
-#ifdef TEST_T8
+#ifdef TEST_T7
   test_container(list<test_type, so_alloc_type>());
 #endif
-#ifdef TEST_T9
+#ifdef TEST_T8
   test_container(list<test_type, bit_alloc_type>());
 #endif
-#ifdef TEST_T10
+#ifdef TEST_T9
   test_container(list<test_type, po_alloc_type>());
 #endif
 
-#ifdef TEST_T11
+#ifdef TEST_T10
   test_container(map<test_type, test_type, compare_type, malloc_alloc_type>());
 #endif
-#ifdef TEST_T12
+#ifdef TEST_T11
   test_container(map<test_type, test_type, compare_type, new_alloc_type>());
 #endif
-#ifdef TEST_T13
+#ifdef TEST_T12
   test_container(map<test_type, test_type, compare_type, so_alloc_type>());
 #endif
-#ifdef TEST_T14
+#ifdef TEST_T13
   test_container(map<test_type, test_type, compare_type, bit_alloc_type>());
 #endif
-#ifdef TEST_T15
+#ifdef TEST_T14
   test_container(map<test_type, test_type, compare_type, po_alloc_type>());
 #endif