Adding smart_ptr benchmark

Initial draft here:
https://reviews.llvm.org/D22470
... though this is Eric Fiselier's rewrite to fit in with Google
Benchmark.

llvm-svn: 277373
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: adb6d28b0f5e6d7a89e77208724a7a5baee438b7
diff --git a/benchmarks/util_smartptr.bench.cpp b/benchmarks/util_smartptr.bench.cpp
new file mode 100644
index 0000000..3b27d78
--- /dev/null
+++ b/benchmarks/util_smartptr.bench.cpp
@@ -0,0 +1,42 @@
+//===----------------------------------------------------------------------===//

+//

+//                     The LLVM Compiler Infrastructure

+//

+// This file is dual licensed under the MIT and the University of Illinois Open

+// Source Licenses. See LICENSE.TXT for details.

+//

+//===----------------------------------------------------------------------===//

+

+#include <memory>

+

+#include "benchmark/benchmark_api.h"

+

+static void BM_SharedPtrCreateDestroy(benchmark::State& st) {

+  while (st.KeepRunning()) {

+    auto sp = std::make_shared<int>(42);

+    benchmark::DoNotOptimize(sp.get());

+  }

+}

+BENCHMARK(BM_SharedPtrCreateDestroy);

+

+static void BM_SharedPtrIncDecRef(benchmark::State& st) {

+  auto sp = std::make_shared<int>(42);

+  benchmark::DoNotOptimize(sp.get());

+  while (st.KeepRunning()) {

+    std::shared_ptr<int> sp2(sp);

+    benchmark::ClobberMemory();

+  }

+}

+BENCHMARK(BM_SharedPtrIncDecRef);

+

+static void BM_WeakPtrIncDecRef(benchmark::State& st) {

+  auto sp = std::make_shared<int>(42);

+  benchmark::DoNotOptimize(sp.get());

+  while (st.KeepRunning()) {

+    std::weak_ptr<int> wp(sp);

+    benchmark::ClobberMemory();

+  }

+}

+BENCHMARK(BM_WeakPtrIncDecRef);

+

+BENCHMARK_MAIN()