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

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

Issue 658543002: Better typing and type verification (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed comments Created 6 years, 2 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/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/generic-node-inl.h" 10 #include "src/compiler/generic-node-inl.h"
(...skipping 19 matching lines...) Expand all
30 30
31 template <typename ReturnType> 31 template <typename ReturnType>
32 class SimplifiedLoweringTester : public GraphBuilderTester<ReturnType> { 32 class SimplifiedLoweringTester : public GraphBuilderTester<ReturnType> {
33 public: 33 public:
34 SimplifiedLoweringTester(MachineType p0 = kMachNone, 34 SimplifiedLoweringTester(MachineType p0 = kMachNone,
35 MachineType p1 = kMachNone, 35 MachineType p1 = kMachNone,
36 MachineType p2 = kMachNone, 36 MachineType p2 = kMachNone,
37 MachineType p3 = kMachNone, 37 MachineType p3 = kMachNone,
38 MachineType p4 = kMachNone) 38 MachineType p4 = kMachNone)
39 : GraphBuilderTester<ReturnType>(p0, p1, p2, p3, p4), 39 : GraphBuilderTester<ReturnType>(p0, p1, p2, p3, p4),
40 typer(this->zone()), 40 typer(this->graph(), MaybeHandle<Context>()),
41 javascript(this->zone()), 41 javascript(this->zone()),
42 jsgraph(this->graph(), this->common(), &javascript, &typer, 42 jsgraph(this->graph(), this->common(), &javascript, this->machine()),
43 this->machine()),
44 lowering(&jsgraph) {} 43 lowering(&jsgraph) {}
45 44
46 Typer typer; 45 Typer typer;
47 JSOperatorBuilder javascript; 46 JSOperatorBuilder javascript;
48 JSGraph jsgraph; 47 JSGraph jsgraph;
49 SimplifiedLowering lowering; 48 SimplifiedLowering lowering;
50 49
51 void LowerAllNodes() { 50 void LowerAllNodes() {
52 this->End(); 51 this->End();
52 typer.Run();
53 lowering.LowerAllNodes(); 53 lowering.LowerAllNodes();
54 } 54 }
55 55
56 void LowerAllNodesAndLowerChanges() { 56 void LowerAllNodesAndLowerChanges() {
57 this->End(); 57 this->End();
58 typer.Run(jsgraph.graph(), MaybeHandle<Context>()); 58 typer.Run();
59 lowering.LowerAllNodes(); 59 lowering.LowerAllNodes();
60 60
61 Zone* zone = this->zone(); 61 Zone* zone = this->zone();
62 CompilationInfo info(zone->isolate(), zone); 62 CompilationInfo info(zone->isolate(), zone);
63 Linkage linkage( 63 Linkage linkage(
64 &info, Linkage::GetSimplifiedCDescriptor(zone, this->machine_sig_)); 64 &info, Linkage::GetSimplifiedCDescriptor(zone, this->machine_sig_));
65 ChangeLowering lowering(&jsgraph, &linkage); 65 ChangeLowering lowering(&jsgraph, &linkage);
66 GraphReducer reducer(this->graph()); 66 GraphReducer reducer(this->graph());
67 reducer.AddReducer(&lowering); 67 reducer.AddReducer(&lowering);
68 reducer.ReduceGraph(); 68 reducer.ReduceGraph();
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 Node* p0; 667 Node* p0;
668 Node* p1; 668 Node* p1;
669 Node* p2; 669 Node* p2;
670 Node* start; 670 Node* start;
671 Node* end; 671 Node* end;
672 Node* ret; 672 Node* ret;
673 673
674 explicit TestingGraph(Type* p0_type, Type* p1_type = Type::None(), 674 explicit TestingGraph(Type* p0_type, Type* p1_type = Type::None(),
675 Type* p2_type = Type::None()) 675 Type* p2_type = Type::None())
676 : GraphAndBuilders(main_zone()), 676 : GraphAndBuilders(main_zone()),
677 typer(main_zone()), 677 typer(graph(), MaybeHandle<Context>()),
678 javascript(main_zone()), 678 javascript(main_zone()),
679 jsgraph(graph(), common(), &javascript, &typer, machine()) { 679 jsgraph(graph(), common(), &javascript, machine()) {
680 start = graph()->NewNode(common()->Start(2)); 680 start = graph()->NewNode(common()->Start(2));
681 graph()->SetStart(start); 681 graph()->SetStart(start);
682 ret = 682 ret =
683 graph()->NewNode(common()->Return(), jsgraph.Constant(0), start, start); 683 graph()->NewNode(common()->Return(), jsgraph.Constant(0), start, start);
684 end = graph()->NewNode(common()->End(), ret); 684 end = graph()->NewNode(common()->End(), ret);
685 graph()->SetEnd(end); 685 graph()->SetEnd(end);
686 p0 = graph()->NewNode(common()->Parameter(0), start); 686 p0 = graph()->NewNode(common()->Parameter(0), start);
687 p1 = graph()->NewNode(common()->Parameter(1), start); 687 p1 = graph()->NewNode(common()->Parameter(1), start);
688 p2 = graph()->NewNode(common()->Parameter(2), start); 688 p2 = graph()->NewNode(common()->Parameter(2), start);
689 typer.Run();
689 NodeProperties::SetBounds(p0, Bounds(p0_type)); 690 NodeProperties::SetBounds(p0, Bounds(p0_type));
690 NodeProperties::SetBounds(p1, Bounds(p1_type)); 691 NodeProperties::SetBounds(p1, Bounds(p1_type));
691 NodeProperties::SetBounds(p2, Bounds(p2_type)); 692 NodeProperties::SetBounds(p2, Bounds(p2_type));
692 } 693 }
693 694
694 void CheckLoweringBinop(IrOpcode::Value expected, const Operator* op) { 695 void CheckLoweringBinop(IrOpcode::Value expected, const Operator* op) {
695 Node* node = Return(graph()->NewNode(op, p0, p1)); 696 Node* node = Return(graph()->NewNode(op, p0, p1));
696 Lower(); 697 Lower();
697 CHECK_EQ(expected, node->opcode()); 698 CHECK_EQ(expected, node->opcode());
698 } 699 }
699 700
700 void CheckLoweringTruncatedBinop(IrOpcode::Value expected, const Operator* op, 701 void CheckLoweringTruncatedBinop(IrOpcode::Value expected, const Operator* op,
701 const Operator* trunc) { 702 const Operator* trunc) {
702 Node* node = graph()->NewNode(op, p0, p1); 703 Node* node = graph()->NewNode(op, p0, p1);
703 Return(graph()->NewNode(trunc, node)); 704 Return(graph()->NewNode(trunc, node));
704 Lower(); 705 Lower();
705 CHECK_EQ(expected, node->opcode()); 706 CHECK_EQ(expected, node->opcode());
706 } 707 }
707 708
708 void Lower() { 709 void Lower() {
709 SimplifiedLowering lowering(&jsgraph); 710 SimplifiedLowering(&jsgraph).LowerAllNodes();
710 lowering.LowerAllNodes();
711 } 711 }
712 712
713 // Inserts the node as the return value of the graph. 713 // Inserts the node as the return value of the graph.
714 Node* Return(Node* node) { 714 Node* Return(Node* node) {
715 ret->ReplaceInput(0, node); 715 ret->ReplaceInput(0, node);
716 return node; 716 return node;
717 } 717 }
718 718
719 // Inserts the node as the effect input to the return of the graph. 719 // Inserts the node as the effect input to the return of the graph.
720 void Effect(Node* node) { ret->ReplaceInput(1, node); } 720 void Effect(Node* node) { ret->ReplaceInput(1, node); }
(...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after
1533 CHECK_EQ(IrOpcode::kStore, store->opcode()); 1533 CHECK_EQ(IrOpcode::kStore, store->opcode());
1534 CHECK_EQ(t.p0, store->InputAt(0)); 1534 CHECK_EQ(t.p0, store->InputAt(0));
1535 CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(2)); 1535 CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(2));
1536 } 1536 }
1537 1537
1538 1538
1539 TEST(UpdatePhi) { 1539 TEST(UpdatePhi) {
1540 TestingGraph t(Type::Any(), Type::Signed32()); 1540 TestingGraph t(Type::Any(), Type::Signed32());
1541 static const MachineType kMachineTypes[] = {kMachInt32, kMachUint32, 1541 static const MachineType kMachineTypes[] = {kMachInt32, kMachUint32,
1542 kMachFloat64}; 1542 kMachFloat64};
1543 Type* kTypes[] = {Type::Signed32(), Type::Unsigned32(), Type::Number()};
1543 1544
1544 for (size_t i = 0; i < arraysize(kMachineTypes); i++) { 1545 for (size_t i = 0; i < arraysize(kMachineTypes); i++) {
1545 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, 1546 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1546 Handle<Name>::null(), Type::Any(), kMachineTypes[i]}; 1547 Handle<Name>::null(), kTypes[i], kMachineTypes[i]};
1547 1548
1548 Node* load0 = 1549 Node* load0 =
1549 t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, t.start); 1550 t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, t.start);
1550 Node* load1 = 1551 Node* load1 =
1551 t.graph()->NewNode(t.simplified()->LoadField(access), t.p1, t.start); 1552 t.graph()->NewNode(t.simplified()->LoadField(access), t.p1, t.start);
1552 Node* phi = t.graph()->NewNode(t.common()->Phi(kMachAnyTagged, 2), load0, 1553 Node* phi = t.graph()->NewNode(t.common()->Phi(kMachAnyTagged, 2), load0,
1553 load1, t.start); 1554 load1, t.start);
1554 t.Return(t.Use(phi, kMachineTypes[i])); 1555 t.Return(t.Use(phi, kMachineTypes[i]));
1555 t.Lower(); 1556 t.Lower();
1556 1557
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
1924 TestingGraph t(Type::Unsigned32()); 1925 TestingGraph t(Type::Unsigned32());
1925 Node* k = t.jsgraph.Constant(0); 1926 Node* k = t.jsgraph.Constant(0);
1926 Node* mod = t.graph()->NewNode(t.simplified()->NumberModulus(), t.p0, k); 1927 Node* mod = t.graph()->NewNode(t.simplified()->NumberModulus(), t.p0, k);
1927 Node* trunc = t.graph()->NewNode(t.simplified()->NumberToUint32(), mod); 1928 Node* trunc = t.graph()->NewNode(t.simplified()->NumberToUint32(), mod);
1928 t.Return(trunc); 1929 t.Return(trunc);
1929 t.Lower(); 1930 t.Lower();
1930 1931
1931 CHECK_EQ(IrOpcode::kFloat64Mod, mod->opcode()); 1932 CHECK_EQ(IrOpcode::kFloat64Mod, mod->opcode());
1932 } 1933 }
1933 } 1934 }
OLDNEW
« no previous file with comments | « test/cctest/compiler/test-representation-change.cc ('k') | test/unittests/compiler/change-lowering-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698