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

Unified Diff: src/compiler/simplified-lowering.cc

Issue 2820603002: Revert of Merged: Squashed multiple commits. (Closed)
Patch Set: Created 3 years, 8 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/operation-typer.cc ('k') | src/compiler/typed-optimization.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/simplified-lowering.cc
diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc
index 82c4ef18fe327058d874bd0b0ef00ed7a1a3c30d..4acc77f22f3668fcee5dc4e7d911a2b853709bba 100644
--- a/src/compiler/simplified-lowering.cc
+++ b/src/compiler/simplified-lowering.cc
@@ -458,18 +458,6 @@
new_type = op_typer_.ToNumber(FeedbackTypeOf(node->InputAt(0)));
break;
- case IrOpcode::kCheckFloat64Hole:
- new_type = Type::Intersect(
- op_typer_.CheckFloat64Hole(FeedbackTypeOf(node->InputAt(0))),
- info->restriction_type(), graph_zone());
- break;
-
- case IrOpcode::kCheckNumber:
- new_type = Type::Intersect(
- op_typer_.CheckNumber(FeedbackTypeOf(node->InputAt(0))),
- info->restriction_type(), graph_zone());
- break;
-
case IrOpcode::kPhi: {
new_type = TypePhi(node);
if (type != nullptr) {
@@ -819,15 +807,6 @@
}
ProcessRemainingInputs(node, value_count);
if (lower()) Kill(node);
- }
-
- // Helper for no-op node.
- void VisitNoop(Node* node, Truncation truncation) {
- if (truncation.IsUnused()) return VisitUnused(node);
- MachineRepresentation representation =
- GetOutputInfoForPhi(node, TypeOf(node), truncation);
- VisitUnop(node, UseInfo(representation, truncation), representation);
- if (lower()) DeferReplacement(node, node->InputAt(0));
}
// Helper for binops of the R x L -> O variety.
@@ -2336,9 +2315,19 @@
return;
}
case IrOpcode::kCheckNumber: {
- Type* const input_type = TypeOf(node->InputAt(0));
- if (input_type->Is(Type::Number())) {
- VisitNoop(node, truncation);
+ if (InputIs(node, Type::Number())) {
+ if (truncation.IsUsedAsWord32()) {
+ VisitUnop(node, UseInfo::TruncatingWord32(),
+ MachineRepresentation::kWord32);
+ } else {
+ // TODO(jarin,bmeurer): We need to go to Tagged here, because
+ // otherwise we cannot distinguish the hole NaN (which might need to
+ // be treated as undefined). We should have a dedicated Type for
+ // that at some point, and maybe even a dedicated truncation.
+ VisitUnop(node, UseInfo::AnyTagged(),
+ MachineRepresentation::kTagged);
+ }
+ if (lower()) DeferReplacement(node, node->InputAt(0));
} else {
VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
}
@@ -2592,32 +2581,13 @@
return;
}
case IrOpcode::kCheckFloat64Hole: {
- Type* const input_type = TypeOf(node->InputAt(0));
- if (input_type->Is(Type::Number())) {
- VisitNoop(node, truncation);
- } else {
- CheckFloat64HoleMode mode = CheckFloat64HoleModeOf(node->op());
- switch (mode) {
- case CheckFloat64HoleMode::kAllowReturnHole:
- if (truncation.IsUnused()) return VisitUnused(node);
- if (truncation.IsUsedAsFloat64()) {
- VisitUnop(node, UseInfo::TruncatingFloat64(),
- MachineRepresentation::kFloat64);
- if (lower()) DeferReplacement(node, node->InputAt(0));
- } else {
- VisitUnop(
- node,
- UseInfo(MachineRepresentation::kFloat64, Truncation::Any()),
- MachineRepresentation::kFloat64, Type::Number());
- }
- break;
- case CheckFloat64HoleMode::kNeverReturnHole:
- VisitUnop(
- node,
- UseInfo(MachineRepresentation::kFloat64, Truncation::Any()),
- MachineRepresentation::kFloat64, Type::Number());
- break;
- }
+ CheckFloat64HoleMode mode = CheckFloat64HoleModeOf(node->op());
+ ProcessInput(node, 0, UseInfo::TruncatingFloat64());
+ ProcessRemainingInputs(node, 1);
+ SetOutput(node, MachineRepresentation::kFloat64);
+ if (truncation.IsUsedAsFloat64() &&
+ mode == CheckFloat64HoleMode::kAllowReturnHole) {
+ if (lower()) DeferReplacement(node, node->InputAt(0));
}
return;
}
« no previous file with comments | « src/compiler/operation-typer.cc ('k') | src/compiler/typed-optimization.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698