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

Unified Diff: src/compiler/bytecode-graph-builder.cc

Issue 2309733002: [turbofan] Improve graph for JumpIfTrue/False and JumpIfToBooleanTrue/False. (Closed)
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/bytecode-graph-builder.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/bytecode-graph-builder.cc
diff --git a/src/compiler/bytecode-graph-builder.cc b/src/compiler/bytecode-graph-builder.cc
index e0b1e7a0bd94d1ec3af39fca696478ee321147b6..d51b52b072249226185044e6347fe4fe86dd86c7 100644
--- a/src/compiler/bytecode-graph-builder.cc
+++ b/src/compiler/bytecode-graph-builder.cc
@@ -1462,37 +1462,28 @@ void BytecodeGraphBuilder::VisitJump() { BuildJump(); }
void BytecodeGraphBuilder::VisitJumpConstant() { BuildJump(); }
+void BytecodeGraphBuilder::VisitJumpIfTrue() { BuildJumpIfTrue(); }
-void BytecodeGraphBuilder::VisitJumpIfTrue() {
- BuildJumpIfEqual(jsgraph()->TrueConstant());
-}
+void BytecodeGraphBuilder::VisitJumpIfTrueConstant() { BuildJumpIfTrue(); }
-void BytecodeGraphBuilder::VisitJumpIfTrueConstant() {
- BuildJumpIfEqual(jsgraph()->TrueConstant());
-}
+void BytecodeGraphBuilder::VisitJumpIfFalse() { BuildJumpIfFalse(); }
-void BytecodeGraphBuilder::VisitJumpIfFalse() {
- BuildJumpIfEqual(jsgraph()->FalseConstant());
-}
-
-void BytecodeGraphBuilder::VisitJumpIfFalseConstant() {
- BuildJumpIfEqual(jsgraph()->FalseConstant());
-}
+void BytecodeGraphBuilder::VisitJumpIfFalseConstant() { BuildJumpIfFalse(); }
void BytecodeGraphBuilder::VisitJumpIfToBooleanTrue() {
- BuildJumpIfToBooleanEqual(jsgraph()->TrueConstant());
+ BuildJumpIfToBooleanTrue();
}
void BytecodeGraphBuilder::VisitJumpIfToBooleanTrueConstant() {
- BuildJumpIfToBooleanEqual(jsgraph()->TrueConstant());
+ BuildJumpIfToBooleanTrue();
}
void BytecodeGraphBuilder::VisitJumpIfToBooleanFalse() {
- BuildJumpIfToBooleanEqual(jsgraph()->FalseConstant());
+ BuildJumpIfToBooleanFalse();
}
void BytecodeGraphBuilder::VisitJumpIfToBooleanFalseConstant() {
- BuildJumpIfToBooleanEqual(jsgraph()->FalseConstant());
+ BuildJumpIfToBooleanFalse();
}
void BytecodeGraphBuilder::VisitJumpIfNotHole() { BuildJumpIfNotHole(); }
@@ -1728,8 +1719,7 @@ void BytecodeGraphBuilder::BuildJump() {
MergeIntoSuccessorEnvironment(bytecode_iterator().GetJumpTargetOffset());
}
-
-void BytecodeGraphBuilder::BuildConditionalJump(Node* condition) {
+void BytecodeGraphBuilder::BuildJumpIf(Node* condition) {
NewBranch(condition);
Environment* if_false_environment = environment()->CopyForConditional();
NewIfTrue();
@@ -1738,24 +1728,43 @@ void BytecodeGraphBuilder::BuildConditionalJump(Node* condition) {
NewIfFalse();
}
+void BytecodeGraphBuilder::BuildJumpIfNot(Node* condition) {
+ NewBranch(condition);
+ Environment* if_true_environment = environment()->CopyForConditional();
+ NewIfFalse();
+ MergeIntoSuccessorEnvironment(bytecode_iterator().GetJumpTargetOffset());
+ set_environment(if_true_environment);
+ NewIfTrue();
+}
void BytecodeGraphBuilder::BuildJumpIfEqual(Node* comperand) {
Node* accumulator = environment()->LookupAccumulator();
Node* condition =
NewNode(javascript()->StrictEqual(CompareOperationHint::kAny),
accumulator, comperand);
- BuildConditionalJump(condition);
+ BuildJumpIf(condition);
}
+void BytecodeGraphBuilder::BuildJumpIfFalse() {
+ BuildJumpIfNot(environment()->LookupAccumulator());
+}
-void BytecodeGraphBuilder::BuildJumpIfToBooleanEqual(Node* comperand) {
+void BytecodeGraphBuilder::BuildJumpIfTrue() {
+ BuildJumpIf(environment()->LookupAccumulator());
+}
+
+void BytecodeGraphBuilder::BuildJumpIfToBooleanTrue() {
Node* accumulator = environment()->LookupAccumulator();
- Node* to_boolean =
+ Node* condition =
NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator);
+ BuildJumpIf(condition);
+}
+
+void BytecodeGraphBuilder::BuildJumpIfToBooleanFalse() {
+ Node* accumulator = environment()->LookupAccumulator();
Node* condition =
- NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), to_boolean,
- comperand);
- BuildConditionalJump(condition);
+ NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator);
+ BuildJumpIfNot(condition);
}
void BytecodeGraphBuilder::BuildJumpIfNotHole() {
@@ -1763,10 +1772,7 @@ void BytecodeGraphBuilder::BuildJumpIfNotHole() {
Node* condition =
NewNode(javascript()->StrictEqual(CompareOperationHint::kAny),
accumulator, jsgraph()->TheHoleConstant());
- Node* node =
- NewNode(common()->Select(MachineRepresentation::kTagged), condition,
- jsgraph()->FalseConstant(), jsgraph()->TrueConstant());
- BuildConditionalJump(node);
+ BuildJumpIfNot(condition);
}
Node** BytecodeGraphBuilder::EnsureInputBufferSize(int size) {
« no previous file with comments | « src/compiler/bytecode-graph-builder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698