Revision: 23601
Author: [email protected]
Date: Tue Sep 2 11:36:55 2014 UTC
Log: [turbofan] First step of Operator refactoring.
- Real const-correctness
- Proper forward declarations instead of #include "src/v8.h"
- Flags for Operator properties.
- etc.
TEST=compiler-unittests,cctest
[email protected]
Review URL: https://codereview.chromium.org/526313002
https://code.google.com/p/v8/source/detail?r=23601
Added:
/branches/bleeding_edge/src/compiler/access-builder.cc
/branches/bleeding_edge/src/compiler/operator.cc
/branches/bleeding_edge/src/compiler/simplified-operator.cc
Modified:
/branches/bleeding_edge/BUILD.gn
/branches/bleeding_edge/src/base/flags.h
/branches/bleeding_edge/src/compiler/access-builder.h
/branches/bleeding_edge/src/compiler/arm/linkage-arm.cc
/branches/bleeding_edge/src/compiler/arm64/linkage-arm64.cc
/branches/bleeding_edge/src/compiler/common-operator.h
/branches/bleeding_edge/src/compiler/ia32/linkage-ia32.cc
/branches/bleeding_edge/src/compiler/js-generic-lowering.cc
/branches/bleeding_edge/src/compiler/linkage-impl.h
/branches/bleeding_edge/src/compiler/linkage.cc
/branches/bleeding_edge/src/compiler/linkage.h
/branches/bleeding_edge/src/compiler/operator.h
/branches/bleeding_edge/src/compiler/simplified-operator.h
/branches/bleeding_edge/src/compiler/x64/linkage-x64.cc
/branches/bleeding_edge/test/cctest/compiler/test-operator.cc
/branches/bleeding_edge/tools/gyp/v8.gyp
=======================================
--- /dev/null
+++ /branches/bleeding_edge/src/compiler/access-builder.cc Tue Sep 2
11:36:55 2014 UTC
@@ -0,0 +1,90 @@
+// 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/access-builder.h"
+#include "src/types-inl.h"
+
+namespace v8 {
+namespace internal {
+namespace compiler {
+
+// static
+FieldAccess AccessBuilder::ForMap() {
+ return {kTaggedBase, HeapObject::kMapOffset, Handle<Name>(), Type::Any(),
+ kMachAnyTagged};
+}
+
+
+// static
+FieldAccess AccessBuilder::ForJSObjectProperties() {
+ return {kTaggedBase, JSObject::kPropertiesOffset, Handle<Name>(),
Type::Any(),
+ kMachAnyTagged};
+}
+
+
+// static
+FieldAccess AccessBuilder::ForJSObjectElements() {
+ return {kTaggedBase, JSObject::kElementsOffset, Handle<Name>(),
+ Type::Internal(), kMachAnyTagged};
+}
+
+
+// static
+FieldAccess AccessBuilder::ForJSArrayBufferBackingStore() {
+ return {kTaggedBase, JSArrayBuffer::kBackingStoreOffset, Handle<Name>(),
+ Type::UntaggedPtr(), kMachPtr};
+}
+
+
+// static
+FieldAccess AccessBuilder::ForExternalArrayPointer() {
+ return {kTaggedBase, ExternalArray::kExternalPointerOffset,
Handle<Name>(),
+ Type::UntaggedPtr(), kMachPtr};
+}
+
+
+// static
+ElementAccess AccessBuilder::ForFixedArrayElement() {
+ return {kTaggedBase, FixedArray::kHeaderSize, Type::Any(),
kMachAnyTagged};
+}
+
+
+// static
+ElementAccess AccessBuilder::ForBackingStoreElement(MachineType rep) {
+ return {kUntaggedBase, kNonHeapObjectHeaderSize - kHeapObjectTag,
Type::Any(),
+ rep};
+}
+
+
+// static
+ElementAccess AccessBuilder::ForTypedArrayElement(ExternalArrayType type,
+ bool is_external) {
+ BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase;
+ int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset;
+ switch (type) {
+ case kExternalInt8Array:
+ return {taggedness, header_size, Type::Signed32(), kMachInt8};
+ case kExternalUint8Array:
+ case kExternalUint8ClampedArray:
+ return {taggedness, header_size, Type::Unsigned32(), kMachUint8};
+ case kExternalInt16Array:
+ return {taggedness, header_size, Type::Signed32(), kMachInt16};
+ case kExternalUint16Array:
+ return {taggedness, header_size, Type::Unsigned32(), kMachUint16};
+ case kExternalInt32Array:
+ return {taggedness, header_size, Type::Signed32(), kMachInt32};
+ case kExternalUint32Array:
+ return {taggedness, header_size, Type::Unsigned32(), kMachUint32};
+ case kExternalFloat32Array:
+ return {taggedness, header_size, Type::Number(), kRepFloat32};
+ case kExternalFloat64Array:
+ return {taggedness, header_size, Type::Number(), kRepFloat64};
+ }
+ UNREACHABLE();
+ return {kUntaggedBase, 0, Type::None(), kMachNone};
+}
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
=======================================
--- /dev/null
+++ /branches/bleeding_edge/src/compiler/operator.cc Tue Sep 2 11:36:55
2014 UTC
@@ -0,0 +1,56 @@
+// 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/operator.h"
+
+#include "src/assembler.h"
+
+namespace v8 {
+namespace internal {
+namespace compiler {
+
+Operator::~Operator() {}
+
+
+SimpleOperator::SimpleOperator(Opcode opcode, Properties properties,
+ int input_count, int output_count,
+ const char* mnemonic)
+ : Operator(opcode, properties, mnemonic),
+ input_count_(input_count),
+ output_count_(output_count) {}
+
+
+SimpleOperator::~SimpleOperator() {}
+
+
+// static
+OStream& StaticParameterTraits<ExternalReference>::PrintTo(
+ OStream& os, ExternalReference reference) {
+ os << reference.address();
+ // TODO(bmeurer): Move to operator<<(os, ExternalReference)
+ const Runtime::Function* function =
+ Runtime::FunctionForEntry(reference.address());
+ if (function) {
+ os << " <" << function->name << ".entry>";
+ }
+ return os;
+}
+
+
+// static
+int StaticParameterTraits<ExternalReference>::HashCode(
+ ExternalReference reference) {
+ return reinterpret_cast<intptr_t>(reference.address()) & 0xFFFFFFFF;
+}
+
+
+// static
+bool StaticParameterTraits<ExternalReference>::Equals(ExternalReference
lhs,
+ ExternalReference
rhs) {
+ return lhs == rhs;
+}
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
=======================================
--- /dev/null
+++ /branches/bleeding_edge/src/compiler/simplified-operator.cc Tue Sep 2
11:36:55 2014 UTC
@@ -0,0 +1,30 @@
+// Copyright 2012 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/simplified-operator.h"
+#include "src/types-inl.h"
+
+namespace v8 {
+namespace internal {
+namespace compiler {
+
+// static
+bool StaticParameterTraits<FieldAccess>::Equals(const FieldAccess& lhs,
+ const FieldAccess& rhs) {
+ return lhs.base_is_tagged == rhs.base_is_tagged && lhs.offset ==
rhs.offset &&
+ lhs.machine_type == rhs.machine_type && lhs.type->Is(rhs.type);
+}
+
+
+// static
+bool StaticParameterTraits<ElementAccess>::Equals(const ElementAccess& lhs,
+ const ElementAccess&
rhs) {
+ return lhs.base_is_tagged == rhs.base_is_tagged &&
+ lhs.header_size == rhs.header_size &&
+ lhs.machine_type == rhs.machine_type && lhs.type->Is(rhs.type);
+}
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
=======================================
--- /branches/bleeding_edge/BUILD.gn Tue Sep 2 10:21:41 2014 UTC
+++ /branches/bleeding_edge/BUILD.gn Tue Sep 2 11:36:55 2014 UTC
@@ -460,6 +460,7 @@
"src/codegen.h",
"src/compilation-cache.cc",
"src/compilation-cache.h",
+ "src/compiler/access-builder.cc",
"src/compiler/access-builder.h",
"src/compiler/ast-graph-builder.cc",
"src/compiler/ast-graph-builder.h",
@@ -529,6 +530,7 @@
"src/compiler/opcodes.h",
"src/compiler/operator-properties-inl.h",
"src/compiler/operator-properties.h",
+ "src/compiler/operator.cc",
"src/compiler/operator.h",
"src/compiler/phi-reducer.h",
"src/compiler/pipeline.cc",
@@ -547,6 +549,7 @@
"src/compiler/simplified-node-factory.h",
"src/compiler/simplified-operator-reducer.cc",
"src/compiler/simplified-operator-reducer.h",
+ "src/compiler/simplified-operator.cc",
"src/compiler/simplified-operator.h",
"src/compiler/source-position.cc",
"src/compiler/source-position.h",
=======================================
--- /branches/bleeding_edge/src/base/flags.h Tue Sep 2 07:07:52 2014 UTC
+++ /branches/bleeding_edge/src/base/flags.h Tue Sep 2 11:36:55 2014 UTC
@@ -65,51 +65,38 @@
#define
DEFINE_OPERATORS_FOR_FLAGS(Type) \
- inline ::v8::base::Flags<Type::flag_type>
operator&( \
- Type::flag_type
lhs, \
- Type::flag_type rhs)ALLOW_UNUSED
WARN_UNUSED_RESULT; \
- inline ::v8::base::Flags<Type::flag_type> operator&(Type::flag_type
lhs, \
- Type::flag_type rhs)
{ \
- return ::v8::base::Flags<Type::flag_type>(lhs) &
rhs; \
+ inline Type operator&(Type::flag_type
lhs, \
+ Type::flag_type rhs)ALLOW_UNUSED
WARN_UNUSED_RESULT; \
+ inline Type operator&(Type::flag_type lhs, Type::flag_type rhs)
{ \
+ return Type(lhs) &
rhs; \
}
\
- inline ::v8::base::Flags<Type::flag_type>
operator&( \
- Type::flag_type lhs, const ::v8::base::Flags<Type::flag_type>&
rhs) \
- ALLOW_UNUSED
WARN_UNUSED_RESULT; \
- inline ::v8::base::Flags<Type::flag_type>
operator&( \
- Type::flag_type lhs, const ::v8::base::Flags<Type::flag_type>& rhs)
{ \
+ inline Type operator&(Type::flag_type
lhs, \
+ const Type& rhs)ALLOW_UNUSED
WARN_UNUSED_RESULT; \
+ inline Type operator&(Type::flag_type lhs, const Type& rhs)
{ \
return rhs &
lhs; \
}
\
inline void operator&(Type::flag_type lhs, Type::mask_type
rhs)ALLOW_UNUSED; \
inline void operator&(Type::flag_type lhs, Type::mask_type rhs)
{} \
- inline ::v8::base::Flags<Type::flag_type> operator|(Type::flag_type
lhs, \
- Type::flag_type
rhs) \
+ inline Type operator|(Type::flag_type lhs, Type::flag_type
rhs) \
ALLOW_UNUSED
WARN_UNUSED_RESULT; \
- inline ::v8::base::Flags<Type::flag_type> operator|(Type::flag_type
lhs, \
- Type::flag_type rhs)
{ \
- return ::v8::base::Flags<Type::flag_type>(lhs) |
rhs; \
+ inline Type operator|(Type::flag_type lhs, Type::flag_type rhs)
{ \
+ return Type(lhs) |
rhs; \
}
\
- inline ::v8::base::Flags<Type::flag_type> operator|
( \
- Type::flag_type lhs, const ::v8::base::Flags<Type::flag_type>&
rhs) \
+ inline Type operator|(Type::flag_type lhs, const Type&
rhs) \
ALLOW_UNUSED
WARN_UNUSED_RESULT; \
- inline ::v8::base::Flags<Type::flag_type> operator|
( \
- Type::flag_type lhs, const ::v8::base::Flags<Type::flag_type>& rhs)
{ \
+ inline Type operator|(Type::flag_type lhs, const Type& rhs)
{ \
return rhs |
lhs; \
}
\
inline void operator|(Type::flag_type lhs, Type::mask_type
rhs) \
ALLOW_UNUSED; \
inline void operator|(Type::flag_type lhs, Type::mask_type rhs)
{} \
- inline ::v8::base::Flags<Type::flag_type> operator^(Type::flag_type
lhs, \
- Type::flag_type
rhs) \
+ inline Type operator^(Type::flag_type lhs, Type::flag_type
rhs) \
ALLOW_UNUSED
WARN_UNUSED_RESULT; \
- inline ::v8::base::Flags<Type::flag_type> operator^(Type::flag_type
lhs, \
- Type::flag_type rhs)
{ \
- return ::v8::base::Flags<Type::flag_type>(lhs) ^
rhs; \
- }
inline ::v8::base::Flags<Type::flag_type> \
- operator^(Type::flag_type
lhs, \
- const ::v8::base::Flags<Type::flag_type>&
rhs) \
+ inline Type operator^(Type::flag_type lhs, Type::flag_type rhs)
{ \
+ return Type(lhs) ^
rhs; \
+ } inline Type operator^(Type::flag_type lhs, const Type&
rhs) \
ALLOW_UNUSED
WARN_UNUSED_RESULT; \
- inline ::v8::base::Flags<Type::flag_type>
operator^( \
- Type::flag_type lhs, const ::v8::base::Flags<Type::flag_type>& rhs)
{ \
+ inline Type operator^(Type::flag_type lhs, const Type& rhs)
{ \
return rhs ^
lhs; \
} inline void operator^(Type::flag_type lhs, Type::mask_type
rhs) \
ALLOW_UNUSED; \
=======================================
--- /branches/bleeding_edge/src/compiler/access-builder.h Thu Aug 28
17:53:24 2014 UTC
+++ /branches/bleeding_edge/src/compiler/access-builder.h Tue Sep 2
11:36:55 2014 UTC
@@ -14,79 +14,35 @@
// This access builder provides a set of static methods constructing
commonly
// used FieldAccess and ElementAccess descriptors. These descriptors
server as
// parameters to simplified load/store operators.
-class AccessBuilder : public AllStatic {
+class AccessBuilder FINAL : public AllStatic {
public:
// Provides access to HeapObject::map() field.
- static FieldAccess ForMap() {
- return {kTaggedBase, HeapObject::kMapOffset, Handle<Name>(),
Type::Any(),
- kMachAnyTagged};
- }
+ static FieldAccess ForMap();
// Provides access to JSObject::properties() field.
- static FieldAccess ForJSObjectProperties() {
- return {kTaggedBase, JSObject::kPropertiesOffset, Handle<Name>(),
- Type::Any(), kMachAnyTagged};
- }
+ static FieldAccess ForJSObjectProperties();
// Provides access to JSObject::elements() field.
- static FieldAccess ForJSObjectElements() {
- return {kTaggedBase, JSObject::kElementsOffset, Handle<Name>(),
- Type::Internal(), kMachAnyTagged};
- }
+ static FieldAccess ForJSObjectElements();
// Provides access to JSArrayBuffer::backing_store() field.
- static FieldAccess ForJSArrayBufferBackingStore() {
- return {kTaggedBase, JSArrayBuffer::kBackingStoreOffset,
Handle<Name>(),
- Type::UntaggedPtr(), kMachPtr};
- }
+ static FieldAccess ForJSArrayBufferBackingStore();
// Provides access to ExternalArray::external_pointer() field.
- static FieldAccess ForExternalArrayPointer() {
- return {kTaggedBase, ExternalArray::kExternalPointerOffset,
Handle<Name>(),
- Type::UntaggedPtr(), kMachPtr};
- }
+ static FieldAccess ForExternalArrayPointer();
// Provides access to FixedArray elements.
- static ElementAccess ForFixedArrayElement() {
- return {kTaggedBase, FixedArray::kHeaderSize, Type::Any(),
kMachAnyTagged};
- }
+ static ElementAccess ForFixedArrayElement();
// TODO(mstarzinger): Raw access only for testing, drop me.
- static ElementAccess ForBackingStoreElement(MachineType rep) {
- return {kUntaggedBase, kNonHeapObjectHeaderSize - kHeapObjectTag,
- Type::Any(), rep};
- }
+ static ElementAccess ForBackingStoreElement(MachineType rep);
// Provides access to Fixed{type}TypedArray and External{type}Array
elements.
static ElementAccess ForTypedArrayElement(ExternalArrayType type,
- bool is_external) {
- BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase;
- int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset;
- switch (type) {
- case kExternalInt8Array:
- return {taggedness, header_size, Type::Signed32(), kMachInt8};
- case kExternalUint8Array:
- case kExternalUint8ClampedArray:
- return {taggedness, header_size, Type::Unsigned32(), kMachUint8};
- case kExternalInt16Array:
- return {taggedness, header_size, Type::Signed32(), kMachInt16};
- case kExternalUint16Array:
- return {taggedness, header_size, Type::Unsigned32(), kMachUint16};
- case kExternalInt32Array:
- return {taggedness, header_size, Type::Signed32(), kMachInt32};
- case kExternalUint32Array:
- return {taggedness, header_size, Type::Unsigned32(), kMachUint32};
- case kExternalFloat32Array:
- return {taggedness, header_size, Type::Number(), kRepFloat32};
- case kExternalFloat64Array:
- return {taggedness, header_size, Type::Number(), kRepFloat64};
- }
- UNREACHABLE();
- return {kUntaggedBase, 0, Type::None(), kMachNone};
- }
+ bool is_external);
private:
- DISALLOW_COPY_AND_ASSIGN(AccessBuilder);
+ DISALLOW_IMPLICIT_CONSTRUCTORS(AccessBuilder);
};
} // namespace compiler
=======================================
--- /branches/bleeding_edge/src/compiler/arm/linkage-arm.cc Tue Sep 2
10:38:31 2014 UTC
+++ /branches/bleeding_edge/src/compiler/arm/linkage-arm.cc Tue Sep 2
11:36:55 2014 UTC
@@ -39,10 +39,9 @@
}
-CallDescriptor* Linkage::GetRuntimeCallDescriptor(Runtime::FunctionId
function,
- int parameter_count,
- Operator::Property
properties,
- Zone* zone) {
+CallDescriptor* Linkage::GetRuntimeCallDescriptor(
+ Runtime::FunctionId function, int parameter_count,
+ Operator::Properties properties, Zone* zone) {
return LinkageHelper::GetRuntimeCallDescriptor<LinkageHelperTraits>(
zone, function, parameter_count, properties);
}
@@ -62,6 +61,7 @@
return LinkageHelper::GetSimplifiedCDescriptor<LinkageHelperTraits>(
zone, num_params, return_type, param_types);
}
-}
-}
-} // namespace v8::internal::compiler
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
=======================================
--- /branches/bleeding_edge/src/compiler/arm64/linkage-arm64.cc Tue Sep 2
10:38:31 2014 UTC
+++ /branches/bleeding_edge/src/compiler/arm64/linkage-arm64.cc Tue Sep 2
11:36:55 2014 UTC
@@ -39,10 +39,9 @@
}
-CallDescriptor* Linkage::GetRuntimeCallDescriptor(Runtime::FunctionId
function,
- int parameter_count,
- Operator::Property
properties,
- Zone* zone) {
+CallDescriptor* Linkage::GetRuntimeCallDescriptor(
+ Runtime::FunctionId function, int parameter_count,
+ Operator::Properties properties, Zone* zone) {
return LinkageHelper::GetRuntimeCallDescriptor<LinkageHelperTraits>(
zone, function, parameter_count, properties);
}
@@ -63,6 +62,6 @@
zone, num_params, return_type, param_types);
}
-}
-}
-} // namespace v8::internal::compiler
+} // namespace compiler
+} // namespace internal
+} // namespace v8
=======================================
--- /branches/bleeding_edge/src/compiler/common-operator.h Mon Sep 1
09:31:14 2014 UTC
+++ /branches/bleeding_edge/src/compiler/common-operator.h Tue Sep 2
11:36:55 2014 UTC
@@ -20,18 +20,20 @@
namespace compiler {
-class ControlOperator : public Operator1<int> {
+class ControlOperator FINAL : public Operator1<int> {
public:
- ControlOperator(IrOpcode::Value opcode, uint16_t properties, int inputs,
+ ControlOperator(IrOpcode::Value opcode, Properties properties, int
inputs,
int outputs, int controls, const char* mnemonic)
: Operator1<int>(opcode, properties, inputs, outputs, mnemonic,
controls) {}
- virtual OStream& PrintParameter(OStream& os) const { return os; } //
NOLINT
+ virtual OStream& PrintParameter(OStream& os) const OVERRIDE { // NOLINT
+ return os;
+ }
int ControlInputCount() const { return parameter(); }
};
-class CallOperator : public Operator1<CallDescriptor*> {
+class CallOperator FINAL : public Operator1<CallDescriptor*> {
public:
CallOperator(CallDescriptor* descriptor, const char* mnemonic)
: Operator1<CallDescriptor*>(
@@ -39,7 +41,7 @@
descriptor->InputCount() + descriptor->FrameStateCount(),
descriptor->ReturnCount(), mnemonic, descriptor) {}
- virtual OStream& PrintParameter(OStream& os) const { // NOLINT
+ virtual OStream& PrintParameter(OStream& os) const OVERRIDE { // NOLINT
return os << "[" << *parameter() << "]";
}
};
@@ -91,7 +93,8 @@
Operator* Throw() { CONTROL_OP(Throw, 1, 1); }
Operator* Return() {
- return new (zone_) ControlOperator(IrOpcode::kReturn, 0, 1, 0,
1, "Return");
+ return new (zone_) ControlOperator(
+ IrOpcode::kReturn, Operator::kNoProperties, 1, 0, 1, "Return");
}
Operator* Merge(int controls) {
=======================================
--- /branches/bleeding_edge/src/compiler/ia32/linkage-ia32.cc Tue Sep 2
10:38:31 2014 UTC
+++ /branches/bleeding_edge/src/compiler/ia32/linkage-ia32.cc Tue Sep 2
11:36:55 2014 UTC
@@ -35,10 +35,9 @@
}
-CallDescriptor* Linkage::GetRuntimeCallDescriptor(Runtime::FunctionId
function,
- int parameter_count,
- Operator::Property
properties,
- Zone* zone) {
+CallDescriptor* Linkage::GetRuntimeCallDescriptor(
+ Runtime::FunctionId function, int parameter_count,
+ Operator::Properties properties, Zone* zone) {
return LinkageHelper::GetRuntimeCallDescriptor<LinkageHelperTraits>(
zone, function, parameter_count, properties);
}
=======================================
--- /branches/bleeding_edge/src/compiler/js-generic-lowering.cc Tue Sep 2
10:38:31 2014 UTC
+++ /branches/bleeding_edge/src/compiler/js-generic-lowering.cc Tue Sep 2
11:36:55 2014 UTC
@@ -377,10 +377,11 @@
void JSGenericLowering::ReplaceWithRuntimeCall(Node* node,
Runtime::FunctionId f,
int nargs_override) {
- Operator::Property props = node->op()->properties();
+ Operator::Properties properties = node->op()->properties();
const Runtime::Function* fun = Runtime::FunctionForId(f);
int nargs = (nargs_override < 0) ? fun->nargs : nargs_override;
- CallDescriptor* desc = linkage()->GetRuntimeCallDescriptor(f, nargs,
props);
+ CallDescriptor* desc =
+ linkage()->GetRuntimeCallDescriptor(f, nargs, properties);
Node* ref = ExternalConstant(ExternalReference(f, isolate()));
Node* arity = Int32Constant(nargs);
if (!centrystub_constant_.is_set()) {
=======================================
--- /branches/bleeding_edge/src/compiler/linkage-impl.h Tue Sep 2 11:33:28
2014 UTC
+++ /branches/bleeding_edge/src/compiler/linkage-impl.h Tue Sep 2 11:36:55
2014 UTC
@@ -71,7 +71,7 @@
template <typename LinkageTraits>
static CallDescriptor* GetRuntimeCallDescriptor(
Zone* zone, Runtime::FunctionId function_id, int parameter_count,
- Operator::Property properties) {
+ Operator::Properties properties) {
const int code_count = 1;
const int function_count = 1;
const int num_args_count = 1;
=======================================
--- /branches/bleeding_edge/src/compiler/linkage.cc Tue Sep 2 11:33:28
2014 UTC
+++ /branches/bleeding_edge/src/compiler/linkage.cc Tue Sep 2 11:36:55
2014 UTC
@@ -95,7 +95,7 @@
CallDescriptor* Linkage::GetRuntimeCallDescriptor(
Runtime::FunctionId function, int parameter_count,
- Operator::Property properties) {
+ Operator::Properties properties) {
return GetRuntimeCallDescriptor(function, parameter_count, properties,
this->info_->zone());
}
@@ -139,10 +139,9 @@
}
-CallDescriptor* Linkage::GetRuntimeCallDescriptor(Runtime::FunctionId
function,
- int parameter_count,
- Operator::Property
properties,
- Zone* zone) {
+CallDescriptor* Linkage::GetRuntimeCallDescriptor(
+ Runtime::FunctionId function, int parameter_count,
+ Operator::Properties properties, Zone* zone) {
UNIMPLEMENTED();
return NULL;
}
=======================================
--- /branches/bleeding_edge/src/compiler/linkage.h Tue Sep 2 10:38:31 2014
UTC
+++ /branches/bleeding_edge/src/compiler/linkage.h Tue Sep 2 11:36:55 2014
UTC
@@ -54,8 +54,9 @@
CallDescriptor(Kind kind, int8_t return_count, int16_t parameter_count,
int16_t input_count, LinkageLocation* locations,
- Operator::Property properties, RegList
callee_saved_registers,
- Flags flags, const char* debug_name = "")
+ Operator::Properties properties,
+ RegList callee_saved_registers, Flags flags,
+ const char* debug_name = "")
: kind_(kind),
return_count_(return_count),
parameter_count_(parameter_count),
@@ -97,7 +98,7 @@
}
// Operator properties describe how this call can be optimized, if at
all.
- Operator::Property properties() const { return properties_; }
+ Operator::Properties properties() const { return properties_; }
// Get the callee-saved registers, if any, across this call.
RegList CalleeSavedRegisters() { return callee_saved_registers_; }
@@ -112,7 +113,7 @@
int16_t parameter_count_;
int16_t input_count_;
LinkageLocation* locations_;
- Operator::Property properties_;
+ Operator::Properties properties_;
RegList callee_saved_registers_;
Flags flags_;
const char* debug_name_;
@@ -149,11 +150,10 @@
static CallDescriptor* GetJSCallDescriptor(int parameter_count, Zone*
zone);
CallDescriptor* GetRuntimeCallDescriptor(Runtime::FunctionId function,
int parameter_count,
- Operator::Property properties);
- static CallDescriptor* GetRuntimeCallDescriptor(Runtime::FunctionId
function,
- int parameter_count,
- Operator::Property
properties,
- Zone* zone);
+ Operator::Properties
properties);
+ static CallDescriptor* GetRuntimeCallDescriptor(
+ Runtime::FunctionId function, int parameter_count,
+ Operator::Properties properties, Zone* zone);
CallDescriptor* GetStubCallDescriptor(
CodeStubInterfaceDescriptor* descriptor, int stack_parameter_count =
0,
=======================================
--- /branches/bleeding_edge/src/compiler/operator.h Wed Jul 30 16:21:36
2014 UTC
+++ /branches/bleeding_edge/src/compiler/operator.h Tue Sep 2 11:36:55
2014 UTC
@@ -5,14 +5,17 @@
#ifndef V8_COMPILER_OPERATOR_H_
#define V8_COMPILER_OPERATOR_H_
-#include "src/v8.h"
-
-#include "src/assembler.h"
+#include "src/base/flags.h"
#include "src/ostreams.h"
#include "src/unique.h"
namespace v8 {
namespace internal {
+
+// Forward declarations.
+class ExternalReference;
+
+
namespace compiler {
// An operator represents description of the "computation" of a node in the
@@ -29,9 +32,7 @@
// meaningful to the operator itself.
class Operator : public ZoneObject {
public:
- Operator(uint8_t opcode, uint16_t properties)
- : opcode_(opcode), properties_(properties) {}
- virtual ~Operator() {}
+ typedef uint8_t Opcode;
// Properties inform the operator-independent optimizer about legal
// transformations for nodes that have this operator.
@@ -49,78 +50,88 @@
kEliminatable = kNoWrite | kNoThrow,
kPure = kNoRead | kNoWrite | kNoThrow | kIdempotent
};
+ typedef base::Flags<Property, uint8_t> Properties;
+
+ Operator(Opcode opcode, Properties properties, const char* mnemonic)
+ : opcode_(opcode), properties_(properties), mnemonic_(mnemonic) {}
+ virtual ~Operator();
// A small integer unique to all instances of a particular kind of
operator,
// useful for quick matching for specific kinds of operators. For fast
access
// the opcode is stored directly in the operator object.
- inline uint8_t opcode() const { return opcode_; }
+ Opcode opcode() const { return opcode_; }
// Returns a constant string representing the mnemonic of the operator,
// without the static parameters. Useful for debugging.
- virtual const char* mnemonic() = 0;
+ const char* mnemonic() const { return mnemonic_; }
// Check if this operator equals another operator. Equivalent operators
can
// be merged, and nodes with equivalent operators and equivalent inputs
// can be merged.
- virtual bool Equals(Operator* other) = 0;
+ virtual bool Equals(const Operator* other) const = 0;
// Compute a hashcode to speed up equivalence-set checking.
// Equal operators should always have equal hashcodes, and unequal
operators
// should have unequal hashcodes with high probability.
- virtual int HashCode() = 0;
+ virtual int HashCode() const = 0;
// Check whether this operator has the given property.
- inline bool HasProperty(Property property) const {
- return (properties_ & static_cast<int>(property)) == property;
+ bool HasProperty(Property property) const {
+ return (properties() & property) == property;
}
// Number of data inputs to the operator, for verifying graph structure.
- virtual int InputCount() = 0;
+ virtual int InputCount() const = 0;
// Number of data outputs from the operator, for verifying graph
structure.
- virtual int OutputCount() = 0;
+ virtual int OutputCount() const = 0;
- inline Property properties() { return
static_cast<Property>(properties_); }
+ Properties properties() const { return properties_; }
// TODO(titzer): API for input and output types, for typechecking graph.
- private:
+ protected:
// Print the full operator into the given stream, including any
// static parameters. Useful for debugging and visualizing the IR.
virtual OStream& PrintTo(OStream& os) const = 0; // NOLINT
friend OStream& operator<<(OStream& os, const Operator& op);
- uint8_t opcode_;
- uint16_t properties_;
+ private:
+ Opcode opcode_;
+ Properties properties_;
+ const char* mnemonic_;
+
+ DISALLOW_COPY_AND_ASSIGN(Operator);
};
+DEFINE_OPERATORS_FOR_FLAGS(Operator::Properties)
+
OStream& operator<<(OStream& os, const Operator& op);
// An implementation of Operator that has no static parameters. Such
operators
// have just a name, an opcode, and a fixed number of inputs and outputs.
// They can represented by singletons and shared globally.
-class SimpleOperator : public Operator {
+class SimpleOperator FINAL : public Operator {
public:
- SimpleOperator(uint8_t opcode, uint16_t properties, int input_count,
- int output_count, const char* mnemonic)
- : Operator(opcode, properties),
- input_count_(input_count),
- output_count_(output_count),
- mnemonic_(mnemonic) {}
+ SimpleOperator(Opcode opcode, Properties properties, int input_count,
+ int output_count, const char* mnemonic);
+ ~SimpleOperator();
- virtual const char* mnemonic() { return mnemonic_; }
- virtual bool Equals(Operator* that) { return opcode() == that->opcode();
}
- virtual int HashCode() { return opcode(); }
- virtual int InputCount() { return input_count_; }
- virtual int OutputCount() { return output_count_; }
+ virtual bool Equals(const Operator* that) const OVERRIDE {
+ return opcode() == that->opcode();
+ }
+ virtual int HashCode() const OVERRIDE { return opcode(); }
+ virtual int InputCount() const OVERRIDE { return input_count_; }
+ virtual int OutputCount() const OVERRIDE { return output_count_; }
private:
- virtual OStream& PrintTo(OStream& os) const { // NOLINT
- return os << mnemonic_;
+ virtual OStream& PrintTo(OStream& os) const OVERRIDE { // NOLINT
+ return os << mnemonic();
}
int input_count_;
int output_count_;
- const char* mnemonic_;
+
+ DISALLOW_COPY_AND_ASSIGN(SimpleOperator);
};
// Template specialization implements a kind of type class for dealing
with the
@@ -138,21 +149,9 @@
template <>
struct StaticParameterTraits<ExternalReference> {
- static OStream& PrintTo(OStream& os, ExternalReference val) { // NOLINT
- os << val.address();
- const Runtime::Function* function =
- Runtime::FunctionForEntry(val.address());
- if (function != NULL) {
- os << " <" << function->name << ".entry>";
- }
- return os;
- }
- static int HashCode(ExternalReference a) {
- return reinterpret_cast<intptr_t>(a.address()) & 0xFFFFFFFF;
- }
- static bool Equals(ExternalReference a, ExternalReference b) {
- return a == b;
- }
+ static OStream& PrintTo(OStream& os, ExternalReference reference); //
NOLINT
+ static int HashCode(ExternalReference reference);
+ static bool Equals(ExternalReference lhs, ExternalReference rhs);
};
// Specialization for static parameters of type {int}.
@@ -233,48 +232,45 @@
template <typename T>
class Operator1 : public Operator {
public:
- Operator1(uint8_t opcode, uint16_t properties, int input_count,
+ Operator1(Opcode opcode, Properties properties, int input_count,
int output_count, const char* mnemonic, T parameter)
- : Operator(opcode, properties),
+ : Operator(opcode, properties, mnemonic),
input_count_(input_count),
output_count_(output_count),
- mnemonic_(mnemonic),
parameter_(parameter) {}
const T& parameter() const { return parameter_; }
- virtual const char* mnemonic() { return mnemonic_; }
- virtual bool Equals(Operator* other) {
+ virtual bool Equals(const Operator* other) const OVERRIDE {
if (opcode() != other->opcode()) return false;
- Operator1<T>* that = static_cast<Operator1<T>*>(other);
- T temp1 = this->parameter_;
- T temp2 = that->parameter_;
- return StaticParameterTraits<T>::Equals(temp1, temp2);
+ const Operator1<T>* that = static_cast<const Operator1<T>*>(other);
+ return StaticParameterTraits<T>::Equals(this->parameter_,
that->parameter_);
}
- virtual int HashCode() {
+ virtual int HashCode() const OVERRIDE {
return opcode() + 33 *
StaticParameterTraits<T>::HashCode(this->parameter_);
}
- virtual int InputCount() { return input_count_; }
- virtual int OutputCount() { return output_count_; }
+ virtual int InputCount() const OVERRIDE { return input_count_; }
+ virtual int OutputCount() const OVERRIDE { return output_count_; }
virtual OStream& PrintParameter(OStream& os) const { // NOLINT
return StaticParameterTraits<T>::PrintTo(os << "[", parameter_) << "]";
}
- private:
- virtual OStream& PrintTo(OStream& os) const { // NOLINT
- return PrintParameter(os << mnemonic_);
+ protected:
+ virtual OStream& PrintTo(OStream& os) const FINAL { // NOLINT
+ return PrintParameter(os << mnemonic());
}
+ private:
int input_count_;
int output_count_;
- const char* mnemonic_;
T parameter_;
};
// Type definitions for operators with specific types of parameters.
typedef Operator1<PrintableUnique<Name> > NameOperator;
-}
-}
-} // namespace v8::internal::compiler
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
#endif // V8_COMPILER_OPERATOR_H_
=======================================
--- /branches/bleeding_edge/src/compiler/simplified-operator.h Thu Aug 28
14:35:11 2014 UTC
+++ /branches/bleeding_edge/src/compiler/simplified-operator.h Tue Sep 2
11:36:55 2014 UTC
@@ -11,6 +11,14 @@
namespace v8 {
namespace internal {
+
+// Forward declarations.
+template <class>
+class TypeImpl;
+struct ZoneTypeConfig;
+typedef TypeImpl<ZoneTypeConfig> Type;
+
+
namespace compiler {
enum BaseTaggedness { kUntaggedBase, kTaggedBase };
@@ -49,34 +57,27 @@
// Specialization for static parameters of type {FieldAccess}.
template <>
-struct StaticParameterTraits<const FieldAccess> {
+struct StaticParameterTraits<FieldAccess> {
static OStream& PrintTo(OStream& os, const FieldAccess& val) { // NOLINT
return os << val.offset;
}
static int HashCode(const FieldAccess& val) {
return (val.offset < 16) | (val.machine_type & 0xffff);
}
- static bool Equals(const FieldAccess& a, const FieldAccess& b) {
- return a.base_is_tagged == b.base_is_tagged && a.offset == b.offset &&
- a.machine_type == b.machine_type && a.type->Is(b.type);
- }
+ static bool Equals(const FieldAccess& lhs, const FieldAccess& rhs);
};
// Specialization for static parameters of type {ElementAccess}.
template <>
-struct StaticParameterTraits<const ElementAccess> {
+struct StaticParameterTraits<ElementAccess> {
static OStream& PrintTo(OStream& os, const ElementAccess& val) { //
NOLINT
return os << val.header_size;
}
static int HashCode(const ElementAccess& val) {
return (val.header_size < 16) | (val.machine_type & 0xffff);
}
- static bool Equals(const ElementAccess& a, const ElementAccess& b) {
- return a.base_is_tagged == b.base_is_tagged &&
- a.header_size == b.header_size && a.machine_type ==
b.machine_type &&
- a.type->Is(b.type);
- }
+ static bool Equals(const ElementAccess& lhs, const ElementAccess& rhs);
};
@@ -92,55 +93,6 @@
op->opcode() == IrOpcode::kStoreElement);
return static_cast<Operator1<ElementAccess>*>(op)->parameter();
}
-
-
-// This access helper provides a set of static methods constructing
commonly
-// used FieldAccess and ElementAccess descriptors.
-class Access : public AllStatic {
- public:
- // Provides access to JSObject::elements() field.
- static FieldAccess ForJSObjectElements() {
- return {kTaggedBase, JSObject::kElementsOffset, Handle<Name>(),
- Type::Internal(), kMachAnyTagged};
- }
-
- // Provides access to ExternalArray::external_pointer() field.
- static FieldAccess ForExternalArrayPointer() {
- return {kTaggedBase, ExternalArray::kExternalPointerOffset,
Handle<Name>(),
- Type::UntaggedPtr(), kMachPtr};
- }
-
- // Provides access to Fixed{type}TypedArray and External{type}Array
elements.
- static ElementAccess ForTypedArrayElement(ExternalArrayType type,
- bool is_external) {
- BaseTaggedness taggedness = is_external ? kUntaggedBase : kTaggedBase;
- int header_size = is_external ? 0 : FixedTypedArrayBase::kDataOffset;
- switch (type) {
- case kExternalInt8Array:
- return {taggedness, header_size, Type::Signed32(), kMachInt8};
- case kExternalUint8Array:
- case kExternalUint8ClampedArray:
- return {taggedness, header_size, Type::Unsigned32(), kMachUint8};
- case kExternalInt16Array:
- return {taggedness, header_size, Type::Signed32(), kMachInt16};
- case kExternalUint16Array:
- return {taggedness, header_size, Type::Unsigned32(), kMachUint16};
- case kExternalInt32Array:
- return {taggedness, header_size, Type::Signed32(), kMachInt32};
- case kExternalUint32Array:
- return {taggedness, header_size, Type::Unsigned32(), kMachUint32};
- case kExternalFloat32Array:
- return {taggedness, header_size, Type::Number(), kRepFloat32};
- case kExternalFloat64Array:
- return {taggedness, header_size, Type::Number(), kRepFloat64};
- }
- UNREACHABLE();
- return {kUntaggedBase, 0, Type::None(), kMachNone};
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(Access);
-};
// Interface for building simplified operators, which represent the
=======================================
--- /branches/bleeding_edge/src/compiler/x64/linkage-x64.cc Tue Sep 2
10:38:31 2014 UTC
+++ /branches/bleeding_edge/src/compiler/x64/linkage-x64.cc Tue Sep 2
11:36:55 2014 UTC
@@ -54,10 +54,9 @@
}
-CallDescriptor* Linkage::GetRuntimeCallDescriptor(Runtime::FunctionId
function,
- int parameter_count,
- Operator::Property
properties,
- Zone* zone) {
+CallDescriptor* Linkage::GetRuntimeCallDescriptor(
+ Runtime::FunctionId function, int parameter_count,
+ Operator::Properties properties, Zone* zone) {
return LinkageHelper::GetRuntimeCallDescriptor<LinkageHelperTraits>(
zone, function, parameter_count, properties);
}
@@ -78,6 +77,6 @@
zone, num_params, return_type, param_types);
}
-}
-}
-} // namespace v8::internal::compiler
+} // namespace compiler
+} // namespace internal
+} // namespace v8
=======================================
--- /branches/bleeding_edge/test/cctest/compiler/test-operator.cc Wed Jul
30 13:54:45 2014 UTC
+++ /branches/bleeding_edge/test/cctest/compiler/test-operator.cc Tue Sep
2 11:36:55 2014 UTC
@@ -14,40 +14,40 @@
#define Infinity (std::numeric_limits<double>::infinity())
TEST(TestOperatorMnemonic) {
- SimpleOperator op1(10, 0, 0, 0, "ThisOne");
+ SimpleOperator op1(10, Operator::kNoProperties, 0, 0, "ThisOne");
CHECK_EQ(0, strcmp(op1.mnemonic(), "ThisOne"));
- SimpleOperator op2(11, 0, 0, 0, "ThatOne");
+ SimpleOperator op2(11, Operator::kNoProperties, 0, 0, "ThatOne");
CHECK_EQ(0, strcmp(op2.mnemonic(), "ThatOne"));
- Operator1<int> op3(12, 0, 0, 1, "Mnemonic1", 12333);
+ Operator1<int> op3(12, Operator::kNoProperties, 0, 1, "Mnemonic1",
12333);
CHECK_EQ(0, strcmp(op3.mnemonic(), "Mnemonic1"));
- Operator1<double> op4(13, 0, 0, 1, "TheOther", 99.9);
+ Operator1<double> op4(13, Operator::kNoProperties, 0, 1, "TheOther",
99.9);
CHECK_EQ(0, strcmp(op4.mnemonic(), "TheOther"));
}
TEST(TestSimpleOperatorHash) {
- SimpleOperator op1(17, 0, 0, 0, "Another");
+ SimpleOperator op1(17, Operator::kNoProperties, 0, 0, "Another");
CHECK_EQ(17, op1.HashCode());
- SimpleOperator op2(18, 0, 0, 0, "Falsch");
+ SimpleOperator op2(18, Operator::kNoProperties, 0, 0, "Falsch");
CHECK_EQ(18, op2.HashCode());
}
TEST(TestSimpleOperatorEquals) {
- SimpleOperator op1a(19, 0, 0, 0, "Another1");
- SimpleOperator op1b(19, 2, 2, 2, "Another2");
+ SimpleOperator op1a(19, Operator::kNoProperties, 0, 0, "Another1");
+ SimpleOperator op1b(19, Operator::kFoldable, 2, 2, "Another2");
CHECK(op1a.Equals(&op1a));
CHECK(op1a.Equals(&op1b));
CHECK(op1b.Equals(&op1a));
CHECK(op1b.Equals(&op1b));
- SimpleOperator op2a(20, 0, 0, 0, "Falsch1");
- SimpleOperator op2b(20, 1, 1, 1, "Falsch2");
+ SimpleOperator op2a(20, Operator::kNoProperties, 0, 0, "Falsch1");
+ SimpleOperator op2b(20, Operator::kFoldable, 1, 1, "Falsch2");
CHECK(op2a.Equals(&op2a));
CHECK(op2a.Equals(&op2b));
@@ -74,14 +74,14 @@
TEST(TestSimpleOperatorPrint) {
- SimpleOperator op1a(19, 0, 0, 0, "Another1");
- SimpleOperator op1b(19, 2, 2, 2, "Another2");
+ SimpleOperator op1a(19, Operator::kNoProperties, 0, 0, "Another1");
+ SimpleOperator op1b(19, Operator::kFoldable, 2, 2, "Another2");
CHECK_EQ("Another1", OperatorToString(&op1a).get());
CHECK_EQ("Another2", OperatorToString(&op1b).get());
- SimpleOperator op2a(20, 0, 0, 0, "Flog1");
- SimpleOperator op2b(20, 1, 1, 1, "Flog2");
+ SimpleOperator op2a(20, Operator::kNoProperties, 0, 0, "Flog1");
+ SimpleOperator op2b(20, Operator::kFoldable, 1, 1, "Flog2");
CHECK_EQ("Flog1", OperatorToString(&op2a).get());
CHECK_EQ("Flog2", OperatorToString(&op2b).get());
@@ -89,13 +89,13 @@
TEST(TestOperator1intHash) {
- Operator1<int> op1a(23, 0, 0, 0, "Wolfie", 11);
- Operator1<int> op1b(23, 2, 2, 2, "Doggie", 11);
+ Operator1<int> op1a(23, Operator::kNoProperties, 0, 0, "Wolfie", 11);
+ Operator1<int> op1b(23, Operator::kFoldable, 2, 2, "Doggie", 11);
CHECK_EQ(op1a.HashCode(), op1b.HashCode());
- Operator1<int> op2a(24, 0, 0, 0, "Arfie", 3);
- Operator1<int> op2b(24, 0, 0, 0, "Arfie", 4);
+ Operator1<int> op2a(24, Operator::kNoProperties, 0, 0, "Arfie", 3);
+ Operator1<int> op2b(24, Operator::kNoProperties, 0, 0, "Arfie", 4);
CHECK_NE(op1a.HashCode(), op2a.HashCode());
CHECK_NE(op2a.HashCode(), op2b.HashCode());
@@ -103,16 +103,16 @@
TEST(TestOperator1intEquals) {
- Operator1<int> op1a(23, 0, 0, 0, "Scratchy", 11);
- Operator1<int> op1b(23, 2, 2, 2, "Scratchy", 11);
+ Operator1<int> op1a(23, Operator::kNoProperties, 0, 0, "Scratchy", 11);
+ Operator1<int> op1b(23, Operator::kFoldable, 2, 2, "Scratchy", 11);
CHECK(op1a.Equals(&op1a));
CHECK(op1a.Equals(&op1b));
CHECK(op1b.Equals(&op1a));
CHECK(op1b.Equals(&op1b));
- Operator1<int> op2a(24, 0, 0, 0, "Im", 3);
- Operator1<int> op2b(24, 0, 0, 0, "Im", 4);
+ Operator1<int> op2a(24, Operator::kNoProperties, 0, 0, "Im", 3);
+ Operator1<int> op2b(24, Operator::kNoProperties, 0, 0, "Im", 4);
CHECK(op2a.Equals(&op2a));
CHECK(!op2a.Equals(&op2b));
@@ -129,7 +129,7 @@
CHECK(!op2b.Equals(&op1a));
CHECK(!op2b.Equals(&op1b));
- SimpleOperator op3(25, 0, 0, 0, "Weepy");
+ SimpleOperator op3(25, Operator::kNoProperties, 0, 0, "Weepy");
CHECK(!op1a.Equals(&op3));
CHECK(!op1b.Equals(&op3));
@@ -144,28 +144,28 @@
TEST(TestOperator1intPrint) {
- Operator1<int> op1(12, 0, 0, 1, "Op1Test", 0);
+ Operator1<int> op1(12, Operator::kNoProperties, 0, 1, "Op1Test", 0);
CHECK_EQ("Op1Test[0]", OperatorToString(&op1).get());
- Operator1<int> op2(12, 0, 0, 1, "Op1Test", 66666666);
+ Operator1<int> op2(12, Operator::kNoProperties, 0, 1, "Op1Test",
66666666);
CHECK_EQ("Op1Test[66666666]", OperatorToString(&op2).get());
- Operator1<int> op3(12, 0, 0, 1, "FooBar", 2347);
+ Operator1<int> op3(12, Operator::kNoProperties, 0, 1, "FooBar", 2347);
CHECK_EQ("FooBar[2347]", OperatorToString(&op3).get());
- Operator1<int> op4(12, 0, 0, 1, "BarFoo", -879);
+ Operator1<int> op4(12, Operator::kNoProperties, 0, 1, "BarFoo", -879);
CHECK_EQ("BarFoo[-879]", OperatorToString(&op4).get());
}
TEST(TestOperator1doubleHash) {
- Operator1<double> op1a(23, 0, 0, 0, "Wolfie", 11.77);
- Operator1<double> op1b(23, 2, 2, 2, "Doggie", 11.77);
+ Operator1<double> op1a(23, Operator::kNoProperties, 0, 0, "Wolfie",
11.77);
+ Operator1<double> op1b(23, Operator::kFoldable, 2, 2, "Doggie", 11.77);
CHECK_EQ(op1a.HashCode(), op1b.HashCode());
- Operator1<double> op2a(24, 0, 0, 0, "Arfie", -6.7);
- Operator1<double> op2b(24, 0, 0, 0, "Arfie", -6.8);
+ Operator1<double> op2a(24, Operator::kNoProperties, 0, 0, "Arfie", -6.7);
+ Operator1<double> op2b(24, Operator::kNoProperties, 0, 0, "Arfie", -6.8);
CHECK_NE(op1a.HashCode(), op2a.HashCode());
CHECK_NE(op2a.HashCode(), op2b.HashCode());
@@ -173,16 +173,16 @@
TEST(TestOperator1doubleEquals) {
- Operator1<double> op1a(23, 0, 0, 0, "Scratchy", 11.77);
- Operator1<double> op1b(23, 2, 2, 2, "Scratchy", 11.77);
+ Operator1<double> op1a(23, Operator::kNoProperties, 0, 0, "Scratchy",
11.77);
+ Operator1<double> op1b(23, Operator::kFoldable, 2, 2, "Scratchy", 11.77);
CHECK(op1a.Equals(&op1a));
CHECK(op1a.Equals(&op1b));
CHECK(op1b.Equals(&op1a));
CHECK(op1b.Equals(&op1b));
- Operator1<double> op2a(24, 0, 0, 0, "Im", 3.1);
- Operator1<double> op2b(24, 0, 0, 0, "Im", 3.2);
+ Operator1<double> op2a(24, Operator::kNoProperties, 0, 0, "Im", 3.1);
+ Operator1<double> op2b(24, Operator::kNoProperties, 0, 0, "Im", 3.2);
CHECK(op2a.Equals(&op2a));
CHECK(!op2a.Equals(&op2b));
@@ -199,7 +199,7 @@
CHECK(!op2b.Equals(&op1a));
CHECK(!op2b.Equals(&op1b));
- SimpleOperator op3(25, 0, 0, 0, "Weepy");
+ SimpleOperator op3(25, Operator::kNoProperties, 0, 0, "Weepy");
CHECK(!op1a.Equals(&op3));
CHECK(!op1b.Equals(&op3));
@@ -211,8 +211,8 @@
CHECK(!op3.Equals(&op2a));
CHECK(!op3.Equals(&op2b));
- Operator1<double> op4a(24, 0, 0, 0, "Bashful", NaN);
- Operator1<double> op4b(24, 0, 0, 0, "Bashful", NaN);
+ Operator1<double> op4a(24, Operator::kNoProperties, 0, 0, "Bashful",
NaN);
+ Operator1<double> op4b(24, Operator::kNoProperties, 0, 0, "Bashful",
NaN);
CHECK(op4a.Equals(&op4a));
CHECK(op4a.Equals(&op4b));
@@ -227,18 +227,18 @@
TEST(TestOperator1doublePrint) {
- Operator1<double> op1(12, 0, 0, 1, "Op1Test", 0);
+ Operator1<double> op1(12, Operator::kNoProperties, 0, 1, "Op1Test", 0);
CHECK_EQ("Op1Test[0]", OperatorToString(&op1).get());
- Operator1<double> op2(12, 0, 0, 1, "Op1Test", 7.3);
+ Operator1<double> op2(12, Operator::kNoProperties, 0, 1, "Op1Test", 7.3);
CHECK_EQ("Op1Test[7.3]", OperatorToString(&op2).get());
- Operator1<double> op3(12, 0, 0, 1, "FooBar", 2e+123);
+ Operator1<double> op3(12, Operator::kNoProperties, 0, 1, "FooBar",
2e+123);
CHECK_EQ("FooBar[2e+123]", OperatorToString(&op3).get());
- Operator1<double> op4(12, 0, 0, 1, "BarFoo", Infinity);
+ Operator1<double> op4(12, Operator::kNoProperties, 0, 1, "BarFoo",
Infinity);
CHECK_EQ("BarFoo[inf]", OperatorToString(&op4).get());
- Operator1<double> op5(12, 0, 0, 1, "BarFoo", NaN);
+ Operator1<double> op5(12, Operator::kNoProperties, 0, 1, "BarFoo", NaN);
CHECK_EQ("BarFoo[nan]", OperatorToString(&op5).get());
}
=======================================
--- /branches/bleeding_edge/tools/gyp/v8.gyp Tue Sep 2 07:07:52 2014 UTC
+++ /branches/bleeding_edge/tools/gyp/v8.gyp Tue Sep 2 11:36:55 2014 UTC
@@ -372,6 +372,7 @@
'../../src/codegen.h',
'../../src/compilation-cache.cc',
'../../src/compilation-cache.h',
+ '../../src/compiler/access-builder.cc',
'../../src/compiler/access-builder.h',
'../../src/compiler/ast-graph-builder.cc',
'../../src/compiler/ast-graph-builder.h',
@@ -441,6 +442,7 @@
'../../src/compiler/opcodes.h',
'../../src/compiler/operator-properties-inl.h',
'../../src/compiler/operator-properties.h',
+ '../../src/compiler/operator.cc',
'../../src/compiler/operator.h',
'../../src/compiler/phi-reducer.h',
'../../src/compiler/pipeline.cc',
@@ -459,6 +461,7 @@
'../../src/compiler/simplified-node-factory.h',
'../../src/compiler/simplified-operator-reducer.cc',
'../../src/compiler/simplified-operator-reducer.h',
+ '../../src/compiler/simplified-operator.cc',
'../../src/compiler/simplified-operator.h',
'../../src/compiler/source-position.cc',
'../../src/compiler/source-position.h',
--
--
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.