3a9466a89c
Remove the NumberConstant right hand side limitation for the speculative number operation optimization, and extend the logic to also deal with SpeculativeToNumber, which is common when dealing with postfix increment and array operations. Also add appropriate tests for all the relevant cases, specifically we mjsunit tests to increase the general coverage for the various cases here (in addition to dedicated unittests). Bug: v8:8015 Change-Id: I8c92f98490c63b07eb19686efd404322979e57c4 Reviewed-on: https://chromium-review.googlesource.com/1235919 Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#56072}
94 lines
2.6 KiB
C++
94 lines
2.6 KiB
C++
// 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.
|
|
|
|
#ifndef V8_UNITTESTS_COMPILER_GRAPH_UNITTEST_H_
|
|
#define V8_UNITTESTS_COMPILER_GRAPH_UNITTEST_H_
|
|
|
|
#include "src/compiler/common-operator.h"
|
|
#include "src/compiler/compiler-source-position-table.h"
|
|
#include "src/compiler/graph.h"
|
|
#include "src/compiler/node-origin-table.h"
|
|
#include "src/compiler/typer.h"
|
|
#include "src/handles.h"
|
|
#include "test/unittests/test-utils.h"
|
|
#include "testing/gmock/include/gmock/gmock.h"
|
|
|
|
namespace v8 {
|
|
namespace internal {
|
|
|
|
// Forward declarations.
|
|
class HeapObject;
|
|
|
|
namespace compiler {
|
|
|
|
using ::testing::Matcher;
|
|
|
|
class GraphTest : public virtual TestWithNativeContext,
|
|
public virtual TestWithIsolateAndZone {
|
|
public:
|
|
explicit GraphTest(int num_parameters = 1);
|
|
~GraphTest() override;
|
|
|
|
Node* start() { return graph()->start(); }
|
|
Node* end() { return graph()->end(); }
|
|
|
|
Node* Parameter(int32_t index = 0);
|
|
Node* Parameter(Type type, int32_t index = 0);
|
|
Node* Float32Constant(volatile float value);
|
|
Node* Float64Constant(volatile double value);
|
|
Node* Int32Constant(int32_t value);
|
|
Node* Uint32Constant(uint32_t value) {
|
|
return Int32Constant(bit_cast<int32_t>(value));
|
|
}
|
|
Node* Int64Constant(int64_t value);
|
|
Node* NumberConstant(volatile double value);
|
|
Node* HeapConstant(const Handle<HeapObject>& value);
|
|
Node* FalseConstant();
|
|
Node* TrueConstant();
|
|
Node* UndefinedConstant();
|
|
|
|
Node* EmptyFrameState();
|
|
|
|
Matcher<Node*> IsBooleanConstant(bool value) {
|
|
return value ? IsTrueConstant() : IsFalseConstant();
|
|
}
|
|
Matcher<Node*> IsFalseConstant();
|
|
Matcher<Node*> IsTrueConstant();
|
|
Matcher<Node*> IsNullConstant();
|
|
Matcher<Node*> IsUndefinedConstant();
|
|
|
|
CommonOperatorBuilder* common() { return &common_; }
|
|
Graph* graph() { return &graph_; }
|
|
SourcePositionTable* source_positions() { return &source_positions_; }
|
|
NodeOriginTable* node_origins() { return &node_origins_; }
|
|
JSHeapBroker* js_heap_broker() { return &js_heap_broker_; }
|
|
|
|
private:
|
|
CanonicalHandleScope canonical_;
|
|
CommonOperatorBuilder common_;
|
|
Graph graph_;
|
|
JSHeapBroker js_heap_broker_;
|
|
SourcePositionTable source_positions_;
|
|
NodeOriginTable node_origins_;
|
|
};
|
|
|
|
|
|
class TypedGraphTest : public GraphTest {
|
|
public:
|
|
explicit TypedGraphTest(int num_parameters = 1);
|
|
~TypedGraphTest() override;
|
|
|
|
protected:
|
|
Typer* typer() { return &typer_; }
|
|
|
|
private:
|
|
Typer typer_;
|
|
};
|
|
|
|
} // namespace compiler
|
|
} // namespace internal
|
|
} // namespace v8
|
|
|
|
#endif // V8_UNITTESTS_COMPILER_GRAPH_UNITTEST_H_
|