Chromium Code Reviews| Index: test/unittests/compiler/graph-unittest.h |
| diff --git a/test/unittests/compiler/graph-unittest.h b/test/unittests/compiler/graph-unittest.h |
| index 7c75161d9d2c092624fe3b247d5808476594f52c..c7285a042e1509fb6bdb634aa60f2e412d813ee9 100644 |
| --- a/test/unittests/compiler/graph-unittest.h |
| +++ b/test/unittests/compiler/graph-unittest.h |
| @@ -7,6 +7,8 @@ |
| #include "src/compiler/common-operator.h" |
| #include "src/compiler/graph.h" |
| +#include "src/compiler/machine-operator.h" |
| +#include "src/compiler/node.h" |
| #include "src/compiler/typer.h" |
| #include "test/unittests/test-utils.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| @@ -31,7 +33,6 @@ class GraphTest : public TestWithContext, public TestWithZone { |
| explicit GraphTest(int num_parameters = 1); |
| ~GraphTest() OVERRIDE; |
| - protected: |
| Node* Parameter(int32_t index = 0); |
| Node* Float32Constant(volatile float value); |
| Node* Float64Constant(volatile double value); |
| @@ -50,6 +51,7 @@ class GraphTest : public TestWithContext, public TestWithZone { |
| Matcher<Node*> IsFalseConstant(); |
| Matcher<Node*> IsTrueConstant(); |
| + Node* start() { return graph()->start(); } |
| CommonOperatorBuilder* common() { return &common_; } |
| Graph* graph() { return &graph_; } |
| @@ -64,7 +66,6 @@ class TypedGraphTest : public GraphTest { |
| explicit TypedGraphTest(int num_parameters = 1); |
| ~TypedGraphTest() OVERRIDE; |
| - protected: |
| Node* Parameter(int32_t index = 0) { return GraphTest::Parameter(index); } |
| Node* Parameter(Type* type, int32_t index = 0); |
| @@ -74,6 +75,76 @@ class TypedGraphTest : public GraphTest { |
| Typer typer_; |
| }; |
| + |
|
Benedikt Meurer
2015/01/15 13:16:16
Move these helpers to loop-peeling-unittest.cc. Al
titzer
2015/01/15 13:36:51
The plan is to use them in other tests, so maybe a
Benedikt Meurer
2015/01/15 13:43:09
Well this kind of goes against the purpose of Grap
titzer
2015/01/16 16:15:37
PTAL, I've made these utilities into standalone st
Benedikt Meurer
2015/01/16 17:55:36
Thanks. Now you can undo the changes to graph-unit
titzer
2015/01/19 09:47:11
Done.
|
| +// A helper for building while loops. |
| +struct While { |
|
Benedikt Meurer
2015/01/15 13:16:16
According to the style guide "structs should be us
titzer
2015/01/15 13:36:51
I'd prefer to keep these as structs to avoid acces
Benedikt Meurer
2015/01/15 13:43:09
Personally I don't like these helper structs at al
|
| + GraphTest* t; |
| + Node* branch; |
| + Node* if_true; |
| + Node* exit; |
| + Node* loop; |
| + |
| + While(GraphTest* R, Node* cond, Node* control = nullptr) : t(R) { |
| + if (control == nullptr) control = R->start(); |
| + loop = t->graph()->NewNode(t->common()->Loop(2), control, control); |
| + branch = t->graph()->NewNode(t->common()->Branch(), cond, loop); |
| + if_true = t->graph()->NewNode(t->common()->IfTrue(), branch); |
| + exit = t->graph()->NewNode(t->common()->IfFalse(), branch); |
| + loop->ReplaceInput(1, if_true); |
| + } |
| + |
| + void Chain(Node* control) { loop->ReplaceInput(0, control); } |
| + void Nest(While* that) { |
| + that->loop->ReplaceInput(1, exit); |
| + this->loop->ReplaceInput(0, that->if_true); |
| + } |
| + Node* Phi(Node* a, Node* b) { |
| + return t->graph()->NewNode(t->common()->Phi(kMachAnyTagged, 2), a, b, loop); |
| + } |
| +}; |
| + |
| + |
| +// A helper for building branches. |
| +struct Branch { |
|
Benedikt Meurer
2015/01/15 13:16:16
See above.
|
| + Node* branch; |
| + Node* if_true; |
| + Node* if_false; |
| + |
| + Branch(GraphTest* R, Node* cond, Node* control = nullptr) { |
| + if (control == nullptr) control = R->start(); |
| + branch = R->graph()->NewNode(R->common()->Branch(), cond, control); |
| + if_true = R->graph()->NewNode(R->common()->IfTrue(), branch); |
| + if_false = R->graph()->NewNode(R->common()->IfFalse(), branch); |
| + } |
| +}; |
| + |
| + |
| +// A helper for building counters attached to loops. |
| +struct Counter { |
|
Benedikt Meurer
2015/01/15 13:16:16
See above.
|
| + Node* base; |
| + Node* inc; |
| + Node* phi; |
| + Node* add; |
| + |
| + Counter(While& w, MachineOperatorBuilder* machine, int32_t b, int32_t k) |
|
Benedikt Meurer
2015/01/15 13:16:16
According to the google style guide: All parameter
titzer
2015/01/15 13:36:51
Done.
|
| + : base(w.t->Int32Constant(b)), inc(w.t->Int32Constant(k)) { |
| + Build(w, machine); |
| + } |
| + |
| + Counter(While& w, MachineOperatorBuilder* machine, Node* b, Node* k) |
|
Benedikt Meurer
2015/01/15 13:16:16
According to the google style guide: All parameter
titzer
2015/01/15 13:36:51
Done.
|
| + : base(b), inc(k) { |
| + Build(w, machine); |
| + } |
| + |
| + void Build(While& w, MachineOperatorBuilder* machine) { |
|
Benedikt Meurer
2015/01/15 13:16:16
According to the google style guide: All parameter
titzer
2015/01/15 13:36:51
Done.
|
| + phi = w.t->graph()->NewNode(w.t->common()->Phi(kMachAnyTagged, 2), base, |
| + base, w.loop); |
| + add = w.t->graph()->NewNode(machine->Int32Add(), phi, inc); |
| + phi->ReplaceInput(1, add); |
| + } |
| +}; |
| + |
| + |
| } // namespace compiler |
| } // namespace internal |
| } // namespace v8 |