diff options
author | Michaël Zasso <targos@protonmail.com> | 2016-09-06 22:49:51 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2016-09-22 09:51:19 +0200 |
commit | ec02b811a8a5c999bab4de312be2d732b7d9d50b (patch) | |
tree | ca3068017254f238cf413a451c57a803572983a4 /deps/v8/src/compiler/common-operator.h | |
parent | d2eb7ce0105369a9cad82787cb33a665e9bd00ad (diff) | |
download | node-new-ec02b811a8a5c999bab4de312be2d732b7d9d50b.tar.gz |
deps: update V8 to 5.4.500.27
Pick up latest commit from the 5.4-lkgr branch.
deps: edit V8 gitignore to allow trace event copy
deps: update V8 trace event to 315bf1e2d45be7d53346c31cfcc37424a32c30c8
deps: edit V8 gitignore to allow gtest_prod.h copy
deps: update V8 gtest to 6f8a66431cb592dad629028a50b3dd418a408c87
PR-URL: https://github.com/nodejs/node/pull/8317
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Diffstat (limited to 'deps/v8/src/compiler/common-operator.h')
-rw-r--r-- | deps/v8/src/compiler/common-operator.h | 100 |
1 files changed, 83 insertions, 17 deletions
diff --git a/deps/v8/src/compiler/common-operator.h b/deps/v8/src/compiler/common-operator.h index 7c59f47c34..9e4d259bc9 100644 --- a/deps/v8/src/compiler/common-operator.h +++ b/deps/v8/src/compiler/common-operator.h @@ -5,17 +5,14 @@ #ifndef V8_COMPILER_COMMON_OPERATOR_H_ #define V8_COMPILER_COMMON_OPERATOR_H_ +#include "src/assembler.h" #include "src/compiler/frame-states.h" +#include "src/deoptimize-reason.h" #include "src/machine-type.h" #include "src/zone-containers.h" namespace v8 { namespace internal { - -// Forward declarations. -class ExternalReference; -class Type; - namespace compiler { // Forward declarations. @@ -46,6 +43,8 @@ std::ostream& operator<<(std::ostream&, BranchHint); BranchHint BranchHintOf(const Operator* const); +// Deoptimize reason for Deoptimize, DeoptimizeIf and DeoptimizeUnless. +DeoptimizeReason DeoptimizeReasonOf(Operator const* const); // Deoptimize bailout kind. enum class DeoptimizeKind : uint8_t { kEager, kSoft }; @@ -54,15 +53,28 @@ size_t hash_value(DeoptimizeKind kind); std::ostream& operator<<(std::ostream&, DeoptimizeKind); -DeoptimizeKind DeoptimizeKindOf(const Operator* const); +// Parameters for the {Deoptimize} operator. +class DeoptimizeParameters final { + public: + DeoptimizeParameters(DeoptimizeKind kind, DeoptimizeReason reason) + : kind_(kind), reason_(reason) {} + + DeoptimizeKind kind() const { return kind_; } + DeoptimizeReason reason() const { return reason_; } + + private: + DeoptimizeKind const kind_; + DeoptimizeReason const reason_; +}; +bool operator==(DeoptimizeParameters, DeoptimizeParameters); +bool operator!=(DeoptimizeParameters, DeoptimizeParameters); -// Prediction whether throw-site is surrounded by any local catch-scope. -enum class IfExceptionHint { kLocallyUncaught, kLocallyCaught }; +size_t hast_value(DeoptimizeParameters p); -size_t hash_value(IfExceptionHint hint); +std::ostream& operator<<(std::ostream&, DeoptimizeParameters p); -std::ostream& operator<<(std::ostream&, IfExceptionHint); +DeoptimizeParameters const& DeoptimizeParametersOf(Operator const* const); class SelectParameters final { @@ -88,6 +100,7 @@ std::ostream& operator<<(std::ostream&, SelectParameters const& p); SelectParameters const& SelectParametersOf(const Operator* const); +CallDescriptor const* CallDescriptorOf(const Operator* const); size_t ProjectionIndexOf(const Operator* const); @@ -114,6 +127,49 @@ std::ostream& operator<<(std::ostream&, ParameterInfo const&); int ParameterIndexOf(const Operator* const); const ParameterInfo& ParameterInfoOf(const Operator* const); +class RelocatablePtrConstantInfo final { + public: + enum Type { kInt32, kInt64 }; + + RelocatablePtrConstantInfo(int32_t value, RelocInfo::Mode rmode) + : value_(value), rmode_(rmode), type_(kInt32) {} + RelocatablePtrConstantInfo(int64_t value, RelocInfo::Mode rmode) + : value_(value), rmode_(rmode), type_(kInt64) {} + + intptr_t value() const { return value_; } + RelocInfo::Mode rmode() const { return rmode_; } + Type type() const { return type_; } + + private: + intptr_t value_; + RelocInfo::Mode rmode_; + Type type_; +}; + +bool operator==(RelocatablePtrConstantInfo const& lhs, + RelocatablePtrConstantInfo const& rhs); +bool operator!=(RelocatablePtrConstantInfo const& lhs, + RelocatablePtrConstantInfo const& rhs); + +std::ostream& operator<<(std::ostream&, RelocatablePtrConstantInfo const&); + +size_t hash_value(RelocatablePtrConstantInfo const& p); + +// Used to mark a region (as identified by BeginRegion/FinishRegion) as either +// JavaScript-observable or not (i.e. allocations are not JavaScript observable +// themselves, but transitioning stores are). +enum class RegionObservability : uint8_t { kObservable, kNotObservable }; + +size_t hash_value(RegionObservability); + +std::ostream& operator<<(std::ostream&, RegionObservability); + +RegionObservability RegionObservabilityOf(Operator const*) WARN_UNUSED_RESULT; + +std::ostream& operator<<(std::ostream& os, + const ZoneVector<MachineType>* types); + +Type* TypeGuardTypeOf(Operator const*) WARN_UNUSED_RESULT; // Interface for building common operators that can be used at any level of IR, // including JavaScript, mid-level, and low-level. @@ -127,14 +183,14 @@ class CommonOperatorBuilder final : public ZoneObject { const Operator* IfTrue(); const Operator* IfFalse(); const Operator* IfSuccess(); - const Operator* IfException(IfExceptionHint hint); + const Operator* IfException(); const Operator* Switch(size_t control_output_count); const Operator* IfValue(int32_t value); const Operator* IfDefault(); const Operator* Throw(); - const Operator* Deoptimize(DeoptimizeKind kind); - const Operator* DeoptimizeIf(); - const Operator* DeoptimizeUnless(); + const Operator* Deoptimize(DeoptimizeKind kind, DeoptimizeReason reason); + const Operator* DeoptimizeIf(DeoptimizeReason reason); + const Operator* DeoptimizeUnless(DeoptimizeReason reason); const Operator* Return(int value_input_count = 1); const Operator* Terminate(); @@ -155,13 +211,21 @@ class CommonOperatorBuilder final : public ZoneObject { const Operator* NumberConstant(volatile double); const Operator* HeapConstant(const Handle<HeapObject>&); + const Operator* RelocatableInt32Constant(int32_t value, + RelocInfo::Mode rmode); + const Operator* RelocatableInt64Constant(int64_t value, + RelocInfo::Mode rmode); + const Operator* Select(MachineRepresentation, BranchHint = BranchHint::kNone); const Operator* Phi(MachineRepresentation representation, int value_input_count); const Operator* EffectPhi(int effect_input_count); - const Operator* EffectSet(int arguments); - const Operator* Guard(Type* type); - const Operator* BeginRegion(); + const Operator* InductionVariablePhi(int value_input_count); + const Operator* LoopExit(); + const Operator* LoopExitValue(); + const Operator* LoopExitEffect(); + const Operator* Checkpoint(); + const Operator* BeginRegion(RegionObservability); const Operator* FinishRegion(); const Operator* StateValues(int arguments); const Operator* ObjectState(int pointer_slots, int id); @@ -172,6 +236,8 @@ class CommonOperatorBuilder final : public ZoneObject { const Operator* Call(const CallDescriptor* descriptor); const Operator* TailCall(const CallDescriptor* descriptor); const Operator* Projection(size_t index); + const Operator* Retain(); + const Operator* TypeGuard(Type* type); // Constructs a new merge or phi operator with the same opcode as {op}, but // with {size} inputs. |