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

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

Issue 509343002: Better typing and type verification (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
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/control-builders.h" 7 #include "src/compiler/control-builders.h"
8 #include "src/compiler/generic-node-inl.h" 8 #include "src/compiler/generic-node-inl.h"
9 #include "src/compiler/graph-visualizer.h" 9 #include "src/compiler/graph-visualizer.h"
10 #include "src/compiler/node-properties-inl.h" 10 #include "src/compiler/node-properties-inl.h"
(...skipping 17 matching lines...) Expand all
28 28
29 template <typename ReturnType> 29 template <typename ReturnType>
30 class SimplifiedLoweringTester : public GraphBuilderTester<ReturnType> { 30 class SimplifiedLoweringTester : public GraphBuilderTester<ReturnType> {
31 public: 31 public:
32 SimplifiedLoweringTester(MachineType p0 = kMachNone, 32 SimplifiedLoweringTester(MachineType p0 = kMachNone,
33 MachineType p1 = kMachNone, 33 MachineType p1 = kMachNone,
34 MachineType p2 = kMachNone, 34 MachineType p2 = kMachNone,
35 MachineType p3 = kMachNone, 35 MachineType p3 = kMachNone,
36 MachineType p4 = kMachNone) 36 MachineType p4 = kMachNone)
37 : GraphBuilderTester<ReturnType>(p0, p1, p2, p3, p4), 37 : GraphBuilderTester<ReturnType>(p0, p1, p2, p3, p4),
38 typer(this->zone()), 38 typer(this->graph(), MaybeHandle<Context>()),
39 jsgraph(this->graph(), this->common(), &typer), 39 jsgraph(this->graph(), this->common()),
40 lowering(&jsgraph) {} 40 lowering(&jsgraph) {}
41 41
42 Typer typer; 42 Typer typer;
43 JSGraph jsgraph; 43 JSGraph jsgraph;
44 SimplifiedLowering lowering; 44 SimplifiedLowering lowering;
45 45
46 void LowerAllNodes() { 46 void LowerAllNodes() {
47 this->End(); 47 this->End();
48 typer.Run();
48 lowering.LowerAllNodes(); 49 lowering.LowerAllNodes();
49 } 50 }
50 51
51 Factory* factory() { return this->isolate()->factory(); } 52 Factory* factory() { return this->isolate()->factory(); }
52 Heap* heap() { return this->isolate()->heap(); } 53 Heap* heap() { return this->isolate()->heap(); }
53 }; 54 };
54 55
55 56
56 // TODO(dcarney): find a home for these functions. 57 // TODO(dcarney): find a home for these functions.
57 namespace { 58 namespace {
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 Typer typer; 608 Typer typer;
608 JSGraph jsgraph; 609 JSGraph jsgraph;
609 Node* p0; 610 Node* p0;
610 Node* p1; 611 Node* p1;
611 Node* start; 612 Node* start;
612 Node* end; 613 Node* end;
613 Node* ret; 614 Node* ret;
614 615
615 explicit TestingGraph(Type* p0_type, Type* p1_type = Type::None()) 616 explicit TestingGraph(Type* p0_type, Type* p1_type = Type::None())
616 : GraphAndBuilders(main_zone()), 617 : GraphAndBuilders(main_zone()),
617 typer(main_zone()), 618 typer(graph(), MaybeHandle<Context>()),
618 jsgraph(graph(), common(), &typer) { 619 jsgraph(graph(), common()) {
619 start = graph()->NewNode(common()->Start(2)); 620 start = graph()->NewNode(common()->Start(2));
620 graph()->SetStart(start); 621 graph()->SetStart(start);
621 ret = 622 ret =
622 graph()->NewNode(common()->Return(), jsgraph.Constant(0), start, start); 623 graph()->NewNode(common()->Return(), jsgraph.Constant(0), start, start);
623 end = graph()->NewNode(common()->End(), ret); 624 end = graph()->NewNode(common()->End(), ret);
624 graph()->SetEnd(end); 625 graph()->SetEnd(end);
625 p0 = graph()->NewNode(common()->Parameter(0), start); 626 p0 = graph()->NewNode(common()->Parameter(0), start);
626 p1 = graph()->NewNode(common()->Parameter(1), start); 627 p1 = graph()->NewNode(common()->Parameter(1), start);
628 typer.Run();
627 NodeProperties::SetBounds(p0, Bounds(p0_type)); 629 NodeProperties::SetBounds(p0, Bounds(p0_type));
628 NodeProperties::SetBounds(p1, Bounds(p1_type)); 630 NodeProperties::SetBounds(p1, Bounds(p1_type));
629 } 631 }
630 632
631 void CheckLoweringBinop(IrOpcode::Value expected, Operator* op) { 633 void CheckLoweringBinop(IrOpcode::Value expected, Operator* op) {
632 Node* node = Return(graph()->NewNode(op, p0, p1)); 634 Node* node = Return(graph()->NewNode(op, p0, p1));
633 Lower(); 635 Lower();
634 CHECK_EQ(expected, node->opcode()); 636 CHECK_EQ(expected, node->opcode());
635 } 637 }
636 638
637 void CheckLoweringTruncatedBinop(IrOpcode::Value expected, Operator* op, 639 void CheckLoweringTruncatedBinop(IrOpcode::Value expected, Operator* op,
638 Operator* trunc) { 640 Operator* trunc) {
639 Node* node = graph()->NewNode(op, p0, p1); 641 Node* node = graph()->NewNode(op, p0, p1);
640 Return(graph()->NewNode(trunc, node)); 642 Return(graph()->NewNode(trunc, node));
641 Lower(); 643 Lower();
642 CHECK_EQ(expected, node->opcode()); 644 CHECK_EQ(expected, node->opcode());
643 } 645 }
644 646
645 void Lower() { 647 void Lower() {
646 SimplifiedLowering lowering(&jsgraph); 648 SimplifiedLowering(&jsgraph).LowerAllNodes();
647 lowering.LowerAllNodes();
648 } 649 }
649 650
650 // Inserts the node as the return value of the graph. 651 // Inserts the node as the return value of the graph.
651 Node* Return(Node* node) { 652 Node* Return(Node* node) {
652 ret->ReplaceInput(0, node); 653 ret->ReplaceInput(0, node);
653 return node; 654 return node;
654 } 655 }
655 656
656 // Inserts the node as the effect input to the return of the graph. 657 // Inserts the node as the effect input to the return of the graph.
657 void Effect(Node* node) { ret->ReplaceInput(1, node); } 658 void Effect(Node* node) { ret->ReplaceInput(1, node); }
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after
1341 1342
1342 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0, 1343 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0,
1343 t.p1, t.start, t.start); 1344 t.p1, t.start, t.start);
1344 t.Effect(store); 1345 t.Effect(store);
1345 t.Lower(); 1346 t.Lower();
1346 1347
1347 CHECK_EQ(IrOpcode::kStore, store->opcode()); 1348 CHECK_EQ(IrOpcode::kStore, store->opcode());
1348 CHECK_EQ(t.p0, store->InputAt(0)); 1349 CHECK_EQ(t.p0, store->InputAt(0));
1349 CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(2)); 1350 CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(2));
1350 } 1351 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698