Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: test/cctest/compiler/test-simplified-lowering.cc

Issue 1109773002: [turbofan] Add SimplifiedOperator::Allocate operator. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/flag-definitions.h ('k') | test/unittests/compiler/js-typed-lowering-unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <limits> 5 #include <limits>
6 6
7 #include "src/compiler/access-builder.h" 7 #include "src/compiler/access-builder.h"
8 #include "src/compiler/change-lowering.h" 8 #include "src/compiler/change-lowering.h"
9 #include "src/compiler/control-builders.h" 9 #include "src/compiler/control-builders.h"
10 #include "src/compiler/graph-reducer.h" 10 #include "src/compiler/graph-reducer.h"
11 #include "src/compiler/graph-visualizer.h" 11 #include "src/compiler/graph-visualizer.h"
12 #include "src/compiler/node-properties.h" 12 #include "src/compiler/node-properties.h"
13 #include "src/compiler/pipeline.h" 13 #include "src/compiler/pipeline.h"
14 #include "src/compiler/representation-change.h" 14 #include "src/compiler/representation-change.h"
15 #include "src/compiler/simplified-lowering.h" 15 #include "src/compiler/simplified-lowering.h"
16 #include "src/compiler/source-position.h" 16 #include "src/compiler/source-position.h"
17 #include "src/compiler/typer.h" 17 #include "src/compiler/typer.h"
18 #include "src/compiler/verifier.h" 18 #include "src/compiler/verifier.h"
19 #include "src/execution.h" 19 #include "src/execution.h"
20 #include "src/parser.h" 20 #include "src/parser.h"
21 #include "src/rewriter.h" 21 #include "src/rewriter.h"
22 #include "src/scopes.h" 22 #include "src/scopes.h"
23 #include "test/cctest/cctest.h" 23 #include "test/cctest/cctest.h"
24 #include "test/cctest/compiler/codegen-tester.h" 24 #include "test/cctest/compiler/codegen-tester.h"
25 #include "test/cctest/compiler/function-tester.h"
25 #include "test/cctest/compiler/graph-builder-tester.h" 26 #include "test/cctest/compiler/graph-builder-tester.h"
26 #include "test/cctest/compiler/value-helper.h" 27 #include "test/cctest/compiler/value-helper.h"
27 28
28 using namespace v8::internal; 29 using namespace v8::internal;
29 using namespace v8::internal::compiler; 30 using namespace v8::internal::compiler;
30 31
31 template <typename ReturnType> 32 template <typename ReturnType>
32 class SimplifiedLoweringTester : public GraphBuilderTester<ReturnType> { 33 class SimplifiedLoweringTester : public GraphBuilderTester<ReturnType> {
33 public: 34 public:
34 SimplifiedLoweringTester(MachineType p0 = kMachNone, 35 SimplifiedLoweringTester(MachineType p0 = kMachNone,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 71
71 void CheckNumberCall(double expected, double input) { 72 void CheckNumberCall(double expected, double input) {
72 // TODO(titzer): make calls to NewNumber work in cctests. 73 // TODO(titzer): make calls to NewNumber work in cctests.
73 if (expected <= Smi::kMinValue) return; 74 if (expected <= Smi::kMinValue) return;
74 if (expected >= Smi::kMaxValue) return; 75 if (expected >= Smi::kMaxValue) return;
75 Handle<Object> num = factory()->NewNumber(input); 76 Handle<Object> num = factory()->NewNumber(input);
76 Object* result = this->Call(*num); 77 Object* result = this->Call(*num);
77 CHECK(factory()->NewNumber(expected)->SameValue(result)); 78 CHECK(factory()->NewNumber(expected)->SameValue(result));
78 } 79 }
79 80
81 template <typename T>
82 T* CallWithPotentialGC() {
83 // TODO(titzer): we wrap the code in a JSFunction here to reuse the
84 // JSEntryStub; that could be done with a special prologue or other stub.
85 Handle<JSFunction> fun = FunctionTester::ForMachineGraph(this->graph());
86 Handle<Object>* args = NULL;
87 MaybeHandle<Object> result = Execution::Call(
88 this->isolate(), fun, factory()->undefined_value(), 0, args, false);
89 return T::cast(*result.ToHandleChecked());
90 }
91
80 Factory* factory() { return this->isolate()->factory(); } 92 Factory* factory() { return this->isolate()->factory(); }
81 Heap* heap() { return this->isolate()->heap(); } 93 Heap* heap() { return this->isolate()->heap(); }
82 }; 94 };
83 95
84 96
85 // TODO(titzer): factor these tests out to test-run-simplifiedops.cc. 97 // TODO(titzer): factor these tests out to test-run-simplifiedops.cc.
86 // TODO(titzer): test tagged representation for input to NumberToInt32. 98 // TODO(titzer): test tagged representation for input to NumberToInt32.
87 TEST(RunNumberToInt32_float64) { 99 TEST(RunNumberToInt32_float64) {
88 // TODO(titzer): explicit load/stores here are only because of representations 100 // TODO(titzer): explicit load/stores here are only because of representations
89 double input; 101 double input;
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 655
644 656
645 TEST(RunAccessTests_Smi) { 657 TEST(RunAccessTests_Smi) {
646 Smi* data[] = {Smi::FromInt(-1), Smi::FromInt(-9), 658 Smi* data[] = {Smi::FromInt(-1), Smi::FromInt(-9),
647 Smi::FromInt(0), Smi::FromInt(666), 659 Smi::FromInt(0), Smi::FromInt(666),
648 Smi::FromInt(77777), Smi::FromInt(Smi::kMaxValue)}; 660 Smi::FromInt(77777), Smi::FromInt(Smi::kMaxValue)};
649 RunAccessTest<Smi*>(kMachAnyTagged, data, arraysize(data)); 661 RunAccessTest<Smi*>(kMachAnyTagged, data, arraysize(data));
650 } 662 }
651 663
652 664
665 TEST(RunAllocate) {
666 PretenureFlag flag[] = {NOT_TENURED, TENURED};
667
668 for (size_t i = 0; i < arraysize(flag); i++) {
669 SimplifiedLoweringTester<HeapObject*> t;
670 FieldAccess access = AccessBuilder::ForMap();
671 Node* size = t.jsgraph.Constant(HeapNumber::kSize);
672 Node* alloc = t.NewNode(t.simplified()->Allocate(flag[i]), size);
673 Node* map = t.jsgraph.Constant(t.factory()->heap_number_map());
674 t.StoreField(access, alloc, map);
675 t.Return(alloc);
676
677 t.LowerAllNodes();
678 t.GenerateCode();
679
680 if (Pipeline::SupportedTarget()) {
681 HeapObject* result = t.CallWithPotentialGC<HeapObject>();
682 CHECK(t.heap()->new_space()->Contains(result) || flag[i] == TENURED);
683 CHECK(t.heap()->old_space()->Contains(result) || flag[i] == NOT_TENURED);
684 CHECK(result->IsHeapNumber());
685 }
686 }
687 }
688
689
653 // Fills in most of the nodes of the graph in order to make tests shorter. 690 // Fills in most of the nodes of the graph in order to make tests shorter.
654 class TestingGraph : public HandleAndZoneScope, public GraphAndBuilders { 691 class TestingGraph : public HandleAndZoneScope, public GraphAndBuilders {
655 public: 692 public:
656 Typer typer; 693 Typer typer;
657 JSOperatorBuilder javascript; 694 JSOperatorBuilder javascript;
658 JSGraph jsgraph; 695 JSGraph jsgraph;
659 Node* p0; 696 Node* p0;
660 Node* p1; 697 Node* p1;
661 Node* p2; 698 Node* p2;
662 Node* start; 699 Node* start;
(...skipping 1390 matching lines...) Expand 10 before | Expand all | Expand 10 after
2053 Bounds phi_bounds = Bounds::Either(Bounds(d.arg1), Bounds(d.arg2), z); 2090 Bounds phi_bounds = Bounds::Either(Bounds(d.arg1), Bounds(d.arg2), z);
2054 NodeProperties::SetBounds(phi, phi_bounds); 2091 NodeProperties::SetBounds(phi, phi_bounds);
2055 2092
2056 Node* use = t.Use(phi, d.use); 2093 Node* use = t.Use(phi, d.use);
2057 t.Return(use); 2094 t.Return(use);
2058 t.Lower(); 2095 t.Lower();
2059 2096
2060 CHECK_EQ(d.expected, OpParameter<MachineType>(phi)); 2097 CHECK_EQ(d.expected, OpParameter<MachineType>(phi));
2061 } 2098 }
2062 } 2099 }
OLDNEW
« no previous file with comments | « src/flag-definitions.h ('k') | test/unittests/compiler/js-typed-lowering-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698