OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 "src/compiler/node.h" | 5 #include "src/compiler/node.h" |
6 #include "src/compiler/schedule.h" | 6 #include "src/compiler/schedule.h" |
7 #include "test/unittests/test-utils.h" | 7 #include "test/unittests/test-utils.h" |
8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
9 | 9 |
10 using testing::ElementsAre; | 10 using testing::ElementsAre; |
(...skipping 55 matching lines...) Loading... |
66 EXPECT_EQ(&b0, BasicBlock::GetCommonDominator(&b1, &b3)); | 66 EXPECT_EQ(&b0, BasicBlock::GetCommonDominator(&b1, &b3)); |
67 EXPECT_EQ(&b0, BasicBlock::GetCommonDominator(&b3, &b1)); | 67 EXPECT_EQ(&b0, BasicBlock::GetCommonDominator(&b3, &b1)); |
68 } | 68 } |
69 | 69 |
70 | 70 |
71 typedef TestWithZone ScheduleTest; | 71 typedef TestWithZone ScheduleTest; |
72 | 72 |
73 | 73 |
74 namespace { | 74 namespace { |
75 | 75 |
| 76 const Operator kCallOperator(IrOpcode::kCall, Operator::kNoProperties, |
| 77 "MockCall", 0, 0, 0, 0, 0, 0); |
76 const Operator kBranchOperator(IrOpcode::kBranch, Operator::kNoProperties, | 78 const Operator kBranchOperator(IrOpcode::kBranch, Operator::kNoProperties, |
77 "Branch", 0, 0, 0, 0, 0, 0); | 79 "MockBranch", 0, 0, 0, 0, 0, 0); |
78 const Operator kDummyOperator(IrOpcode::kParameter, Operator::kNoProperties, | 80 const Operator kDummyOperator(IrOpcode::kParameter, Operator::kNoProperties, |
79 "Dummy", 0, 0, 0, 0, 0, 0); | 81 "Dummy", 0, 0, 0, 0, 0, 0); |
80 | 82 |
81 } // namespace | 83 } // namespace |
82 | 84 |
83 | 85 |
84 TEST_F(ScheduleTest, Constructor) { | 86 TEST_F(ScheduleTest, Constructor) { |
85 Schedule schedule(zone()); | 87 Schedule schedule(zone()); |
86 EXPECT_NE(nullptr, schedule.start()); | 88 EXPECT_NE(nullptr, schedule.start()); |
87 EXPECT_EQ(schedule.start(), | 89 EXPECT_EQ(schedule.start(), |
(...skipping 40 matching lines...) Loading... |
128 EXPECT_EQ(1u, block->PredecessorCount()); | 130 EXPECT_EQ(1u, block->PredecessorCount()); |
129 EXPECT_EQ(0u, block->SuccessorCount()); | 131 EXPECT_EQ(0u, block->SuccessorCount()); |
130 EXPECT_EQ(start, block->PredecessorAt(0)); | 132 EXPECT_EQ(start, block->PredecessorAt(0)); |
131 EXPECT_THAT(block->predecessors(), ElementsAre(start)); | 133 EXPECT_THAT(block->predecessors(), ElementsAre(start)); |
132 | 134 |
133 EXPECT_EQ(0u, end->PredecessorCount()); | 135 EXPECT_EQ(0u, end->PredecessorCount()); |
134 EXPECT_EQ(0u, end->SuccessorCount()); | 136 EXPECT_EQ(0u, end->SuccessorCount()); |
135 } | 137 } |
136 | 138 |
137 | 139 |
| 140 TEST_F(ScheduleTest, AddCall) { |
| 141 Schedule schedule(zone()); |
| 142 BasicBlock* start = schedule.start(); |
| 143 |
| 144 Node* call = Node::New(zone(), 0, &kCallOperator, 0, nullptr, false); |
| 145 BasicBlock* sblock = schedule.NewBasicBlock(); |
| 146 BasicBlock* eblock = schedule.NewBasicBlock(); |
| 147 schedule.AddCall(start, call, sblock, eblock); |
| 148 |
| 149 EXPECT_EQ(start, schedule.block(call)); |
| 150 |
| 151 EXPECT_EQ(0u, start->PredecessorCount()); |
| 152 EXPECT_EQ(2u, start->SuccessorCount()); |
| 153 EXPECT_EQ(sblock, start->SuccessorAt(0)); |
| 154 EXPECT_EQ(eblock, start->SuccessorAt(1)); |
| 155 EXPECT_THAT(start->successors(), ElementsAre(sblock, eblock)); |
| 156 |
| 157 EXPECT_EQ(1u, sblock->PredecessorCount()); |
| 158 EXPECT_EQ(0u, sblock->SuccessorCount()); |
| 159 EXPECT_EQ(start, sblock->PredecessorAt(0)); |
| 160 EXPECT_THAT(sblock->predecessors(), ElementsAre(start)); |
| 161 |
| 162 EXPECT_EQ(1u, eblock->PredecessorCount()); |
| 163 EXPECT_EQ(0u, eblock->SuccessorCount()); |
| 164 EXPECT_EQ(start, eblock->PredecessorAt(0)); |
| 165 EXPECT_THAT(eblock->predecessors(), ElementsAre(start)); |
| 166 } |
| 167 |
| 168 |
138 TEST_F(ScheduleTest, AddBranch) { | 169 TEST_F(ScheduleTest, AddBranch) { |
139 Schedule schedule(zone()); | 170 Schedule schedule(zone()); |
140 BasicBlock* start = schedule.start(); | 171 BasicBlock* start = schedule.start(); |
141 | 172 |
142 Node* branch = Node::New(zone(), 0, &kBranchOperator, 0, nullptr, false); | 173 Node* branch = Node::New(zone(), 0, &kBranchOperator, 0, nullptr, false); |
143 BasicBlock* tblock = schedule.NewBasicBlock(); | 174 BasicBlock* tblock = schedule.NewBasicBlock(); |
144 BasicBlock* fblock = schedule.NewBasicBlock(); | 175 BasicBlock* fblock = schedule.NewBasicBlock(); |
145 schedule.AddBranch(start, branch, tblock, fblock); | 176 schedule.AddBranch(start, branch, tblock, fblock); |
146 | 177 |
147 EXPECT_EQ(start, schedule.block(branch)); | 178 EXPECT_EQ(start, schedule.block(branch)); |
(...skipping 61 matching lines...) Loading... |
209 | 240 |
210 EXPECT_EQ(1u, end->PredecessorCount()); | 241 EXPECT_EQ(1u, end->PredecessorCount()); |
211 EXPECT_EQ(0u, end->SuccessorCount()); | 242 EXPECT_EQ(0u, end->SuccessorCount()); |
212 EXPECT_EQ(mblock, end->PredecessorAt(0)); | 243 EXPECT_EQ(mblock, end->PredecessorAt(0)); |
213 EXPECT_THAT(end->predecessors(), ElementsAre(mblock)); | 244 EXPECT_THAT(end->predecessors(), ElementsAre(mblock)); |
214 } | 245 } |
215 | 246 |
216 } // namespace compiler | 247 } // namespace compiler |
217 } // namespace internal | 248 } // namespace internal |
218 } // namespace v8 | 249 } // namespace v8 |
OLD | NEW |