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

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

Issue 568783002: Remove deoptimization by patching the call stack. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebase 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 "src/v8.h" 5 #include "src/v8.h"
6 #include "test/cctest/cctest.h" 6 #include "test/cctest/cctest.h"
7 7
8 #include "src/compiler/graph-inl.h" 8 #include "src/compiler/graph-inl.h"
9 #include "src/compiler/js-typed-lowering.h" 9 #include "src/compiler/js-typed-lowering.h"
10 #include "src/compiler/node-properties-inl.h" 10 #include "src/compiler/node-properties-inl.h"
(...skipping 30 matching lines...) Expand all
41 Graph graph; 41 Graph graph;
42 Typer typer; 42 Typer typer;
43 Node* context_node; 43 Node* context_node;
44 44
45 Node* Parameter(Type* t, int32_t index = 0) { 45 Node* Parameter(Type* t, int32_t index = 0) {
46 Node* n = graph.NewNode(common.Parameter(index), graph.start()); 46 Node* n = graph.NewNode(common.Parameter(index), graph.start());
47 NodeProperties::SetBounds(n, Bounds(Type::None(), t)); 47 NodeProperties::SetBounds(n, Bounds(Type::None(), t));
48 return n; 48 return n;
49 } 49 }
50 50
51 Node* UndefinedConstant() {
52 Unique<Object> unique =
53 Unique<Object>::CreateImmovable(isolate->factory()->undefined_value());
54 return graph.NewNode(common.HeapConstant(unique));
55 }
56
57 Node* EmptyFrameState(Node* context) {
58 Node* parameters = graph.NewNode(common.StateValues(0));
59 Node* locals = graph.NewNode(common.StateValues(0));
60 Node* stack = graph.NewNode(common.StateValues(0));
61
62 Node* state_node =
63 graph.NewNode(common.FrameState(BailoutId(0), kIgnoreOutput),
64 parameters, locals, stack, context, UndefinedConstant());
65
66 return state_node;
67 }
68
51 Node* reduce(Node* node) { 69 Node* reduce(Node* node) {
52 JSGraph jsgraph(&graph, &common, &javascript, &typer, &machine); 70 JSGraph jsgraph(&graph, &common, &javascript, &typer, &machine);
53 JSTypedLowering reducer(&jsgraph); 71 JSTypedLowering reducer(&jsgraph);
54 Reduction reduction = reducer.Reduce(node); 72 Reduction reduction = reducer.Reduce(node);
55 if (reduction.Changed()) return reduction.replacement(); 73 if (reduction.Changed()) return reduction.replacement();
56 return node; 74 return node;
57 } 75 }
58 76
59 Node* start() { return graph.start(); } 77 Node* start() { return graph.start(); }
60 78
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 // The original node was turned into a ToBoolean. 786 // The original node was turned into a ToBoolean.
769 CHECK_EQ(IrOpcode::kJSToBoolean, r->opcode()); 787 CHECK_EQ(IrOpcode::kJSToBoolean, r->opcode());
770 } else { 788 } else {
771 CHECK_EQ(IrOpcode::kBooleanNot, r->opcode()); 789 CHECK_EQ(IrOpcode::kBooleanNot, r->opcode());
772 } 790 }
773 } 791 }
774 } 792 }
775 793
776 794
777 TEST(RemoveToNumberEffects) { 795 TEST(RemoveToNumberEffects) {
796 FLAG_turbo_deoptimization = true;
797
778 JSTypedLoweringTester R; 798 JSTypedLoweringTester R;
779 799
780 Node* effect_use = NULL; 800 Node* effect_use = NULL;
781 for (int i = 0; i < 10; i++) { 801 for (int i = 0; i < 10; i++) {
782 Node* p0 = R.Parameter(Type::Number()); 802 Node* p0 = R.Parameter(Type::Number());
783 Node* ton = R.Unop(R.javascript.ToNumber(), p0); 803 Node* ton = R.Unop(R.javascript.ToNumber(), p0);
804 Node* frame_state = R.EmptyFrameState(R.context());
784 effect_use = NULL; 805 effect_use = NULL;
785 806
786 switch (i) { 807 switch (i) {
787 case 0: 808 case 0:
788 effect_use = R.graph.NewNode(R.javascript.ToNumber(), p0, R.context(), 809 effect_use = R.graph.NewNode(R.javascript.ToNumber(), p0, R.context(),
789 ton, R.start()); 810 ton, R.start());
790 break; 811 break;
791 case 1: 812 case 1:
792 effect_use = R.graph.NewNode(R.javascript.ToNumber(), ton, R.context(), 813 effect_use = R.graph.NewNode(R.javascript.ToNumber(), ton, R.context(),
793 ton, R.start()); 814 ton, R.start());
794 break; 815 break;
795 case 2: 816 case 2:
796 effect_use = R.graph.NewNode(R.common.EffectPhi(1), ton, R.start()); 817 effect_use = R.graph.NewNode(R.common.EffectPhi(1), ton, R.start());
797 case 3: 818 case 3:
798 effect_use = R.graph.NewNode(R.javascript.Add(), ton, ton, R.context(), 819 effect_use = R.graph.NewNode(R.javascript.Add(), ton, ton, R.context(),
799 ton, R.start()); 820 frame_state, ton, R.start());
800 break; 821 break;
801 case 4: 822 case 4:
802 effect_use = R.graph.NewNode(R.javascript.Add(), p0, p0, R.context(), 823 effect_use = R.graph.NewNode(R.javascript.Add(), p0, p0, R.context(),
803 ton, R.start()); 824 frame_state, ton, R.start());
804 break; 825 break;
805 case 5: 826 case 5:
806 effect_use = R.graph.NewNode(R.common.Return(), p0, ton, R.start()); 827 effect_use = R.graph.NewNode(R.common.Return(), p0, ton, R.start());
807 break; 828 break;
808 case 6: 829 case 6:
809 effect_use = R.graph.NewNode(R.common.Return(), ton, ton, R.start()); 830 effect_use = R.graph.NewNode(R.common.Return(), ton, ton, R.start());
810 } 831 }
811 832
812 R.CheckEffectInput(R.start(), ton); 833 R.CheckEffectInput(R.start(), ton);
813 if (effect_use != NULL) R.CheckEffectInput(ton, effect_use); 834 if (effect_use != NULL) R.CheckEffectInput(ton, effect_use);
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
1343 CHECK_EQ(p1, r->InputAt(0)); 1364 CHECK_EQ(p1, r->InputAt(0));
1344 CHECK_EQ(p0, r->InputAt(1)); 1365 CHECK_EQ(p0, r->InputAt(1));
1345 } else { 1366 } else {
1346 CHECK_EQ(p0, r->InputAt(0)); 1367 CHECK_EQ(p0, r->InputAt(0));
1347 CHECK_EQ(p1, r->InputAt(1)); 1368 CHECK_EQ(p1, r->InputAt(1));
1348 } 1369 }
1349 } 1370 }
1350 } 1371 }
1351 } 1372 }
1352 } 1373 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698