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

Unified Diff: src/compiler/typer.cc

Issue 1348073002: [turbofan] Get rid of type lower bounds. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 5 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/simplified-lowering.cc ('k') | src/compiler/verifier.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/typer.cc
diff --git a/src/compiler/typer.cc b/src/compiler/typer.cc
index e1b7108a38624d148c5e304df218064645ad6bea..4b576baa2b706b14339bacc083e1e00d5d05e9bf 100644
--- a/src/compiler/typer.cc
+++ b/src/compiler/typer.cc
@@ -87,13 +87,13 @@ class Typer::Visitor : public Reducer {
switch (node->opcode()) {
#define DECLARE_CASE(x) \
case IrOpcode::k##x: \
- return UpdateBounds(node, TypeBinaryOp(node, x##Typer));
+ return UpdateType(node, TypeBinaryOp(node, x##Typer));
JS_SIMPLE_BINOP_LIST(DECLARE_CASE)
#undef DECLARE_CASE
#define DECLARE_CASE(x) \
case IrOpcode::k##x: \
- return UpdateBounds(node, Type##x(node));
+ return UpdateType(node, Type##x(node));
DECLARE_CASE(Start)
DECLARE_CASE(IfException)
// VALUE_OP_LIST without JS_SIMPLE_BINOP_LIST:
@@ -130,7 +130,7 @@ class Typer::Visitor : public Reducer {
return NoChange();
}
- Bounds TypeNode(Node* node) {
+ Type* TypeNode(Node* node) {
switch (node->opcode()) {
#define DECLARE_CASE(x) \
case IrOpcode::k##x: return TypeBinaryOp(node, x##Typer);
@@ -172,7 +172,7 @@ class Typer::Visitor : public Reducer {
break;
}
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
Type* TypeConstant(Handle<Object> value);
@@ -181,23 +181,23 @@ class Typer::Visitor : public Reducer {
Typer* typer_;
ZoneSet<NodeId> weakened_nodes_;
-#define DECLARE_METHOD(x) inline Bounds Type##x(Node* node);
+#define DECLARE_METHOD(x) inline Type* Type##x(Node* node);
DECLARE_METHOD(Start)
DECLARE_METHOD(IfException)
VALUE_OP_LIST(DECLARE_METHOD)
#undef DECLARE_METHOD
- Bounds BoundsOrNone(Node* node) {
- return NodeProperties::IsTyped(node) ? NodeProperties::GetBounds(node)
- : Bounds(Type::None());
+ Type* TypeOrNone(Node* node) {
+ return NodeProperties::IsTyped(node) ? NodeProperties::GetType(node)
+ : Type::None();
}
- Bounds Operand(Node* node, int i) {
+ Type* Operand(Node* node, int i) {
Node* operand_node = NodeProperties::GetValueInput(node, i);
- return BoundsOrNone(operand_node);
+ return TypeOrNone(operand_node);
}
- Bounds WrapContextBoundsForInput(Node* node);
+ Type* WrapContextTypeForInput(Node* node);
Type* Weaken(Node* node, Type* current_type, Type* previous_type);
Zone* zone() { return typer_->zone(); }
@@ -212,8 +212,8 @@ class Typer::Visitor : public Reducer {
typedef Type* (*UnaryTyperFun)(Type*, Typer* t);
typedef Type* (*BinaryTyperFun)(Type*, Type*, Typer* t);
- Bounds TypeUnaryOp(Node* node, UnaryTyperFun);
- Bounds TypeBinaryOp(Node* node, BinaryTyperFun);
+ Type* TypeUnaryOp(Node* node, UnaryTyperFun);
+ Type* TypeBinaryOp(Node* node, BinaryTyperFun);
enum ComparisonOutcomeFlags {
kComparisonTrue = 1,
@@ -251,28 +251,26 @@ class Typer::Visitor : public Reducer {
static Type* JSLoadPropertyTyper(Type*, Type*, Typer*);
static Type* JSCallFunctionTyper(Type*, Typer*);
- Reduction UpdateBounds(Node* node, Bounds current) {
+ Reduction UpdateType(Node* node, Type* current) {
if (NodeProperties::IsTyped(node)) {
- // Widen the bounds of a previously typed node.
- Bounds previous = NodeProperties::GetBounds(node);
+ // Widen the type of a previously typed node.
+ Type* previous = NodeProperties::GetType(node);
if (node->opcode() == IrOpcode::kPhi) {
// Speed up termination in the presence of range types:
- current.upper = Weaken(node, current.upper, previous.upper);
- current.lower = Weaken(node, current.lower, previous.lower);
+ current = Weaken(node, current, previous);
}
- DCHECK(previous.lower->Is(current.lower));
- DCHECK(previous.upper->Is(current.upper));
+ DCHECK(previous->Is(current));
- NodeProperties::SetBounds(node, current);
- if (!(previous.Narrows(current) && current.Narrows(previous))) {
+ NodeProperties::SetType(node, current);
+ if (!(previous->Is(current) && current->Is(previous))) {
// If something changed, revisit all uses.
return Changed(node);
}
return NoChange();
} else {
- // No previous type, simply update the bounds.
- NodeProperties::SetBounds(node, current);
+ // No previous type, simply update the type.
+ NodeProperties::SetType(node, current);
return Changed(node);
}
}
@@ -298,12 +296,12 @@ void Typer::Decorator::Decorate(Node* node) {
bool is_typed = NodeProperties::IsTyped(node);
if (is_typed || NodeProperties::AllValueInputsAreTyped(node)) {
Visitor typing(typer_);
- Bounds bounds = typing.TypeNode(node);
+ Type* type = typing.TypeNode(node);
if (is_typed) {
- bounds =
- Bounds::Both(bounds, NodeProperties::GetBounds(node), typer_->zone());
+ type = Type::Intersect(type, NodeProperties::GetType(node),
+ typer_->zone());
}
- NodeProperties::SetBounds(node, bounds);
+ NodeProperties::SetType(node, type);
}
}
}
@@ -316,36 +314,17 @@ void Typer::Decorator::Decorate(Node* node) {
// as an argument.
-Bounds Typer::Visitor::TypeUnaryOp(Node* node, UnaryTyperFun f) {
- Bounds input = Operand(node, 0);
- Type* upper =
- input.upper->IsInhabited() ? f(input.upper, typer_) : Type::None();
- Type* lower = input.lower->IsInhabited()
- ? ((input.lower == input.upper || upper->IsConstant())
- ? upper // TODO(neis): Extend this to Range(x,x),
- // NaN, MinusZero, ...?
- : f(input.lower, typer_))
- : Type::None();
- // TODO(neis): Figure out what to do with lower bound.
- return Bounds(lower, upper);
+Type* Typer::Visitor::TypeUnaryOp(Node* node, UnaryTyperFun f) {
+ Type* input = Operand(node, 0);
+ return input->IsInhabited() ? f(input, typer_) : Type::None();
}
-Bounds Typer::Visitor::TypeBinaryOp(Node* node, BinaryTyperFun f) {
- Bounds left = Operand(node, 0);
- Bounds right = Operand(node, 1);
- Type* upper = left.upper->IsInhabited() && right.upper->IsInhabited()
- ? f(left.upper, right.upper, typer_)
- : Type::None();
- Type* lower =
- left.lower->IsInhabited() && right.lower->IsInhabited()
- ? (((left.lower == left.upper && right.lower == right.upper) ||
- upper->IsConstant())
- ? upper
- : f(left.lower, right.lower, typer_))
- : Type::None();
- // TODO(neis): Figure out what to do with lower bound.
- return Bounds(lower, upper);
+Type* Typer::Visitor::TypeBinaryOp(Node* node, BinaryTyperFun f) {
+ Type* left = Operand(node, 0);
+ Type* right = Operand(node, 1);
+ return left->IsInhabited() && right->IsInhabited() ? f(left, right, typer_)
+ : Type::None();
}
@@ -479,150 +458,136 @@ Type* Typer::Visitor::NumberToUint32(Type* type, Typer* t) {
// Control operators.
-Bounds Typer::Visitor::TypeStart(Node* node) {
- return Bounds(Type::None(zone()), Type::Internal(zone()));
-}
+Type* Typer::Visitor::TypeStart(Node* node) { return Type::Internal(zone()); }
-Bounds Typer::Visitor::TypeIfException(Node* node) {
- return Bounds::Unbounded();
-}
+Type* Typer::Visitor::TypeIfException(Node* node) { return Type::Any(); }
// Common operators.
-Bounds Typer::Visitor::TypeParameter(Node* node) {
+Type* Typer::Visitor::TypeParameter(Node* node) {
if (Type::FunctionType* function_type = typer_->function_type()) {
int const index = ParameterIndexOf(node->op());
if (index >= 0 && index < function_type->Arity()) {
- return Bounds(Type::None(), function_type->Parameter(index));
+ return function_type->Parameter(index);
}
}
- return Bounds::Unbounded();
+ return Type::Any();
}
-Bounds Typer::Visitor::TypeOsrValue(Node* node) {
- return Bounds::Unbounded();
-}
+Type* Typer::Visitor::TypeOsrValue(Node* node) { return Type::Any(); }
-Bounds Typer::Visitor::TypeInt32Constant(Node* node) {
+Type* Typer::Visitor::TypeInt32Constant(Node* node) {
double number = OpParameter<int32_t>(node);
- return Bounds(Type::Intersect(
- Type::Range(number, number, zone()), Type::UntaggedSigned32(), zone()));
+ return Type::Intersect(Type::Range(number, number, zone()),
+ Type::UntaggedSigned32(), zone());
}
-Bounds Typer::Visitor::TypeInt64Constant(Node* node) {
+Type* Typer::Visitor::TypeInt64Constant(Node* node) {
// TODO(rossberg): This actually seems to be a PointerConstant so far...
- return Bounds(Type::Internal()); // TODO(rossberg): Add int64 bitset type?
+ return Type::Internal(); // TODO(rossberg): Add int64 bitset type?
}
-Bounds Typer::Visitor::TypeFloat32Constant(Node* node) {
- return Bounds(Type::Intersect(
- Type::Of(OpParameter<float>(node), zone()),
- Type::UntaggedFloat32(), zone()));
+Type* Typer::Visitor::TypeFloat32Constant(Node* node) {
+ return Type::Intersect(Type::Of(OpParameter<float>(node), zone()),
+ Type::UntaggedFloat32(), zone());
}
-Bounds Typer::Visitor::TypeFloat64Constant(Node* node) {
- return Bounds(Type::Intersect(
- Type::Of(OpParameter<double>(node), zone()),
- Type::UntaggedFloat64(), zone()));
+Type* Typer::Visitor::TypeFloat64Constant(Node* node) {
+ return Type::Intersect(Type::Of(OpParameter<double>(node), zone()),
+ Type::UntaggedFloat64(), zone());
}
-Bounds Typer::Visitor::TypeNumberConstant(Node* node) {
+Type* Typer::Visitor::TypeNumberConstant(Node* node) {
Factory* f = isolate()->factory();
double number = OpParameter<double>(node);
if (Type::IsInteger(number)) {
- return Bounds(Type::Range(number, number, zone()));
+ return Type::Range(number, number, zone());
}
- return Bounds(Type::Constant(f->NewNumber(number), zone()));
+ return Type::Constant(f->NewNumber(number), zone());
}
-Bounds Typer::Visitor::TypeHeapConstant(Node* node) {
- return Bounds(TypeConstant(OpParameter<Handle<HeapObject>>(node)));
+Type* Typer::Visitor::TypeHeapConstant(Node* node) {
+ return TypeConstant(OpParameter<Handle<HeapObject>>(node));
}
-Bounds Typer::Visitor::TypeExternalConstant(Node* node) {
- return Bounds(Type::None(zone()), Type::Internal(zone()));
+Type* Typer::Visitor::TypeExternalConstant(Node* node) {
+ return Type::Internal(zone());
}
-Bounds Typer::Visitor::TypeSelect(Node* node) {
- return Bounds::Either(Operand(node, 1), Operand(node, 2), zone());
+Type* Typer::Visitor::TypeSelect(Node* node) {
+ return Type::Union(Operand(node, 1), Operand(node, 2), zone());
}
-Bounds Typer::Visitor::TypePhi(Node* node) {
+Type* Typer::Visitor::TypePhi(Node* node) {
int arity = node->op()->ValueInputCount();
- Bounds bounds = Operand(node, 0);
+ Type* type = Operand(node, 0);
for (int i = 1; i < arity; ++i) {
- bounds = Bounds::Either(bounds, Operand(node, i), zone());
+ type = Type::Union(type, Operand(node, i), zone());
}
- return bounds;
+ return type;
}
-Bounds Typer::Visitor::TypeEffectPhi(Node* node) {
+Type* Typer::Visitor::TypeEffectPhi(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeEffectSet(Node* node) {
+Type* Typer::Visitor::TypeEffectSet(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeValueEffect(Node* node) {
+Type* Typer::Visitor::TypeValueEffect(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeFinish(Node* node) {
- return Operand(node, 0);
-}
+Type* Typer::Visitor::TypeFinish(Node* node) { return Operand(node, 0); }
-Bounds Typer::Visitor::TypeFrameState(Node* node) {
+Type* Typer::Visitor::TypeFrameState(Node* node) {
// TODO(rossberg): Ideally FrameState wouldn't have a value output.
- return Bounds(Type::None(zone()), Type::Internal(zone()));
+ return Type::Internal(zone());
}
-Bounds Typer::Visitor::TypeStateValues(Node* node) {
- return Bounds(Type::None(zone()), Type::Internal(zone()));
+Type* Typer::Visitor::TypeStateValues(Node* node) {
+ return Type::Internal(zone());
}
-Bounds Typer::Visitor::TypeTypedStateValues(Node* node) {
- return Bounds(Type::None(zone()), Type::Internal(zone()));
+Type* Typer::Visitor::TypeTypedStateValues(Node* node) {
+ return Type::Internal(zone());
}
-Bounds Typer::Visitor::TypeCall(Node* node) {
- return Bounds::Unbounded();
-}
+Type* Typer::Visitor::TypeCall(Node* node) { return Type::Any(); }
-Bounds Typer::Visitor::TypeProjection(Node* node) {
+Type* Typer::Visitor::TypeProjection(Node* node) {
// TODO(titzer): use the output type of the input to determine the bounds.
- return Bounds::Unbounded();
+ return Type::Any();
}
-Bounds Typer::Visitor::TypeDead(Node* node) {
- return Bounds::Unbounded();
-}
+Type* Typer::Visitor::TypeDead(Node* node) { return Type::Any(); }
// JS comparison operators.
@@ -1115,7 +1080,7 @@ Type* Typer::Visitor::JSUnaryNotTyper(Type* type, Typer* t) {
}
-Bounds Typer::Visitor::TypeJSUnaryNot(Node* node) {
+Type* Typer::Visitor::TypeJSUnaryNot(Node* node) {
return TypeUnaryOp(node, JSUnaryNotTyper);
}
@@ -1138,7 +1103,7 @@ Type* Typer::Visitor::JSTypeOfTyper(Type* type, Typer* t) {
}
-Bounds Typer::Visitor::TypeJSTypeOf(Node* node) {
+Type* Typer::Visitor::TypeJSTypeOf(Node* node) {
return TypeUnaryOp(node, JSTypeOfTyper);
}
@@ -1146,56 +1111,50 @@ Bounds Typer::Visitor::TypeJSTypeOf(Node* node) {
// JS conversion operators.
-Bounds Typer::Visitor::TypeJSToBoolean(Node* node) {
+Type* Typer::Visitor::TypeJSToBoolean(Node* node) {
return TypeUnaryOp(node, ToBoolean);
}
-Bounds Typer::Visitor::TypeJSToNumber(Node* node) {
+Type* Typer::Visitor::TypeJSToNumber(Node* node) {
return TypeUnaryOp(node, ToNumber);
}
-Bounds Typer::Visitor::TypeJSToString(Node* node) {
+Type* Typer::Visitor::TypeJSToString(Node* node) {
return TypeUnaryOp(node, ToString);
}
-Bounds Typer::Visitor::TypeJSToName(Node* node) {
- return Bounds(Type::None(), Type::Name());
-}
+Type* Typer::Visitor::TypeJSToName(Node* node) { return Type::Name(); }
-Bounds Typer::Visitor::TypeJSToObject(Node* node) {
- return Bounds(Type::None(), Type::Receiver());
-}
+Type* Typer::Visitor::TypeJSToObject(Node* node) { return Type::Receiver(); }
// JS object operators.
-Bounds Typer::Visitor::TypeJSCreate(Node* node) {
- return Bounds(Type::None(), Type::Object());
-}
+Type* Typer::Visitor::TypeJSCreate(Node* node) { return Type::Object(); }
-Bounds Typer::Visitor::TypeJSCreateArguments(Node* node) {
- return Bounds(Type::None(), Type::OtherObject());
+Type* Typer::Visitor::TypeJSCreateArguments(Node* node) {
+ return Type::OtherObject();
}
-Bounds Typer::Visitor::TypeJSCreateClosure(Node* node) {
- return Bounds(Type::None(), Type::OtherObject());
+Type* Typer::Visitor::TypeJSCreateClosure(Node* node) {
+ return Type::OtherObject();
}
-Bounds Typer::Visitor::TypeJSCreateLiteralArray(Node* node) {
- return Bounds(Type::None(), Type::OtherObject());
+Type* Typer::Visitor::TypeJSCreateLiteralArray(Node* node) {
+ return Type::None(), Type::OtherObject();
}
-Bounds Typer::Visitor::TypeJSCreateLiteralObject(Node* node) {
- return Bounds(Type::None(), Type::OtherObject());
+Type* Typer::Visitor::TypeJSCreateLiteralObject(Node* node) {
+ return Type::OtherObject();
}
@@ -1209,19 +1168,15 @@ Type* Typer::Visitor::JSLoadPropertyTyper(Type* object, Type* name, Typer* t) {
}
-Bounds Typer::Visitor::TypeJSLoadProperty(Node* node) {
+Type* Typer::Visitor::TypeJSLoadProperty(Node* node) {
return TypeBinaryOp(node, JSLoadPropertyTyper);
}
-Bounds Typer::Visitor::TypeJSLoadNamed(Node* node) {
- return Bounds::Unbounded();
-}
+Type* Typer::Visitor::TypeJSLoadNamed(Node* node) { return Type::Any(); }
-Bounds Typer::Visitor::TypeJSLoadGlobal(Node* node) {
- return Bounds::Unbounded();
-}
+Type* Typer::Visitor::TypeJSLoadGlobal(Node* node) { return Type::Any(); }
// Returns a somewhat larger range if we previously assigned
@@ -1305,150 +1260,114 @@ Type* Typer::Visitor::Weaken(Node* node, Type* current_type,
}
-Bounds Typer::Visitor::TypeJSStoreProperty(Node* node) {
+Type* Typer::Visitor::TypeJSStoreProperty(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeJSStoreNamed(Node* node) {
+Type* Typer::Visitor::TypeJSStoreNamed(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeJSStoreGlobal(Node* node) {
+Type* Typer::Visitor::TypeJSStoreGlobal(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeJSDeleteProperty(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeJSDeleteProperty(Node* node) {
+ return Type::Boolean(zone());
}
-Bounds Typer::Visitor::TypeJSHasProperty(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeJSHasProperty(Node* node) {
+ return Type::Boolean(zone());
}
-Bounds Typer::Visitor::TypeJSInstanceOf(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeJSInstanceOf(Node* node) {
+ return Type::Boolean(zone());
}
// JS context operators.
-Bounds Typer::Visitor::TypeJSLoadContext(Node* node) {
- ContextAccess access = OpParameter<ContextAccess>(node);
- Bounds outer = Operand(node, 0);
- Type* context_type = outer.upper;
- if (context_type->Is(Type::None())) {
- // Upper bound of context is not yet known.
- return Bounds(Type::None(), Type::Any());
- }
-
- DCHECK(context_type->Maybe(Type::Internal()));
- // TODO(rossberg): More precisely, instead of the above assertion, we should
- // back-propagate the constraint that it has to be a subtype of Internal.
-
- MaybeHandle<Context> context;
- if (context_type->IsConstant()) {
- context = Handle<Context>::cast(context_type->AsConstant()->Value());
- }
- // Walk context chain (as far as known), mirroring dynamic lookup.
- // Since contexts are mutable, the information is only useful as a lower
- // bound.
- for (size_t i = access.depth(); i > 0; --i) {
- if (context_type->IsContext()) {
- context_type = context_type->AsContext()->Outer();
- if (context_type->IsConstant()) {
- context = Handle<Context>::cast(context_type->AsConstant()->Value());
- }
- } else if (!context.is_null()) {
- context = handle(context.ToHandleChecked()->previous(), isolate());
- }
- }
- Type* lower = Type::None();
- if (!context.is_null()) {
- lower = TypeConstant(
- handle(context.ToHandleChecked()->get(static_cast<int>(access.index())),
- isolate()));
- }
- return Bounds(lower, Type::Any());
+Type* Typer::Visitor::TypeJSLoadContext(Node* node) {
+ // Since contexts are mutable, we just return the top.
+ return Type::Any();
}
-Bounds Typer::Visitor::TypeJSStoreContext(Node* node) {
+Type* Typer::Visitor::TypeJSStoreContext(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeJSLoadDynamicGlobal(Node* node) {
- return Bounds::Unbounded();
+Type* Typer::Visitor::TypeJSLoadDynamicGlobal(Node* node) {
+ return Type::Any();
}
-Bounds Typer::Visitor::TypeJSLoadDynamicContext(Node* node) {
- return Bounds::Unbounded();
+Type* Typer::Visitor::TypeJSLoadDynamicContext(Node* node) {
+ return Type::Any();
}
-Bounds Typer::Visitor::WrapContextBoundsForInput(Node* node) {
- Bounds outer = BoundsOrNone(NodeProperties::GetContextInput(node));
- if (outer.upper->Is(Type::None())) {
- return Bounds(Type::None());
+Type* Typer::Visitor::WrapContextTypeForInput(Node* node) {
+ Type* outer = TypeOrNone(NodeProperties::GetContextInput(node));
+ if (outer->Is(Type::None())) {
+ return Type::None();
} else {
- DCHECK(outer.upper->Maybe(Type::Internal()));
- return Bounds(Type::Context(outer.upper, zone()));
+ DCHECK(outer->Maybe(Type::Internal()));
+ return Type::Context(outer, zone());
}
}
-Bounds Typer::Visitor::TypeJSCreateFunctionContext(Node* node) {
- return WrapContextBoundsForInput(node);
+Type* Typer::Visitor::TypeJSCreateFunctionContext(Node* node) {
+ return WrapContextTypeForInput(node);
}
-Bounds Typer::Visitor::TypeJSCreateCatchContext(Node* node) {
- return WrapContextBoundsForInput(node);
+Type* Typer::Visitor::TypeJSCreateCatchContext(Node* node) {
+ return WrapContextTypeForInput(node);
}
-Bounds Typer::Visitor::TypeJSCreateWithContext(Node* node) {
- return WrapContextBoundsForInput(node);
+Type* Typer::Visitor::TypeJSCreateWithContext(Node* node) {
+ return WrapContextTypeForInput(node);
}
-Bounds Typer::Visitor::TypeJSCreateBlockContext(Node* node) {
- return WrapContextBoundsForInput(node);
+Type* Typer::Visitor::TypeJSCreateBlockContext(Node* node) {
+ return WrapContextTypeForInput(node);
}
-Bounds Typer::Visitor::TypeJSCreateModuleContext(Node* node) {
+Type* Typer::Visitor::TypeJSCreateModuleContext(Node* node) {
// TODO(rossberg): this is probably incorrect
- return WrapContextBoundsForInput(node);
+ return WrapContextTypeForInput(node);
}
-Bounds Typer::Visitor::TypeJSCreateScriptContext(Node* node) {
- return WrapContextBoundsForInput(node);
+Type* Typer::Visitor::TypeJSCreateScriptContext(Node* node) {
+ return WrapContextTypeForInput(node);
}
// JS other operators.
-Bounds Typer::Visitor::TypeJSYield(Node* node) {
- return Bounds::Unbounded();
-}
+Type* Typer::Visitor::TypeJSYield(Node* node) { return Type::Any(); }
-Bounds Typer::Visitor::TypeJSCallConstruct(Node* node) {
- return Bounds(Type::None(), Type::Receiver());
+Type* Typer::Visitor::TypeJSCallConstruct(Node* node) {
+ return Type::Receiver();
}
@@ -1457,12 +1376,12 @@ Type* Typer::Visitor::JSCallFunctionTyper(Type* fun, Typer* t) {
}
-Bounds Typer::Visitor::TypeJSCallFunction(Node* node) {
+Type* Typer::Visitor::TypeJSCallFunction(Node* node) {
return TypeUnaryOp(node, JSCallFunctionTyper); // We ignore argument types.
}
-Bounds Typer::Visitor::TypeJSCallRuntime(Node* node) {
+Type* Typer::Visitor::TypeJSCallRuntime(Node* node) {
switch (CallRuntimeParametersOf(node->op()).id()) {
case Runtime::kInlineIsSmi:
case Runtime::kInlineIsArray:
@@ -1471,10 +1390,10 @@ Bounds Typer::Visitor::TypeJSCallRuntime(Node* node) {
case Runtime::kInlineIsMinusZero:
case Runtime::kInlineIsFunction:
case Runtime::kInlineIsRegExp:
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+ return Type::Boolean(zone());
case Runtime::kInlineDoubleLo:
case Runtime::kInlineDoubleHi:
- return Bounds(Type::None(zone()), Type::Signed32());
+ return Type::Signed32();
case Runtime::kInlineConstructDouble:
case Runtime::kInlineDateField:
case Runtime::kInlineMathFloor:
@@ -1483,149 +1402,143 @@ Bounds Typer::Visitor::TypeJSCallRuntime(Node* node) {
case Runtime::kInlineMathAsin:
case Runtime::kInlineMathAtan:
case Runtime::kInlineMathAtan2:
- return Bounds(Type::None(zone()), Type::Number());
+ return Type::Number();
case Runtime::kInlineMathClz32:
- return Bounds(Type::None(), Type::Range(0, 32, zone()));
+ return Type::Range(0, 32, zone());
case Runtime::kInlineStringGetLength:
- return Bounds(Type::None(), Type::Range(0, String::kMaxLength, zone()));
+ return Type::Range(0, String::kMaxLength, zone());
case Runtime::kInlineToObject:
- return Bounds(Type::None(), Type::Receiver());
+ return Type::Receiver();
default:
break;
}
- return Bounds::Unbounded();
+ return Type::Any();
}
-Bounds Typer::Visitor::TypeJSForInNext(Node* node) {
- return Bounds(Type::None(zone()),
- Type::Union(Type::Name(), Type::Undefined(), zone()));
+Type* Typer::Visitor::TypeJSForInNext(Node* node) {
+ return Type::Union(Type::Name(), Type::Undefined(), zone());
}
-Bounds Typer::Visitor::TypeJSForInPrepare(Node* node) {
+Type* Typer::Visitor::TypeJSForInPrepare(Node* node) {
// TODO(bmeurer): Return a tuple type here.
- return Bounds::Unbounded();
+ return Type::Any();
}
-Bounds Typer::Visitor::TypeJSForInDone(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeJSForInDone(Node* node) {
+ return Type::Boolean(zone());
}
-Bounds Typer::Visitor::TypeJSForInStep(Node* node) {
+Type* Typer::Visitor::TypeJSForInStep(Node* node) {
STATIC_ASSERT(Map::EnumLengthBits::kMax <= FixedArray::kMaxLength);
- return Bounds(Type::None(zone()),
- Type::Range(1, FixedArray::kMaxLength + 1, zone()));
+ return Type::Range(1, FixedArray::kMaxLength + 1, zone());
}
-Bounds Typer::Visitor::TypeJSStackCheck(Node* node) {
- return Bounds::Unbounded();
-}
+Type* Typer::Visitor::TypeJSStackCheck(Node* node) { return Type::Any(); }
// Simplified operators.
-Bounds Typer::Visitor::TypeBooleanNot(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeBooleanNot(Node* node) {
+ return Type::Boolean(zone());
}
-Bounds Typer::Visitor::TypeBooleanToNumber(Node* node) {
+Type* Typer::Visitor::TypeBooleanToNumber(Node* node) {
return TypeUnaryOp(node, ToNumber);
}
-Bounds Typer::Visitor::TypeNumberEqual(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeNumberEqual(Node* node) {
+ return Type::Boolean(zone());
}
-Bounds Typer::Visitor::TypeNumberLessThan(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeNumberLessThan(Node* node) {
+ return Type::Boolean(zone());
}
-Bounds Typer::Visitor::TypeNumberLessThanOrEqual(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeNumberLessThanOrEqual(Node* node) {
+ return Type::Boolean(zone());
}
-Bounds Typer::Visitor::TypeNumberAdd(Node* node) {
- return Bounds(Type::None(zone()), Type::Number(zone()));
-}
+Type* Typer::Visitor::TypeNumberAdd(Node* node) { return Type::Number(zone()); }
-Bounds Typer::Visitor::TypeNumberSubtract(Node* node) {
- return Bounds(Type::None(zone()), Type::Number(zone()));
+Type* Typer::Visitor::TypeNumberSubtract(Node* node) {
+ return Type::Number(zone());
}
-Bounds Typer::Visitor::TypeNumberMultiply(Node* node) {
- return Bounds(Type::None(zone()), Type::Number(zone()));
+Type* Typer::Visitor::TypeNumberMultiply(Node* node) {
+ return Type::Number(zone());
}
-Bounds Typer::Visitor::TypeNumberDivide(Node* node) {
- return Bounds(Type::None(zone()), Type::Number(zone()));
+Type* Typer::Visitor::TypeNumberDivide(Node* node) {
+ return Type::Number(zone());
}
-Bounds Typer::Visitor::TypeNumberModulus(Node* node) {
- return Bounds(Type::None(zone()), Type::Number(zone()));
+Type* Typer::Visitor::TypeNumberModulus(Node* node) {
+ return Type::Number(zone());
}
-Bounds Typer::Visitor::TypeNumberShiftLeft(Node* node) {
- return Bounds(Type::None(zone()), Type::Signed32(zone()));
+Type* Typer::Visitor::TypeNumberShiftLeft(Node* node) {
+ return Type::Signed32(zone());
}
-Bounds Typer::Visitor::TypeNumberShiftRight(Node* node) {
- return Bounds(Type::None(zone()), Type::Signed32(zone()));
+Type* Typer::Visitor::TypeNumberShiftRight(Node* node) {
+ return Type::Signed32(zone());
}
-Bounds Typer::Visitor::TypeNumberShiftRightLogical(Node* node) {
- return Bounds(Type::None(zone()), Type::Unsigned32(zone()));
+Type* Typer::Visitor::TypeNumberShiftRightLogical(Node* node) {
+ return Type::Unsigned32(zone());
}
-Bounds Typer::Visitor::TypeNumberToInt32(Node* node) {
+Type* Typer::Visitor::TypeNumberToInt32(Node* node) {
return TypeUnaryOp(node, NumberToInt32);
}
-Bounds Typer::Visitor::TypeNumberToUint32(Node* node) {
+Type* Typer::Visitor::TypeNumberToUint32(Node* node) {
return TypeUnaryOp(node, NumberToUint32);
}
-Bounds Typer::Visitor::TypePlainPrimitiveToNumber(Node* node) {
+Type* Typer::Visitor::TypePlainPrimitiveToNumber(Node* node) {
return TypeUnaryOp(node, ToNumber);
}
-Bounds Typer::Visitor::TypeReferenceEqual(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeReferenceEqual(Node* node) {
+ return Type::Boolean(zone());
}
-Bounds Typer::Visitor::TypeStringEqual(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeStringEqual(Node* node) {
+ return Type::Boolean(zone());
}
-Bounds Typer::Visitor::TypeStringLessThan(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeStringLessThan(Node* node) {
+ return Type::Boolean(zone());
}
-Bounds Typer::Visitor::TypeStringLessThanOrEqual(Node* node) {
- return Bounds(Type::None(zone()), Type::Boolean(zone()));
+Type* Typer::Visitor::TypeStringLessThanOrEqual(Node* node) {
+ return Type::Boolean(zone());
}
@@ -1639,592 +1552,455 @@ Type* ChangeRepresentation(Type* type, Type* rep, Zone* zone) {
} // namespace
-Bounds Typer::Visitor::TypeChangeTaggedToInt32(Node* node) {
- Bounds arg = Operand(node, 0);
- // TODO(neis): DCHECK(arg.upper->Is(Type::Signed32()));
- return Bounds(
- ChangeRepresentation(arg.lower, Type::UntaggedSigned32(), zone()),
- ChangeRepresentation(arg.upper, Type::UntaggedSigned32(), zone()));
+Type* Typer::Visitor::TypeChangeTaggedToInt32(Node* node) {
+ Type* arg = Operand(node, 0);
+ // TODO(neis): DCHECK(arg->Is(Type::Signed32()));
+ return ChangeRepresentation(arg, Type::UntaggedSigned32(), zone());
}
-Bounds Typer::Visitor::TypeChangeTaggedToUint32(Node* node) {
- Bounds arg = Operand(node, 0);
- // TODO(neis): DCHECK(arg.upper->Is(Type::Unsigned32()));
- return Bounds(
- ChangeRepresentation(arg.lower, Type::UntaggedUnsigned32(), zone()),
- ChangeRepresentation(arg.upper, Type::UntaggedUnsigned32(), zone()));
+Type* Typer::Visitor::TypeChangeTaggedToUint32(Node* node) {
+ Type* arg = Operand(node, 0);
+ // TODO(neis): DCHECK(arg->Is(Type::Unsigned32()));
+ return ChangeRepresentation(arg, Type::UntaggedUnsigned32(), zone());
}
-Bounds Typer::Visitor::TypeChangeTaggedToFloat64(Node* node) {
- Bounds arg = Operand(node, 0);
- // TODO(neis): DCHECK(arg.upper->Is(Type::Number()));
- return Bounds(
- ChangeRepresentation(arg.lower, Type::UntaggedFloat64(), zone()),
- ChangeRepresentation(arg.upper, Type::UntaggedFloat64(), zone()));
+Type* Typer::Visitor::TypeChangeTaggedToFloat64(Node* node) {
+ Type* arg = Operand(node, 0);
+ // TODO(neis): DCHECK(arg->Is(Type::Number()));
+ return ChangeRepresentation(arg, Type::UntaggedFloat64(), zone());
}
-Bounds Typer::Visitor::TypeChangeInt32ToTagged(Node* node) {
- Bounds arg = Operand(node, 0);
- // TODO(neis): DCHECK(arg.upper->Is(Type::Signed32()));
- Type* lower_rep = arg.lower->Is(Type::SignedSmall()) ? Type::TaggedSigned()
- : Type::Tagged();
- Type* upper_rep = arg.upper->Is(Type::SignedSmall()) ? Type::TaggedSigned()
- : Type::Tagged();
- return Bounds(ChangeRepresentation(arg.lower, lower_rep, zone()),
- ChangeRepresentation(arg.upper, upper_rep, zone()));
+Type* Typer::Visitor::TypeChangeInt32ToTagged(Node* node) {
+ Type* arg = Operand(node, 0);
+ // TODO(neis): DCHECK(arg->Is(Type::Signed32()));
+ Type* rep =
+ arg->Is(Type::SignedSmall()) ? Type::TaggedSigned() : Type::Tagged();
+ return ChangeRepresentation(arg, rep, zone());
}
-Bounds Typer::Visitor::TypeChangeUint32ToTagged(Node* node) {
- Bounds arg = Operand(node, 0);
- // TODO(neis): DCHECK(arg.upper->Is(Type::Unsigned32()));
- return Bounds(
- ChangeRepresentation(arg.lower, Type::Tagged(), zone()),
- ChangeRepresentation(arg.upper, Type::Tagged(), zone()));
+Type* Typer::Visitor::TypeChangeUint32ToTagged(Node* node) {
+ Type* arg = Operand(node, 0);
+ // TODO(neis): DCHECK(arg->Is(Type::Unsigned32()));
+ return ChangeRepresentation(arg, Type::Tagged(), zone());
}
-Bounds Typer::Visitor::TypeChangeFloat64ToTagged(Node* node) {
- Bounds arg = Operand(node, 0);
+Type* Typer::Visitor::TypeChangeFloat64ToTagged(Node* node) {
+ Type* arg = Operand(node, 0);
// TODO(neis): CHECK(arg.upper->Is(Type::Number()));
- return Bounds(
- ChangeRepresentation(arg.lower, Type::Tagged(), zone()),
- ChangeRepresentation(arg.upper, Type::Tagged(), zone()));
+ return ChangeRepresentation(arg, Type::Tagged(), zone());
}
-Bounds Typer::Visitor::TypeChangeBoolToBit(Node* node) {
- Bounds arg = Operand(node, 0);
+Type* Typer::Visitor::TypeChangeBoolToBit(Node* node) {
+ Type* arg = Operand(node, 0);
// TODO(neis): DCHECK(arg.upper->Is(Type::Boolean()));
- return Bounds(
- ChangeRepresentation(arg.lower, Type::UntaggedBit(), zone()),
- ChangeRepresentation(arg.upper, Type::UntaggedBit(), zone()));
+ return ChangeRepresentation(arg, Type::UntaggedBit(), zone());
}
-Bounds Typer::Visitor::TypeChangeBitToBool(Node* node) {
- Bounds arg = Operand(node, 0);
+Type* Typer::Visitor::TypeChangeBitToBool(Node* node) {
+ Type* arg = Operand(node, 0);
// TODO(neis): DCHECK(arg.upper->Is(Type::Boolean()));
- return Bounds(ChangeRepresentation(arg.lower, Type::TaggedPointer(), zone()),
- ChangeRepresentation(arg.upper, Type::TaggedPointer(), zone()));
+ return ChangeRepresentation(arg, Type::TaggedPointer(), zone());
}
-Bounds Typer::Visitor::TypeAllocate(Node* node) {
- return Bounds(Type::TaggedPointer());
-}
+Type* Typer::Visitor::TypeAllocate(Node* node) { return Type::TaggedPointer(); }
-Bounds Typer::Visitor::TypeLoadField(Node* node) {
- return Bounds(FieldAccessOf(node->op()).type);
+Type* Typer::Visitor::TypeLoadField(Node* node) {
+ return FieldAccessOf(node->op()).type;
}
-Bounds Typer::Visitor::TypeLoadBuffer(Node* node) {
+Type* Typer::Visitor::TypeLoadBuffer(Node* node) {
// TODO(bmeurer): This typing is not yet correct. Since we can still access
// out of bounds, the type in the general case has to include Undefined.
switch (BufferAccessOf(node->op()).external_array_type()) {
#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
case kExternal##Type##Array: \
- return Bounds(typer_->cache_.k##Type);
+ return typer_->cache_.k##Type;
TYPED_ARRAYS(TYPED_ARRAY_CASE)
#undef TYPED_ARRAY_CASE
}
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeLoadElement(Node* node) {
- return Bounds(ElementAccessOf(node->op()).type);
+Type* Typer::Visitor::TypeLoadElement(Node* node) {
+ return ElementAccessOf(node->op()).type;
}
-Bounds Typer::Visitor::TypeStoreField(Node* node) {
+Type* Typer::Visitor::TypeStoreField(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeStoreBuffer(Node* node) {
+Type* Typer::Visitor::TypeStoreBuffer(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeStoreElement(Node* node) {
+Type* Typer::Visitor::TypeStoreElement(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeObjectIsSmi(Node* node) {
- return Bounds(Type::Boolean());
-}
+Type* Typer::Visitor::TypeObjectIsSmi(Node* node) { return Type::Boolean(); }
// Machine operators.
-Bounds Typer::Visitor::TypeLoad(Node* node) {
- return Bounds::Unbounded();
-}
+Type* Typer::Visitor::TypeLoad(Node* node) { return Type::Any(); }
-Bounds Typer::Visitor::TypeStore(Node* node) {
+Type* Typer::Visitor::TypeStore(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
-Bounds Typer::Visitor::TypeWord32And(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeWord32And(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeWord32Or(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeWord32Or(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeWord32Xor(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeWord32Xor(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeWord32Shl(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeWord32Shl(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeWord32Shr(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeWord32Shr(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeWord32Sar(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeWord32Sar(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeWord32Ror(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeWord32Ror(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeWord32Equal(Node* node) {
- return Bounds(Type::Boolean());
-}
+Type* Typer::Visitor::TypeWord32Equal(Node* node) { return Type::Boolean(); }
-Bounds Typer::Visitor::TypeWord32Clz(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeWord32Clz(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeWord64And(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeWord64And(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeWord64Or(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeWord64Or(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeWord64Xor(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeWord64Xor(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeWord64Shl(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeWord64Shl(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeWord64Shr(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeWord64Shr(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeWord64Sar(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeWord64Sar(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeWord64Ror(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeWord64Ror(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeWord64Equal(Node* node) {
- return Bounds(Type::Boolean());
-}
+Type* Typer::Visitor::TypeWord64Equal(Node* node) { return Type::Boolean(); }
-Bounds Typer::Visitor::TypeInt32Add(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeInt32Add(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeInt32AddWithOverflow(Node* node) {
- return Bounds(Type::Internal());
+Type* Typer::Visitor::TypeInt32AddWithOverflow(Node* node) {
+ return Type::Internal();
}
-Bounds Typer::Visitor::TypeInt32Sub(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeInt32Sub(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeInt32SubWithOverflow(Node* node) {
- return Bounds(Type::Internal());
+Type* Typer::Visitor::TypeInt32SubWithOverflow(Node* node) {
+ return Type::Internal();
}
-Bounds Typer::Visitor::TypeInt32Mul(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeInt32Mul(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeInt32MulHigh(Node* node) {
- return Bounds(Type::Signed32());
-}
+Type* Typer::Visitor::TypeInt32MulHigh(Node* node) { return Type::Signed32(); }
-Bounds Typer::Visitor::TypeInt32Div(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeInt32Div(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeInt32Mod(Node* node) {
- return Bounds(Type::Integral32());
-}
+Type* Typer::Visitor::TypeInt32Mod(Node* node) { return Type::Integral32(); }
-Bounds Typer::Visitor::TypeInt32LessThan(Node* node) {
- return Bounds(Type::Boolean());
-}
+Type* Typer::Visitor::TypeInt32LessThan(Node* node) { return Type::Boolean(); }
-Bounds Typer::Visitor::TypeInt32LessThanOrEqual(Node* node) {
- return Bounds(Type::Boolean());
+Type* Typer::Visitor::TypeInt32LessThanOrEqual(Node* node) {
+ return Type::Boolean();
}
-Bounds Typer::Visitor::TypeUint32Div(Node* node) {
- return Bounds(Type::Unsigned32());
-}
+Type* Typer::Visitor::TypeUint32Div(Node* node) { return Type::Unsigned32(); }
-Bounds Typer::Visitor::TypeUint32LessThan(Node* node) {
- return Bounds(Type::Boolean());
-}
+Type* Typer::Visitor::TypeUint32LessThan(Node* node) { return Type::Boolean(); }
-Bounds Typer::Visitor::TypeUint32LessThanOrEqual(Node* node) {
- return Bounds(Type::Boolean());
+Type* Typer::Visitor::TypeUint32LessThanOrEqual(Node* node) {
+ return Type::Boolean();
}
-Bounds Typer::Visitor::TypeUint32Mod(Node* node) {
- return Bounds(Type::Unsigned32());
-}
+Type* Typer::Visitor::TypeUint32Mod(Node* node) { return Type::Unsigned32(); }
-Bounds Typer::Visitor::TypeUint32MulHigh(Node* node) {
- return Bounds(Type::Unsigned32());
+Type* Typer::Visitor::TypeUint32MulHigh(Node* node) {
+ return Type::Unsigned32();
}
-Bounds Typer::Visitor::TypeInt64Add(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeInt64Add(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeInt64Sub(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeInt64Sub(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeInt64Mul(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeInt64Mul(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeInt64Div(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeInt64Div(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeInt64Mod(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeInt64Mod(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeInt64LessThan(Node* node) {
- return Bounds(Type::Boolean());
-}
+Type* Typer::Visitor::TypeInt64LessThan(Node* node) { return Type::Boolean(); }
-Bounds Typer::Visitor::TypeInt64LessThanOrEqual(Node* node) {
- return Bounds(Type::Boolean());
+Type* Typer::Visitor::TypeInt64LessThanOrEqual(Node* node) {
+ return Type::Boolean();
}
-Bounds Typer::Visitor::TypeUint64Div(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeUint64Div(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeUint64LessThan(Node* node) {
- return Bounds(Type::Boolean());
-}
+Type* Typer::Visitor::TypeUint64LessThan(Node* node) { return Type::Boolean(); }
-Bounds Typer::Visitor::TypeUint64LessThanOrEqual(Node* node) {
- return Bounds(Type::Boolean());
+Type* Typer::Visitor::TypeUint64LessThanOrEqual(Node* node) {
+ return Type::Boolean();
}
-Bounds Typer::Visitor::TypeUint64Mod(Node* node) {
- return Bounds(Type::Internal());
-}
+Type* Typer::Visitor::TypeUint64Mod(Node* node) { return Type::Internal(); }
-Bounds Typer::Visitor::TypeChangeFloat32ToFloat64(Node* node) {
- return Bounds(Type::Intersect(
- Type::Number(), Type::UntaggedFloat64(), zone()));
+Type* Typer::Visitor::TypeChangeFloat32ToFloat64(Node* node) {
+ return Type::Intersect(Type::Number(), Type::UntaggedFloat64(), zone());
}
-Bounds Typer::Visitor::TypeChangeFloat64ToInt32(Node* node) {
- return Bounds(Type::Intersect(
- Type::Signed32(), Type::UntaggedSigned32(), zone()));
+Type* Typer::Visitor::TypeChangeFloat64ToInt32(Node* node) {
+ return Type::Intersect(Type::Signed32(), Type::UntaggedSigned32(), zone());
}
-Bounds Typer::Visitor::TypeChangeFloat64ToUint32(Node* node) {
- return Bounds(Type::Intersect(
- Type::Unsigned32(), Type::UntaggedUnsigned32(), zone()));
+Type* Typer::Visitor::TypeChangeFloat64ToUint32(Node* node) {
+ return Type::Intersect(Type::Unsigned32(), Type::UntaggedUnsigned32(),
+ zone());
}
-Bounds Typer::Visitor::TypeChangeInt32ToFloat64(Node* node) {
- return Bounds(Type::Intersect(
- Type::Signed32(), Type::UntaggedFloat64(), zone()));
+Type* Typer::Visitor::TypeChangeInt32ToFloat64(Node* node) {
+ return Type::Intersect(Type::Signed32(), Type::UntaggedFloat64(), zone());
}
-Bounds Typer::Visitor::TypeChangeInt32ToInt64(Node* node) {
- return Bounds(Type::Internal());
+Type* Typer::Visitor::TypeChangeInt32ToInt64(Node* node) {
+ return Type::Internal();
}
-Bounds Typer::Visitor::TypeChangeUint32ToFloat64(Node* node) {
- return Bounds(Type::Intersect(
- Type::Unsigned32(), Type::UntaggedFloat64(), zone()));
+Type* Typer::Visitor::TypeChangeUint32ToFloat64(Node* node) {
+ return Type::Intersect(Type::Unsigned32(), Type::UntaggedFloat64(), zone());
}
-Bounds Typer::Visitor::TypeChangeUint32ToUint64(Node* node) {
- return Bounds(Type::Internal());
+Type* Typer::Visitor::TypeChangeUint32ToUint64(Node* node) {
+ return Type::Internal();
}
-Bounds Typer::Visitor::TypeTruncateFloat64ToFloat32(Node* node) {
- return Bounds(Type::Intersect(
- Type::Number(), Type::UntaggedFloat32(), zone()));
+Type* Typer::Visitor::TypeTruncateFloat64ToFloat32(Node* node) {
+ return Type::Intersect(Type::Number(), Type::UntaggedFloat32(), zone());
}
-Bounds Typer::Visitor::TypeTruncateFloat64ToInt32(Node* node) {
- return Bounds(Type::Intersect(
- Type::Signed32(), Type::UntaggedSigned32(), zone()));
+Type* Typer::Visitor::TypeTruncateFloat64ToInt32(Node* node) {
+ return Type::Intersect(Type::Signed32(), Type::UntaggedSigned32(), zone());
}
-Bounds Typer::Visitor::TypeTruncateInt64ToInt32(Node* node) {
- return Bounds(Type::Intersect(
- Type::Signed32(), Type::UntaggedSigned32(), zone()));
+Type* Typer::Visitor::TypeTruncateInt64ToInt32(Node* node) {
+ return Type::Intersect(Type::Signed32(), Type::UntaggedSigned32(), zone());
}
-Bounds Typer::Visitor::TypeFloat32Add(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat32Add(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat32Sub(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat32Sub(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat32Mul(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat32Mul(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat32Div(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat32Div(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat32Max(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat32Max(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat32Min(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat32Min(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat32Abs(Node* node) {
+Type* Typer::Visitor::TypeFloat32Abs(Node* node) {
// TODO(turbofan): We should be able to infer a better type here.
- return Bounds(Type::Number());
+ return Type::Number();
}
-Bounds Typer::Visitor::TypeFloat32Sqrt(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat32Sqrt(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat32Equal(Node* node) {
- return Bounds(Type::Boolean());
-}
+Type* Typer::Visitor::TypeFloat32Equal(Node* node) { return Type::Boolean(); }
-Bounds Typer::Visitor::TypeFloat32LessThan(Node* node) {
- return Bounds(Type::Boolean());
+Type* Typer::Visitor::TypeFloat32LessThan(Node* node) {
+ return Type::Boolean();
}
-Bounds Typer::Visitor::TypeFloat32LessThanOrEqual(Node* node) {
- return Bounds(Type::Boolean());
+Type* Typer::Visitor::TypeFloat32LessThanOrEqual(Node* node) {
+ return Type::Boolean();
}
-Bounds Typer::Visitor::TypeFloat64Add(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat64Add(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat64Sub(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat64Sub(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat64Mul(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat64Mul(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat64Div(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat64Div(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat64Mod(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat64Mod(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat64Max(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat64Max(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat64Min(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat64Min(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat64Abs(Node* node) {
+Type* Typer::Visitor::TypeFloat64Abs(Node* node) {
// TODO(turbofan): We should be able to infer a better type here.
- return Bounds(Type::Number());
+ return Type::Number();
}
-Bounds Typer::Visitor::TypeFloat64Sqrt(Node* node) {
- return Bounds(Type::Number());
-}
+Type* Typer::Visitor::TypeFloat64Sqrt(Node* node) { return Type::Number(); }
-Bounds Typer::Visitor::TypeFloat64Equal(Node* node) {
- return Bounds(Type::Boolean());
-}
+Type* Typer::Visitor::TypeFloat64Equal(Node* node) { return Type::Boolean(); }
-Bounds Typer::Visitor::TypeFloat64LessThan(Node* node) {
- return Bounds(Type::Boolean());
+Type* Typer::Visitor::TypeFloat64LessThan(Node* node) {
+ return Type::Boolean();
}
-Bounds Typer::Visitor::TypeFloat64LessThanOrEqual(Node* node) {
- return Bounds(Type::Boolean());
+Type* Typer::Visitor::TypeFloat64LessThanOrEqual(Node* node) {
+ return Type::Boolean();
}
-Bounds Typer::Visitor::TypeFloat64RoundDown(Node* node) {
+Type* Typer::Visitor::TypeFloat64RoundDown(Node* node) {
// TODO(sigurds): We could have a tighter bound here.
- return Bounds(Type::Number());
+ return Type::Number();
}
-Bounds Typer::Visitor::TypeFloat64RoundTruncate(Node* node) {
+Type* Typer::Visitor::TypeFloat64RoundTruncate(Node* node) {
// TODO(sigurds): We could have a tighter bound here.
- return Bounds(Type::Number());
+ return Type::Number();
}
-Bounds Typer::Visitor::TypeFloat64RoundTiesAway(Node* node) {
+Type* Typer::Visitor::TypeFloat64RoundTiesAway(Node* node) {
// TODO(sigurds): We could have a tighter bound here.
- return Bounds(Type::Number());
+ return Type::Number();
}
-Bounds Typer::Visitor::TypeFloat64ExtractLowWord32(Node* node) {
- return Bounds(Type::Signed32());
+Type* Typer::Visitor::TypeFloat64ExtractLowWord32(Node* node) {
+ return Type::Signed32();
}
-Bounds Typer::Visitor::TypeFloat64ExtractHighWord32(Node* node) {
- return Bounds(Type::Signed32());
+Type* Typer::Visitor::TypeFloat64ExtractHighWord32(Node* node) {
+ return Type::Signed32();
}
-Bounds Typer::Visitor::TypeFloat64InsertLowWord32(Node* node) {
- return Bounds(Type::Number());
+Type* Typer::Visitor::TypeFloat64InsertLowWord32(Node* node) {
+ return Type::Number();
}
-Bounds Typer::Visitor::TypeFloat64InsertHighWord32(Node* node) {
- return Bounds(Type::Number());
+Type* Typer::Visitor::TypeFloat64InsertHighWord32(Node* node) {
+ return Type::Number();
}
-Bounds Typer::Visitor::TypeLoadStackPointer(Node* node) {
- return Bounds(Type::Internal());
+Type* Typer::Visitor::TypeLoadStackPointer(Node* node) {
+ return Type::Internal();
}
-Bounds Typer::Visitor::TypeLoadFramePointer(Node* node) {
- return Bounds(Type::Internal());
+Type* Typer::Visitor::TypeLoadFramePointer(Node* node) {
+ return Type::Internal();
}
-Bounds Typer::Visitor::TypeCheckedLoad(Node* node) {
- return Bounds::Unbounded();
-}
+Type* Typer::Visitor::TypeCheckedLoad(Node* node) { return Type::Any(); }
-Bounds Typer::Visitor::TypeCheckedStore(Node* node) {
+Type* Typer::Visitor::TypeCheckedStore(Node* node) {
UNREACHABLE();
- return Bounds();
+ return nullptr;
}
« no previous file with comments | « src/compiler/simplified-lowering.cc ('k') | src/compiler/verifier.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698