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

Side by Side Diff: src/compiler/bytecode-graph-builder.cc

Issue 1654833002: [interpreter] Fix re-throw to not have frame-state. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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
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/bytecode-graph-builder.h" 5 #include "src/compiler/bytecode-graph-builder.h"
6 6
7 #include "src/compiler/bytecode-branch-analysis.h" 7 #include "src/compiler/bytecode-branch-analysis.h"
8 #include "src/compiler/linkage.h" 8 #include "src/compiler/linkage.h"
9 #include "src/compiler/operator-properties.h" 9 #include "src/compiler/operator-properties.h"
10 #include "src/interpreter/bytecodes.h" 10 #include "src/interpreter/bytecodes.h"
(...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after
1231 const Operator* call = javascript()->CallConstruct( 1231 const Operator* call = javascript()->CallConstruct(
1232 static_cast<int>(arg_count) + 2, VectorSlotPair()); 1232 static_cast<int>(arg_count) + 2, VectorSlotPair());
1233 Node* value = ProcessCallNewArguments(call, callee, first_arg, arg_count + 2); 1233 Node* value = ProcessCallNewArguments(call, callee, first_arg, arg_count + 2);
1234 environment()->BindAccumulator(value, &states); 1234 environment()->BindAccumulator(value, &states);
1235 } 1235 }
1236 1236
1237 void BytecodeGraphBuilder::VisitNew() { BuildCallConstruct(); } 1237 void BytecodeGraphBuilder::VisitNew() { BuildCallConstruct(); }
1238 1238
1239 void BytecodeGraphBuilder::VisitNewWide() { BuildCallConstruct(); } 1239 void BytecodeGraphBuilder::VisitNewWide() { BuildCallConstruct(); }
1240 1240
1241 void BytecodeGraphBuilder::BuildThrowOp(const Operator* call_op) { 1241 void BytecodeGraphBuilder::BuildThrow() {
1242 FrameStateBeforeAndAfter states(this); 1242 FrameStateBeforeAndAfter states(this);
1243 Node* value = environment()->LookupAccumulator(); 1243 Node* value = environment()->LookupAccumulator();
1244 Node* call = NewNode(call_op, value); 1244 Node* call = NewNode(javascript()->CallRuntime(Runtime::kThrow), value);
1245 environment()->RecordAfterState(call, &states); 1245 environment()->BindAccumulator(call, &states);
1246 } 1246 }
1247 1247
1248 void BytecodeGraphBuilder::VisitThrow() { 1248 void BytecodeGraphBuilder::VisitThrow() {
1249 BuildThrowOp(javascript()->CallRuntime(Runtime::kThrow)); 1249 BuildThrow();
1250 Node* control = 1250 Node* call = environment()->LookupAccumulator();
1251 NewNode(common()->Throw(), environment()->LookupAccumulator()); 1251 Node* control = NewNode(common()->Throw(), call);
1252 MergeControlToLeaveFunction(control); 1252 MergeControlToLeaveFunction(control);
1253 } 1253 }
1254 1254
1255 void BytecodeGraphBuilder::VisitReThrow() { 1255 void BytecodeGraphBuilder::VisitReThrow() {
1256 BuildThrowOp(javascript()->CallRuntime(Runtime::kReThrow)); 1256 Node* value = environment()->LookupAccumulator();
1257 Node* control = 1257 Node* call = NewNode(javascript()->CallRuntime(Runtime::kReThrow), value);
1258 NewNode(common()->Throw(), environment()->LookupAccumulator()); 1258 Node* control = NewNode(common()->Throw(), call);
1259 MergeControlToLeaveFunction(control); 1259 MergeControlToLeaveFunction(control);
1260 } 1260 }
1261 1261
1262 void BytecodeGraphBuilder::BuildBinaryOp(const Operator* js_op) { 1262 void BytecodeGraphBuilder::BuildBinaryOp(const Operator* js_op) {
1263 FrameStateBeforeAndAfter states(this); 1263 FrameStateBeforeAndAfter states(this);
1264 Node* left = 1264 Node* left =
1265 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 1265 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
1266 Node* right = environment()->LookupAccumulator(); 1266 Node* right = environment()->LookupAccumulator();
1267 Node* node = NewNode(js_op, left, right); 1267 Node* node = NewNode(js_op, left, right);
1268 environment()->BindAccumulator(node, &states); 1268 environment()->BindAccumulator(node, &states);
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
1841 // Phi does not exist yet, introduce one. 1841 // Phi does not exist yet, introduce one.
1842 value = NewPhi(inputs, value, control); 1842 value = NewPhi(inputs, value, control);
1843 value->ReplaceInput(inputs - 1, other); 1843 value->ReplaceInput(inputs - 1, other);
1844 } 1844 }
1845 return value; 1845 return value;
1846 } 1846 }
1847 1847
1848 } // namespace compiler 1848 } // namespace compiler
1849 } // namespace internal 1849 } // namespace internal
1850 } // namespace v8 1850 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/bytecode-graph-builder.h ('k') | test/cctest/compiler/test-run-bytecode-graph-builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698