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

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

Issue 2035383003: [turbofan] Type feedback for numeric comparisons. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fixes Created 4 years, 6 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 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after
1217 void BytecodeGraphBuilder::BuildCompareOp(const Operator* js_op) { 1217 void BytecodeGraphBuilder::BuildCompareOp(const Operator* js_op) {
1218 FrameStateBeforeAndAfter states(this); 1218 FrameStateBeforeAndAfter states(this);
1219 Node* left = 1219 Node* left =
1220 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 1220 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
1221 Node* right = environment()->LookupAccumulator(); 1221 Node* right = environment()->LookupAccumulator();
1222 Node* node = NewNode(js_op, left, right); 1222 Node* node = NewNode(js_op, left, right);
1223 environment()->BindAccumulator(node, &states); 1223 environment()->BindAccumulator(node, &states);
1224 } 1224 }
1225 1225
1226 void BytecodeGraphBuilder::VisitTestEqual() { 1226 void BytecodeGraphBuilder::VisitTestEqual() {
1227 BuildCompareOp(javascript()->Equal()); 1227 CompareOperationHints hints = CompareOperationHints::Any();
1228 BuildCompareOp(javascript()->Equal(hints));
1228 } 1229 }
1229 1230
1230 void BytecodeGraphBuilder::VisitTestNotEqual() { 1231 void BytecodeGraphBuilder::VisitTestNotEqual() {
1231 BuildCompareOp(javascript()->NotEqual()); 1232 CompareOperationHints hints = CompareOperationHints::Any();
1233 BuildCompareOp(javascript()->NotEqual(hints));
1232 } 1234 }
1233 1235
1234 void BytecodeGraphBuilder::VisitTestEqualStrict() { 1236 void BytecodeGraphBuilder::VisitTestEqualStrict() {
1235 BuildCompareOp(javascript()->StrictEqual()); 1237 CompareOperationHints hints = CompareOperationHints::Any();
1238 BuildCompareOp(javascript()->StrictEqual(hints));
1236 } 1239 }
1237 1240
1238 void BytecodeGraphBuilder::VisitTestLessThan() { 1241 void BytecodeGraphBuilder::VisitTestLessThan() {
1239 BuildCompareOp(javascript()->LessThan()); 1242 CompareOperationHints hints = CompareOperationHints::Any();
1243 BuildCompareOp(javascript()->LessThan(hints));
1240 } 1244 }
1241 1245
1242 void BytecodeGraphBuilder::VisitTestGreaterThan() { 1246 void BytecodeGraphBuilder::VisitTestGreaterThan() {
1243 BuildCompareOp(javascript()->GreaterThan()); 1247 CompareOperationHints hints = CompareOperationHints::Any();
1248 BuildCompareOp(javascript()->GreaterThan(hints));
1244 } 1249 }
1245 1250
1246 void BytecodeGraphBuilder::VisitTestLessThanOrEqual() { 1251 void BytecodeGraphBuilder::VisitTestLessThanOrEqual() {
1247 BuildCompareOp(javascript()->LessThanOrEqual()); 1252 CompareOperationHints hints = CompareOperationHints::Any();
1253 BuildCompareOp(javascript()->LessThanOrEqual(hints));
1248 } 1254 }
1249 1255
1250 void BytecodeGraphBuilder::VisitTestGreaterThanOrEqual() { 1256 void BytecodeGraphBuilder::VisitTestGreaterThanOrEqual() {
1251 BuildCompareOp(javascript()->GreaterThanOrEqual()); 1257 CompareOperationHints hints = CompareOperationHints::Any();
1258 BuildCompareOp(javascript()->GreaterThanOrEqual(hints));
1252 } 1259 }
1253 1260
1254 void BytecodeGraphBuilder::VisitTestIn() { 1261 void BytecodeGraphBuilder::VisitTestIn() {
1255 BuildCompareOp(javascript()->HasProperty()); 1262 CompareOperationHints hints = CompareOperationHints::Any();
1263 BuildCompareOp(javascript()->HasProperty(hints));
1256 } 1264 }
1257 1265
1258 void BytecodeGraphBuilder::VisitTestInstanceOf() { 1266 void BytecodeGraphBuilder::VisitTestInstanceOf() {
1259 BuildCompareOp(javascript()->InstanceOf()); 1267 CompareOperationHints hints = CompareOperationHints::Any();
1268 BuildCompareOp(javascript()->InstanceOf(hints));
1260 } 1269 }
1261 1270
1262 void BytecodeGraphBuilder::BuildCastOperator(const Operator* js_op) { 1271 void BytecodeGraphBuilder::BuildCastOperator(const Operator* js_op) {
1263 FrameStateBeforeAndAfter states(this); 1272 FrameStateBeforeAndAfter states(this);
1264 Node* node = NewNode(js_op, environment()->LookupAccumulator()); 1273 Node* node = NewNode(js_op, environment()->LookupAccumulator());
1265 environment()->BindAccumulator(node, &states); 1274 environment()->BindAccumulator(node, &states);
1266 } 1275 }
1267 1276
1268 void BytecodeGraphBuilder::VisitToName() { 1277 void BytecodeGraphBuilder::VisitToName() {
1269 BuildCastOperator(javascript()->ToName()); 1278 BuildCastOperator(javascript()->ToName());
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1511 NewIfTrue(); 1520 NewIfTrue();
1512 MergeIntoSuccessorEnvironment(bytecode_iterator().GetJumpTargetOffset()); 1521 MergeIntoSuccessorEnvironment(bytecode_iterator().GetJumpTargetOffset());
1513 set_environment(if_false_environment); 1522 set_environment(if_false_environment);
1514 NewIfFalse(); 1523 NewIfFalse();
1515 } 1524 }
1516 1525
1517 1526
1518 void BytecodeGraphBuilder::BuildJumpIfEqual(Node* comperand) { 1527 void BytecodeGraphBuilder::BuildJumpIfEqual(Node* comperand) {
1519 Node* accumulator = environment()->LookupAccumulator(); 1528 Node* accumulator = environment()->LookupAccumulator();
1520 Node* condition = 1529 Node* condition =
1521 NewNode(javascript()->StrictEqual(), accumulator, comperand); 1530 NewNode(javascript()->StrictEqual(CompareOperationHints::Any()),
1531 accumulator, comperand);
1522 BuildConditionalJump(condition); 1532 BuildConditionalJump(condition);
1523 } 1533 }
1524 1534
1525 1535
1526 void BytecodeGraphBuilder::BuildJumpIfToBooleanEqual(Node* comperand) { 1536 void BytecodeGraphBuilder::BuildJumpIfToBooleanEqual(Node* comperand) {
1527 Node* accumulator = environment()->LookupAccumulator(); 1537 Node* accumulator = environment()->LookupAccumulator();
1528 Node* to_boolean = 1538 Node* to_boolean =
1529 NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator); 1539 NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator);
1530 Node* condition = NewNode(javascript()->StrictEqual(), to_boolean, comperand); 1540 Node* condition =
1541 NewNode(javascript()->StrictEqual(CompareOperationHints::Any()),
1542 to_boolean, comperand);
1531 BuildConditionalJump(condition); 1543 BuildConditionalJump(condition);
1532 } 1544 }
1533 1545
1534 void BytecodeGraphBuilder::BuildJumpIfNotHole() { 1546 void BytecodeGraphBuilder::BuildJumpIfNotHole() {
1535 Node* accumulator = environment()->LookupAccumulator(); 1547 Node* accumulator = environment()->LookupAccumulator();
1536 Node* condition = NewNode(javascript()->StrictEqual(), accumulator, 1548 Node* condition =
1537 jsgraph()->TheHoleConstant()); 1549 NewNode(javascript()->StrictEqual(CompareOperationHints::Any()),
1550 accumulator, jsgraph()->TheHoleConstant());
1538 Node* node = 1551 Node* node =
1539 NewNode(common()->Select(MachineRepresentation::kTagged), condition, 1552 NewNode(common()->Select(MachineRepresentation::kTagged), condition,
1540 jsgraph()->FalseConstant(), jsgraph()->TrueConstant()); 1553 jsgraph()->FalseConstant(), jsgraph()->TrueConstant());
1541 BuildConditionalJump(node); 1554 BuildConditionalJump(node);
1542 } 1555 }
1543 1556
1544 Node** BytecodeGraphBuilder::EnsureInputBufferSize(int size) { 1557 Node** BytecodeGraphBuilder::EnsureInputBufferSize(int size) {
1545 if (size > input_buffer_size_) { 1558 if (size > input_buffer_size_) {
1546 size = size + kInputBufferSizeIncrement + input_buffer_size_; 1559 size = size + kInputBufferSizeIncrement + input_buffer_size_;
1547 input_buffer_ = local_zone()->NewArray<Node*>(size); 1560 input_buffer_ = local_zone()->NewArray<Node*>(size);
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1729 // Phi does not exist yet, introduce one. 1742 // Phi does not exist yet, introduce one.
1730 value = NewPhi(inputs, value, control); 1743 value = NewPhi(inputs, value, control);
1731 value->ReplaceInput(inputs - 1, other); 1744 value->ReplaceInput(inputs - 1, other);
1732 } 1745 }
1733 return value; 1746 return value;
1734 } 1747 }
1735 1748
1736 } // namespace compiler 1749 } // namespace compiler
1737 } // namespace internal 1750 } // namespace internal
1738 } // namespace v8 1751 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698