Revision: 23077
Author: [email protected]
Date: Tue Aug 12 12:37:50 2014 UTC
Log: Use CommonNodeCache for heap constants in ChangeLowering.
TEST=compiler-unittests
[email protected]
Review URL: https://codereview.chromium.org/466673004
http://code.google.com/p/v8/source/detail?r=23077
Added:
/branches/bleeding_edge/test/compiler-unittests/common-node-cache-unittest.cc
/branches/bleeding_edge/test/compiler-unittests/node-cache-unittest.cc
Deleted:
/branches/bleeding_edge/test/cctest/compiler/test-node-cache.cc
Modified:
/branches/bleeding_edge/src/compiler/change-lowering.cc
/branches/bleeding_edge/src/compiler/common-node-cache.h
/branches/bleeding_edge/src/compiler/node-cache.cc
/branches/bleeding_edge/src/compiler/node-cache.h
/branches/bleeding_edge/test/cctest/cctest.gyp
/branches/bleeding_edge/test/compiler-unittests/compiler-unittests.gyp
/branches/bleeding_edge/testing/gtest-type-names.h
=======================================
--- /dev/null
+++
/branches/bleeding_edge/test/compiler-unittests/common-node-cache-unittest.cc
Tue Aug 12 12:37:50 2014 UTC
@@ -0,0 +1,125 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "src/compiler/common-node-cache.h"
+#include "src/compiler/common-operator.h"
+#include "src/compiler/graph.h"
+#include "test/compiler-unittests/compiler-unittests.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+using testing::AllOf;
+using testing::IsNull;
+using testing::NotNull;
+using testing::Pointee;
+
+namespace v8 {
+namespace internal {
+namespace compiler {
+
+class CommonNodeCacheTest : public CompilerTest {
+ public:
+ CommonNodeCacheTest() : cache_(zone()), common_(zone()), graph_(zone())
{}
+ virtual ~CommonNodeCacheTest() {}
+
+ protected:
+ Factory* factory() const { return isolate()->factory(); }
+ CommonNodeCache* cache() { return &cache_; }
+ CommonOperatorBuilder* common() { return &common_; }
+ Graph* graph() { return &graph_; }
+
+ private:
+ CommonNodeCache cache_;
+ CommonOperatorBuilder common_;
+ Graph graph_;
+};
+
+
+TEST_F(CommonNodeCacheTest, FindInt32Constant) {
+ Node** l42 = cache()->FindInt32Constant(42);
+ ASSERT_THAT(l42, AllOf(NotNull(), Pointee(IsNull())));
+ Node* n42 = *l42 = graph()->NewNode(common()->Int32Constant(42));
+
+ Node** l0 = cache()->FindInt32Constant(0);
+ ASSERT_THAT(l0, AllOf(NotNull(), Pointee(IsNull())));
+ Node* n0 = *l0 = graph()->NewNode(common()->Int32Constant(0));
+
+ EXPECT_THAT(cache()->FindInt32Constant(42), AllOf(l42, Pointee(n42)));
+ EXPECT_THAT(cache()->FindInt32Constant(0), AllOf(l0, Pointee(n0)));
+ EXPECT_THAT(cache()->FindInt32Constant(42), AllOf(l42, Pointee(n42)));
+ EXPECT_THAT(cache()->FindInt32Constant(0), AllOf(l0, Pointee(n0)));
+}
+
+
+TEST_F(CommonNodeCacheTest, FindFloat64Constant) {
+ Node** l42 = cache()->FindFloat64Constant(42.0);
+ ASSERT_THAT(l42, AllOf(NotNull(), Pointee(IsNull())));
+ Node* n42 = *l42 = graph()->NewNode(common()->Float64Constant(42.0));
+
+ Node** l0 = cache()->FindFloat64Constant(0.0);
+ ASSERT_THAT(l0, AllOf(NotNull(), Pointee(IsNull())));
+ Node* n0 = *l0 = graph()->NewNode(common()->Float64Constant(0.0));
+
+ EXPECT_THAT(cache()->FindFloat64Constant(42.0), AllOf(l42,
Pointee(n42)));
+ EXPECT_THAT(cache()->FindFloat64Constant(0.0), AllOf(l0, Pointee(n0)));
+ EXPECT_THAT(cache()->FindFloat64Constant(42.0), AllOf(l42,
Pointee(n42)));
+ EXPECT_THAT(cache()->FindFloat64Constant(0.0), AllOf(l0, Pointee(n0)));
+}
+
+
+TEST_F(CommonNodeCacheTest, FindExternalConstant) {
+ ExternalReference i = ExternalReference::isolate_address(isolate());
+ Node** li = cache()->FindExternalConstant(i);
+ ASSERT_THAT(li, AllOf(NotNull(), Pointee(IsNull())));
+ Node* ni = *li = graph()->NewNode(common()->ExternalConstant(i));
+
+ ExternalReference m = ExternalReference::address_of_min_int();
+ Node** lm = cache()->FindExternalConstant(m);
+ ASSERT_THAT(lm, AllOf(NotNull(), Pointee(IsNull())));
+ Node* nm = *lm = graph()->NewNode(common()->ExternalConstant(m));
+
+ EXPECT_THAT(cache()->FindExternalConstant(i), AllOf(li, Pointee(ni)));
+ EXPECT_THAT(cache()->FindExternalConstant(m), AllOf(lm, Pointee(nm)));
+ EXPECT_THAT(cache()->FindExternalConstant(i), AllOf(li, Pointee(ni)));
+ EXPECT_THAT(cache()->FindExternalConstant(m), AllOf(lm, Pointee(nm)));
+}
+
+
+TEST_F(CommonNodeCacheTest, FindNumberConstant) {
+ Node** l42 = cache()->FindNumberConstant(42.0);
+ ASSERT_THAT(l42, AllOf(NotNull(), Pointee(IsNull())));
+ Node* n42 = *l42 = graph()->NewNode(common()->NumberConstant(42.0));
+
+ Node** l0 = cache()->FindNumberConstant(0.0);
+ ASSERT_THAT(l0, AllOf(NotNull(), Pointee(IsNull())));
+ Node* n0 = *l0 = graph()->NewNode(common()->NumberConstant(0.0));
+
+ EXPECT_THAT(cache()->FindNumberConstant(42.0), AllOf(l42, Pointee(n42)));
+ EXPECT_THAT(cache()->FindNumberConstant(0.0), AllOf(l0, Pointee(n0)));
+ EXPECT_THAT(cache()->FindNumberConstant(42.0), AllOf(l42, Pointee(n42)));
+ EXPECT_THAT(cache()->FindNumberConstant(0.0), AllOf(l0, Pointee(n0)));
+}
+
+
+TEST_F(CommonNodeCacheTest, FindHeapConstant) {
+ PrintableUnique<HeapObject> n =
PrintableUnique<HeapObject>::CreateImmovable(
+ zone(), factory()->null_value());
+ Node** ln = cache()->FindHeapConstant(n);
+ ASSERT_THAT(ln, AllOf(NotNull(), Pointee(IsNull())));
+ Node* nn = *ln = graph()->NewNode(common()->HeapConstant(n));
+
+ PrintableUnique<HeapObject> t =
PrintableUnique<HeapObject>::CreateImmovable(
+ zone(), factory()->true_value());
+ Node** lt = cache()->FindHeapConstant(t);
+ ASSERT_THAT(lt, AllOf(NotNull(), Pointee(IsNull())));
+ Node* nt = *lt = graph()->NewNode(common()->HeapConstant(t));
+
+ EXPECT_THAT(cache()->FindHeapConstant(n), AllOf(ln, Pointee(nn)));
+ EXPECT_THAT(cache()->FindHeapConstant(t), AllOf(lt, Pointee(nt)));
+ EXPECT_THAT(cache()->FindHeapConstant(n), AllOf(ln, Pointee(nn)));
+ EXPECT_THAT(cache()->FindHeapConstant(t), AllOf(lt, Pointee(nt)));
+}
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
=======================================
--- /dev/null
+++ /branches/bleeding_edge/test/compiler-unittests/node-cache-unittest.cc
Tue Aug 12 12:37:50 2014 UTC
@@ -0,0 +1,129 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <algorithm>
+
+#include "src/base/utils/random-number-generator.h"
+#include "src/compiler/node.h"
+#include "src/compiler/node-cache.h"
+#include "src/flags.h"
+#include "test/compiler-unittests/compiler-unittests.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest-type-names.h"
+
+using testing::AllOf;
+using testing::IsNull;
+using testing::NotNull;
+using testing::Pointee;
+
+namespace v8 {
+namespace internal {
+namespace compiler {
+
+template <typename T>
+class NodeCacheTest : public CompilerTest {
+ public:
+ NodeCacheTest() : rng_(FLAG_random_seed) {}
+ virtual ~NodeCacheTest() {}
+
+ protected:
+ NodeCache<T>* cache() { return &cache_; }
+ base::RandomNumberGenerator* rng() { return &rng_; }
+
+ void GenerateRandom(T* first, T* last) {
+ for (T* i = first; i != last; ++i) {
+ do {
+ *i = GenerateRandom();
+ } while (std::find(first, i, *i) != i);
+ }
+ }
+
+ private:
+ T GenerateRandom();
+
+ NodeCache<T> cache_;
+ base::RandomNumberGenerator rng_;
+};
+
+
+template <>
+int32_t NodeCacheTest<int32_t>::GenerateRandom() {
+ return rng()->NextInt();
+}
+
+
+template <>
+int64_t NodeCacheTest<int64_t>::GenerateRandom() {
+ int64_t v;
+ rng()->NextBytes(&v, sizeof(v));
+ return v;
+}
+
+
+typedef ::testing::Types<int32_t, int64_t> NodeCacheTypes;
+TYPED_TEST_CASE(NodeCacheTest, NodeCacheTypes);
+
+
+TYPED_TEST(NodeCacheTest, BackToBack) {
+ static const size_t kSize = 100;
+ TypeParam values[kSize];
+ this->GenerateRandom(&values[0], &values[kSize]);
+ for (const TypeParam* i = &values[0]; i != &values[kSize]; ++i) {
+ TypeParam value = *i;
+ SCOPED_TRACE(::testing::Message() << "value " << value);
+ Node** location = this->cache()->Find(this->zone(), value);
+ ASSERT_THAT(location, AllOf(NotNull(), Pointee(IsNull())));
+ for (int attempt = 1; attempt < 4; ++attempt) {
+ SCOPED_TRACE(::testing::Message() << "attempt " << attempt);
+ EXPECT_EQ(location, this->cache()->Find(this->zone(), value));
+ }
+ }
+}
+
+
+TYPED_TEST(NodeCacheTest, MinimumSize) {
+ static const size_t kSize = 5;
+ TypeParam values[kSize];
+ this->GenerateRandom(&values[0], &values[kSize]);
+ Node** locations[kSize];
+ Node* nodes = this->zone()->template NewArray<Node>(kSize);
+ for (size_t i = 0; i < kSize; ++i) {
+ locations[i] = this->cache()->Find(this->zone(), values[i]);
+ ASSERT_THAT(locations[i], NotNull());
+ EXPECT_EQ(&locations[i],
+ std::find(&locations[0], &locations[i], locations[i]));
+ *locations[i] = &nodes[i];
+ }
+ for (size_t i = 0; i < kSize; ++i) {
+ EXPECT_EQ(locations[i], this->cache()->Find(this->zone(), values[i]));
+ }
+}
+
+
+TYPED_TEST(NodeCacheTest, MinimumHits) {
+ static const size_t kSize = 250;
+ static const size_t kMinHits = 10;
+ TypeParam* values = this->zone()->template NewArray<TypeParam>(kSize);
+ this->GenerateRandom(&values[0], &values[kSize]);
+ Node* nodes = this->zone()->template NewArray<Node>(kSize);
+ for (size_t i = 0; i < kSize; ++i) {
+ Node** location = this->cache()->Find(this->zone(), values[i]);
+ ASSERT_THAT(location, AllOf(NotNull(), Pointee(IsNull())));
+ *location = &nodes[i];
+ }
+ size_t hits = 0;
+ for (size_t i = 0; i < kSize; ++i) {
+ Node** location = this->cache()->Find(this->zone(), values[i]);
+ ASSERT_THAT(location, NotNull());
+ if (*location != NULL) {
+ EXPECT_EQ(&nodes[i], *location);
+ ++hits;
+ }
+ }
+ EXPECT_GE(hits, kMinHits);
+}
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
=======================================
--- /branches/bleeding_edge/test/cctest/compiler/test-node-cache.cc Wed Jul
30 13:54:45 2014 UTC
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "src/v8.h"
-
-#include "graph-tester.h"
-#include "src/compiler/common-operator.h"
-#include "src/compiler/node-cache.h"
-
-using namespace v8::internal;
-using namespace v8::internal::compiler;
-
-TEST(Int32Constant_back_to_back) {
- GraphTester graph;
- Int32NodeCache cache;
-
- for (int i = -2000000000; i < 2000000000; i += 3315177) {
- Node** pos = cache.Find(graph.zone(), i);
- CHECK_NE(NULL, pos);
- for (int j = 0; j < 3; j++) {
- Node** npos = cache.Find(graph.zone(), i);
- CHECK_EQ(pos, npos);
- }
- }
-}
-
-
-TEST(Int32Constant_five) {
- GraphTester graph;
- Int32NodeCache cache;
- CommonOperatorBuilder common(graph.zone());
-
- int32_t constants[] = {static_cast<int32_t>(0x80000000), -77, 0, 1, -1};
-
- Node* nodes[ARRAY_SIZE(constants)];
-
- for (size_t i = 0; i < ARRAY_SIZE(constants); i++) {
- int32_t k = constants[i];
- Node* node = graph.NewNode(common.Int32Constant(k));
- *cache.Find(graph.zone(), k) = nodes[i] = node;
- }
-
- for (size_t i = 0; i < ARRAY_SIZE(constants); i++) {
- int32_t k = constants[i];
- CHECK_EQ(nodes[i], *cache.Find(graph.zone(), k));
- }
-}
-
-
-TEST(Int32Constant_hits) {
- GraphTester graph;
- Int32NodeCache cache;
- const int32_t kSize = 1500;
- Node** nodes = graph.zone()->NewArray<Node*>(kSize);
- CommonOperatorBuilder common(graph.zone());
-
- for (int i = 0; i < kSize; i++) {
- int32_t v = i * -55;
- nodes[i] = graph.NewNode(common.Int32Constant(v));
- *cache.Find(graph.zone(), v) = nodes[i];
- }
-
- int hits = 0;
- for (int i = 0; i < kSize; i++) {
- int32_t v = i * -55;
- Node** pos = cache.Find(graph.zone(), v);
- if (*pos != NULL) {
- CHECK_EQ(nodes[i], *pos);
- hits++;
- }
- }
- CHECK_LT(4, hits);
-}
-
-
-TEST(Int64Constant_back_to_back) {
- GraphTester graph;
- Int64NodeCache cache;
-
- for (int64_t i = -2000000000; i < 2000000000; i += 3315177) {
- Node** pos = cache.Find(graph.zone(), i);
- CHECK_NE(NULL, pos);
- for (int j = 0; j < 3; j++) {
- Node** npos = cache.Find(graph.zone(), i);
- CHECK_EQ(pos, npos);
- }
- }
-}
-
-
-TEST(Int64Constant_hits) {
- GraphTester graph;
- Int64NodeCache cache;
- const int32_t kSize = 1500;
- Node** nodes = graph.zone()->NewArray<Node*>(kSize);
- CommonOperatorBuilder common(graph.zone());
-
- for (int i = 0; i < kSize; i++) {
- int64_t v = static_cast<int64_t>(i) * static_cast<int64_t>(5003001);
- nodes[i] = graph.NewNode(common.Int32Constant(i));
- *cache.Find(graph.zone(), v) = nodes[i];
- }
-
- int hits = 0;
- for (int i = 0; i < kSize; i++) {
- int64_t v = static_cast<int64_t>(i) * static_cast<int64_t>(5003001);
- Node** pos = cache.Find(graph.zone(), v);
- if (*pos != NULL) {
- CHECK_EQ(nodes[i], *pos);
- hits++;
- }
- }
- CHECK_LT(4, hits);
-}
-
-
-TEST(PtrConstant_back_to_back) {
- GraphTester graph;
- PtrNodeCache cache;
- int32_t buffer[50];
-
- for (int32_t* p = buffer;
- (p - buffer) < static_cast<ptrdiff_t>(ARRAY_SIZE(buffer)); p++) {
- Node** pos = cache.Find(graph.zone(), p);
- CHECK_NE(NULL, pos);
- for (int j = 0; j < 3; j++) {
- Node** npos = cache.Find(graph.zone(), p);
- CHECK_EQ(pos, npos);
- }
- }
-}
-
-
-TEST(PtrConstant_hits) {
- GraphTester graph;
- PtrNodeCache cache;
- const int32_t kSize = 50;
- int32_t buffer[kSize];
- Node* nodes[kSize];
- CommonOperatorBuilder common(graph.zone());
-
- for (size_t i = 0; i < ARRAY_SIZE(buffer); i++) {
- int k = static_cast<int>(i);
- int32_t* p = &buffer[i];
- nodes[i] = graph.NewNode(common.Int32Constant(k));
- *cache.Find(graph.zone(), p) = nodes[i];
- }
-
- int hits = 0;
- for (size_t i = 0; i < ARRAY_SIZE(buffer); i++) {
- int32_t* p = &buffer[i];
- Node** pos = cache.Find(graph.zone(), p);
- if (*pos != NULL) {
- CHECK_EQ(nodes[i], *pos);
- hits++;
- }
- }
- CHECK_LT(4, hits);
-}
=======================================
--- /branches/bleeding_edge/src/compiler/change-lowering.cc Tue Aug 12
08:24:20 2014 UTC
+++ /branches/bleeding_edge/src/compiler/change-lowering.cc Tue Aug 12
12:37:50 2014 UTC
@@ -34,8 +34,11 @@
Node* ChangeLoweringBase::HeapConstant(PrintableUnique<HeapObject> value) {
- // TODO(bmeurer): Use common node cache.
- return graph()->NewNode(common()->HeapConstant(value));
+ Node** loc = cache()->FindHeapConstant(value);
+ if (*loc == NULL) {
+ *loc = graph()->NewNode(common()->HeapConstant(value));
+ }
+ return *loc;
}
=======================================
--- /branches/bleeding_edge/src/compiler/common-node-cache.h Wed Jul 30
13:54:45 2014 UTC
+++ /branches/bleeding_edge/src/compiler/common-node-cache.h Tue Aug 12
12:37:50 2014 UTC
@@ -7,6 +7,7 @@
#include "src/assembler.h"
#include "src/compiler/node-cache.h"
+#include "src/unique.h"
namespace v8 {
namespace internal {
@@ -27,7 +28,8 @@
}
Node** FindExternalConstant(ExternalReference reference) {
- return external_constants_.Find(zone_, reference.address());
+ return external_constants_.Find(
+ zone_, reinterpret_cast<intptr_t>(reference.address()));
}
Node** FindNumberConstant(double value) {
@@ -35,17 +37,23 @@
return number_constants_.Find(zone_, BitCast<int64_t>(value));
}
- Zone* zone() const { return zone_; }
+ Node** FindHeapConstant(PrintableUnique<HeapObject> object) {
+ return heap_constants_.Find(zone_, object.Hashcode());
+ }
private:
Int32NodeCache int32_constants_;
Int64NodeCache float64_constants_;
- PtrNodeCache external_constants_;
+ IntPtrNodeCache external_constants_;
Int64NodeCache number_constants_;
+ IntPtrNodeCache heap_constants_;
Zone* zone_;
+
+ DISALLOW_COPY_AND_ASSIGN(CommonNodeCache);
};
-}
-}
-} // namespace v8::internal::compiler
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
#endif // V8_COMPILER_COMMON_NODE_CACHE_H_
=======================================
--- /branches/bleeding_edge/src/compiler/node-cache.cc Wed Jul 30 13:54:45
2014 UTC
+++ /branches/bleeding_edge/src/compiler/node-cache.cc Tue Aug 12 12:37:50
2014 UTC
@@ -4,6 +4,8 @@
#include "src/compiler/node-cache.h"
+#include "src/zone.h"
+
namespace v8 {
namespace internal {
namespace compiler {
@@ -12,33 +14,19 @@
#define LINEAR_PROBE 5
template <typename Key>
-int32_t NodeCacheHash(Key key) {
- UNIMPLEMENTED();
- return 0;
-}
+inline int NodeCacheHash(Key key);
+
template <>
-inline int32_t NodeCacheHash(int32_t key) {
+inline int NodeCacheHash(int32_t key) {
return ComputeIntegerHash(key, 0);
}
template <>
-inline int32_t NodeCacheHash(int64_t key) {
+inline int NodeCacheHash(int64_t key) {
return ComputeLongHash(key);
}
-
-
-template <>
-inline int32_t NodeCacheHash(double key) {
- return ComputeLongHash(BitCast<int64_t>(key));
-}
-
-
-template <>
-inline int32_t NodeCacheHash(void* key) {
- return ComputePointerHash(key);
-}
template <typename Key>
@@ -76,7 +64,7 @@
template <typename Key>
Node** NodeCache<Key>::Find(Zone* zone, Key key) {
- int32_t hash = NodeCacheHash(key);
+ int hash = NodeCacheHash(key);
if (entries_ == NULL) {
// Allocate the initial entries and insert the first entry.
int num_entries = INITIAL_SIZE + LINEAR_PROBE;
@@ -112,9 +100,9 @@
}
+template class NodeCache<int32_t>;
template class NodeCache<int64_t>;
-template class NodeCache<int32_t>;
-template class NodeCache<void*>;
-}
-}
-} // namespace v8::internal::compiler
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
=======================================
--- /branches/bleeding_edge/src/compiler/node-cache.h Wed Jul 30 13:54:45
2014 UTC
+++ /branches/bleeding_edge/src/compiler/node-cache.h Tue Aug 12 12:37:50
2014 UTC
@@ -5,14 +5,19 @@
#ifndef V8_COMPILER_NODE_CACHE_H_
#define V8_COMPILER_NODE_CACHE_H_
-#include "src/v8.h"
-
-#include "src/compiler/node.h"
+#include "src/base/macros.h"
namespace v8 {
namespace internal {
+
+// Forward declarations.
+class Zone;
+
namespace compiler {
+// Forward declarations.
+class Node;
+
// A cache for nodes based on a key. Useful for implementing
canonicalization of
// nodes such as constants, parameters, etc.
template <typename Key>
@@ -36,18 +41,21 @@
};
Entry* entries_; // lazily-allocated hash entries.
- int32_t size_;
- int32_t max_;
+ int size_;
+ int max_;
bool Resize(Zone* zone);
+
+ DISALLOW_COPY_AND_ASSIGN(NodeCache);
};
// Various default cache types.
+typedef NodeCache<int32_t> Int32NodeCache;
typedef NodeCache<int64_t> Int64NodeCache;
-typedef NodeCache<int32_t> Int32NodeCache;
-typedef NodeCache<void*> PtrNodeCache;
-}
-}
-} // namespace v8::internal::compiler
+typedef NodeCache<intptr_t> IntPtrNodeCache;
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
#endif // V8_COMPILER_NODE_CACHE_H_
=======================================
--- /branches/bleeding_edge/test/cctest/cctest.gyp Wed Aug 6 15:50:40 2014
UTC
+++ /branches/bleeding_edge/test/cctest/cctest.gyp Tue Aug 12 12:37:50 2014
UTC
@@ -65,7 +65,6 @@
'compiler/test-linkage.cc',
'compiler/test-machine-operator-reducer.cc',
'compiler/test-node-algorithm.cc',
- 'compiler/test-node-cache.cc',
'compiler/test-node.cc',
'compiler/test-operator.cc',
'compiler/test-phi-reducer.cc',
=======================================
--- /branches/bleeding_edge/test/compiler-unittests/compiler-unittests.gyp
Tue Aug 12 08:24:20 2014 UTC
+++ /branches/bleeding_edge/test/compiler-unittests/compiler-unittests.gyp
Tue Aug 12 12:37:50 2014 UTC
@@ -21,8 +21,10 @@
],
'sources': [ ### gcmole(all) ###
'change-lowering-unittest.cc',
+ 'common-node-cache-unittest.cc',
'compiler-unittests.cc',
'instruction-selector-unittest.cc',
+ 'node-cache-unittest.cc',
'node-matchers.cc',
'node-matchers.h',
],
=======================================
--- /branches/bleeding_edge/testing/gtest-type-names.h Tue Aug 12 08:24:20
2014 UTC
+++ /branches/bleeding_edge/testing/gtest-type-names.h Tue Aug 12 12:37:50
2014 UTC
@@ -11,10 +11,10 @@
namespace testing {
namespace internal {
-#define GET_TYPE_NAME(type) \
- template <> \
- std::string GetTypeName<type>() { \
- return #type; \
+#define GET_TYPE_NAME(type) \
+ template <> \
+ inline std::string GetTypeName<type>() { \
+ return #type; \
}
GET_TYPE_NAME(int8_t)
GET_TYPE_NAME(uint8_t)
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.