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

Side by Side Diff: test/unittests/compiler/effect-control-linearizer-unittest.cc

Issue 2446543002: [turbofan] Support variable size argument popping in TF-generated functions (Closed)
Patch Set: Fix tests and arm64 Created 4 years, 1 month 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
OLDNEW
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/effect-control-linearizer.h" 5 #include "src/compiler/effect-control-linearizer.h"
6 #include "src/compiler/access-builder.h" 6 #include "src/compiler/access-builder.h"
7 #include "src/compiler/js-graph.h" 7 #include "src/compiler/js-graph.h"
8 #include "src/compiler/linkage.h" 8 #include "src/compiler/linkage.h"
9 #include "src/compiler/node-properties.h" 9 #include "src/compiler/node-properties.h"
10 #include "src/compiler/schedule.h" 10 #include "src/compiler/schedule.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 } // namespace 53 } // namespace
54 54
55 TEST_F(EffectControlLinearizerTest, SimpleLoad) { 55 TEST_F(EffectControlLinearizerTest, SimpleLoad) {
56 Schedule schedule(zone()); 56 Schedule schedule(zone());
57 57
58 // Create the graph. 58 // Create the graph.
59 Node* heap_number = NumberConstant(0.5); 59 Node* heap_number = NumberConstant(0.5);
60 Node* load = graph()->NewNode( 60 Node* load = graph()->NewNode(
61 simplified()->LoadField(AccessBuilder::ForHeapNumberValue()), heap_number, 61 simplified()->LoadField(AccessBuilder::ForHeapNumberValue()), heap_number,
62 graph()->start(), graph()->start()); 62 graph()->start(), graph()->start());
63 Node* ret = graph()->NewNode(common()->Return(), load, graph()->start(), 63 Node* zero = graph()->NewNode(common()->Int32Constant(0));
64 Node* ret = graph()->NewNode(common()->Return(), zero, load, graph()->start(),
64 graph()->start()); 65 graph()->start());
65 66
66 // Build the basic block structure. 67 // Build the basic block structure.
67 BasicBlock* start = schedule.start(); 68 BasicBlock* start = schedule.start();
68 schedule.rpo_order()->push_back(start); 69 schedule.rpo_order()->push_back(start);
69 start->set_rpo_number(0); 70 start->set_rpo_number(0);
70 71
71 // Populate the basic blocks with nodes. 72 // Populate the basic blocks with nodes.
72 schedule.AddNode(start, graph()->start()); 73 schedule.AddNode(start, graph()->start());
73 schedule.AddNode(start, heap_number); 74 schedule.AddNode(start, heap_number);
(...skipping 24 matching lines...) Expand all
98 simplified()->LoadField(AccessBuilder::ForHeapNumberValue()), heap_number, 99 simplified()->LoadField(AccessBuilder::ForHeapNumberValue()), heap_number,
99 graph()->start(), if_true); 100 graph()->start(), if_true);
100 101
101 Node* if_false = graph()->NewNode(common()->IfFalse(), branch); 102 Node* if_false = graph()->NewNode(common()->IfFalse(), branch);
102 Node* vfalse = Float64Constant(2); 103 Node* vfalse = Float64Constant(2);
103 104
104 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); 105 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false);
105 Node* phi = graph()->NewNode( 106 Node* phi = graph()->NewNode(
106 common()->Phi(MachineRepresentation::kFloat64, 2), vtrue, vfalse, merge); 107 common()->Phi(MachineRepresentation::kFloat64, 2), vtrue, vfalse, merge);
107 108
109 Node* zero = graph()->NewNode(common()->Int32Constant(0));
108 Node* ret = 110 Node* ret =
109 graph()->NewNode(common()->Return(), phi, graph()->start(), merge); 111 graph()->NewNode(common()->Return(), zero, phi, graph()->start(), merge);
110 112
111 // Build the basic block structure. 113 // Build the basic block structure.
112 BasicBlock* start = schedule.start(); 114 BasicBlock* start = schedule.start();
113 schedule.rpo_order()->push_back(start); 115 schedule.rpo_order()->push_back(start);
114 start->set_rpo_number(0); 116 start->set_rpo_number(0);
115 117
116 BasicBlock* tblock = AddBlockToSchedule(&schedule); 118 BasicBlock* tblock = AddBlockToSchedule(&schedule);
117 BasicBlock* fblock = AddBlockToSchedule(&schedule); 119 BasicBlock* fblock = AddBlockToSchedule(&schedule);
118 BasicBlock* mblock = AddBlockToSchedule(&schedule); 120 BasicBlock* mblock = AddBlockToSchedule(&schedule);
119 121
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 Node* if_false1 = graph()->NewNode(common()->IfFalse(), branch1); 201 Node* if_false1 = graph()->NewNode(common()->IfFalse(), branch1);
200 Node* merge1 = graph()->NewNode(common()->Merge(2), if_true1, if_false1); 202 Node* merge1 = graph()->NewNode(common()->Merge(2), if_true1, if_false1);
201 203
202 // Second floating diamond. 204 // Second floating diamond.
203 Node* branch2 = 205 Node* branch2 =
204 graph()->NewNode(common()->Branch(), const0, graph()->start()); 206 graph()->NewNode(common()->Branch(), const0, graph()->start());
205 Node* if_true2 = graph()->NewNode(common()->IfTrue(), branch2); 207 Node* if_true2 = graph()->NewNode(common()->IfTrue(), branch2);
206 Node* if_false2 = graph()->NewNode(common()->IfFalse(), branch2); 208 Node* if_false2 = graph()->NewNode(common()->IfFalse(), branch2);
207 Node* merge2 = graph()->NewNode(common()->Merge(2), if_true2, if_false2); 209 Node* merge2 = graph()->NewNode(common()->Merge(2), if_true2, if_false2);
208 210
209 Node* ret = 211 Node* zero = graph()->NewNode(common()->Int32Constant(0));
210 graph()->NewNode(common()->Return(), call, graph()->start(), if_success); 212 Node* ret = graph()->NewNode(common()->Return(), zero, call, graph()->start(),
213 if_success);
211 214
212 // Build the basic block structure. 215 // Build the basic block structure.
213 BasicBlock* start = schedule.start(); 216 BasicBlock* start = schedule.start();
214 schedule.rpo_order()->push_back(start); 217 schedule.rpo_order()->push_back(start);
215 start->set_rpo_number(0); 218 start->set_rpo_number(0);
216 219
217 BasicBlock* t1block = AddBlockToSchedule(&schedule); 220 BasicBlock* t1block = AddBlockToSchedule(&schedule);
218 BasicBlock* f1block = AddBlockToSchedule(&schedule); 221 BasicBlock* f1block = AddBlockToSchedule(&schedule);
219 BasicBlock* m1block = AddBlockToSchedule(&schedule); 222 BasicBlock* m1block = AddBlockToSchedule(&schedule);
220 223
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 NodeProperties::ChangeOp(loop, common()->Loop(2)); 285 NodeProperties::ChangeOp(loop, common()->Loop(2));
283 286
284 effect_phi->InsertInput(zone(), 1, effect_phi); 287 effect_phi->InsertInput(zone(), 1, effect_phi);
285 NodeProperties::ChangeOp(effect_phi, common()->EffectPhi(2)); 288 NodeProperties::ChangeOp(effect_phi, common()->EffectPhi(2));
286 289
287 Node* heap_number = NumberConstant(0.5); 290 Node* heap_number = NumberConstant(0.5);
288 Node* load = graph()->NewNode( 291 Node* load = graph()->NewNode(
289 simplified()->LoadField(AccessBuilder::ForHeapNumberValue()), heap_number, 292 simplified()->LoadField(AccessBuilder::ForHeapNumberValue()), heap_number,
290 graph()->start(), loop); 293 graph()->start(), loop);
291 294
292 Node* ret = graph()->NewNode(common()->Return(), load, effect_phi, if_true); 295 Node* zero = graph()->NewNode(common()->Int32Constant(0));
296 Node* ret =
297 graph()->NewNode(common()->Return(), zero, load, effect_phi, if_true);
293 298
294 // Build the basic block structure. 299 // Build the basic block structure.
295 BasicBlock* start = schedule.start(); 300 BasicBlock* start = schedule.start();
296 schedule.rpo_order()->push_back(start); 301 schedule.rpo_order()->push_back(start);
297 start->set_rpo_number(0); 302 start->set_rpo_number(0);
298 303
299 BasicBlock* lblock = AddBlockToSchedule(&schedule); 304 BasicBlock* lblock = AddBlockToSchedule(&schedule);
300 BasicBlock* fblock = AddBlockToSchedule(&schedule); 305 BasicBlock* fblock = AddBlockToSchedule(&schedule);
301 BasicBlock* rblock = AddBlockToSchedule(&schedule); 306 BasicBlock* rblock = AddBlockToSchedule(&schedule);
302 307
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 IsIfTrue(CaptureEq(&branch2_capture))), 395 IsIfTrue(CaptureEq(&branch2_capture))),
391 IsMerge(IsIfFalse(AllOf(CaptureEq(&branch1_capture), 396 IsMerge(IsIfFalse(AllOf(CaptureEq(&branch1_capture),
392 IsBranch(cond1, control1))), 397 IsBranch(cond1, control1))),
393 IsIfFalse(AllOf(CaptureEq(&branch2_capture), 398 IsIfFalse(AllOf(CaptureEq(&branch2_capture),
394 IsBranch(cond2, control2))))))); 399 IsBranch(cond2, control2)))))));
395 } 400 }
396 401
397 } // namespace compiler 402 } // namespace compiler
398 } // namespace internal 403 } // namespace internal
399 } // namespace v8 404 } // namespace v8
OLDNEW
« no previous file with comments | « test/unittests/compiler/common-operator-unittest.cc ('k') | test/unittests/compiler/escape-analysis-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698