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

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

Issue 1494973002: [turbofan] Introduce ToBooleanHints on ToBoolean operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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/ast-graph-builder.h ('k') | src/compiler/bytecode-graph-builder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/ast-graph-builder.cc
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc
index 4dc3acdfa1339c1252bd73a1ecc080e5784ae1bd..3e3e7605045b64512da20296481b3e4c98dda80f 100644
--- a/src/compiler/ast-graph-builder.cc
+++ b/src/compiler/ast-graph-builder.cc
@@ -94,11 +94,14 @@ class AstGraphBuilder::AstValueContext final : public AstContext {
// Context to evaluate expression for a condition value (and side effects).
class AstGraphBuilder::AstTestContext final : public AstContext {
public:
- explicit AstTestContext(AstGraphBuilder* owner)
- : AstContext(owner, Expression::kTest) {}
+ AstTestContext(AstGraphBuilder* owner, TypeFeedbackId feedback_id)
+ : AstContext(owner, Expression::kTest), feedback_id_(feedback_id) {}
~AstTestContext() final;
void ProduceValue(Node* value) final;
Node* ConsumeValue() final;
+
+ private:
+ TypeFeedbackId const feedback_id_;
};
@@ -927,7 +930,7 @@ void AstGraphBuilder::AstValueContext::ProduceValue(Node* value) {
void AstGraphBuilder::AstTestContext::ProduceValue(Node* value) {
- environment()->Push(owner()->BuildToBoolean(value));
+ environment()->Push(owner()->BuildToBoolean(value, feedback_id_));
}
@@ -1034,7 +1037,7 @@ void AstGraphBuilder::VisitForEffect(Expression* expr) {
void AstGraphBuilder::VisitForTest(Expression* expr) {
- AstTestContext for_condition(this);
+ AstTestContext for_condition(this, expr->test_id());
if (!CheckStackOverflow()) {
expr->Accept(this);
} else {
@@ -3011,7 +3014,7 @@ void AstGraphBuilder::VisitTypeof(UnaryOperation* expr) {
void AstGraphBuilder::VisitNot(UnaryOperation* expr) {
VisitForValue(expr->expression());
Node* operand = environment()->Pop();
- Node* input = BuildToBoolean(operand);
+ Node* input = BuildToBoolean(operand, expr->expression()->test_id());
Node* value = NewNode(common()->Select(kMachAnyTagged), input,
jsgraph()->FalseConstant(), jsgraph()->TrueConstant());
ast_context()->ProduceValue(value);
@@ -3030,7 +3033,7 @@ void AstGraphBuilder::VisitLogicalExpression(BinaryOperation* expr) {
IfBuilder compare_if(this);
VisitForValue(expr->left());
Node* condition = environment()->Top();
- compare_if.If(BuildToBoolean(condition));
+ compare_if.If(BuildToBoolean(condition, expr->left()->test_id()));
compare_if.Then();
if (is_logical_and) {
environment()->Pop();
@@ -3682,9 +3685,14 @@ Node* AstGraphBuilder::BuildLoadFeedbackVector() {
}
-Node* AstGraphBuilder::BuildToBoolean(Node* input) {
+Node* AstGraphBuilder::BuildToBoolean(Node* input, TypeFeedbackId feedback_id) {
if (Node* node = TryFastToBoolean(input)) return node;
- return NewNode(javascript()->ToBoolean(), input);
+ ToBooleanHints hints;
+ if (!type_hint_analysis_ ||
+ !type_hint_analysis_->GetToBooleanHints(feedback_id, &hints)) {
+ hints = ToBooleanHint::kAny;
+ }
+ return NewNode(javascript()->ToBoolean(hints), input);
}
« no previous file with comments | « src/compiler/ast-graph-builder.h ('k') | src/compiler/bytecode-graph-builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698