Commit 44c24bf8 authored by Benedikt Meurer's avatar Benedikt Meurer Committed by Commit Bot

[cleanup] Remove a lot of dead intrinsics/runtime functions.

The following runtime functions (and their intrinsic counter parts) are
completely unused/obsolete by now

  - %ToInteger
  - %GeneratorGetInputOrDebugPos

and in addition the intrinsics for %_ToNumber and %_IsJSProxy are also
dead (according to code coverage and manual verification), so drop them
as well (their runtime function counterparts are still somewhat used).

Bug: v8:8015
Change-Id: I60d53762dd9717fb43de38cb490b46676c467212
Reviewed-on: https://chromium-review.googlesource.com/1235923Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#56076}
parent b453a10d
......@@ -38,8 +38,6 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) {
return ReduceGeneratorClose(node);
case Runtime::kInlineCreateJSGeneratorObject:
return ReduceCreateJSGeneratorObject(node);
case Runtime::kInlineGeneratorGetInputOrDebugPos:
return ReduceGeneratorGetInputOrDebugPos(node);
case Runtime::kInlineAsyncGeneratorReject:
return ReduceAsyncGeneratorReject(node);
case Runtime::kInlineAsyncGeneratorResolve:
......@@ -52,8 +50,6 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) {
return ReduceIsInstanceType(node, JS_ARRAY_TYPE);
case Runtime::kInlineIsTypedArray:
return ReduceIsInstanceType(node, JS_TYPED_ARRAY_TYPE);
case Runtime::kInlineIsJSProxy:
return ReduceIsInstanceType(node, JS_PROXY_TYPE);
case Runtime::kInlineIsJSReceiver:
return ReduceIsJSReceiver(node);
case Runtime::kInlineIsSmi:
......@@ -62,12 +58,8 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) {
return ReduceRejectPromise(node);
case Runtime::kInlineResolvePromise:
return ReduceResolvePromise(node);
case Runtime::kInlineToInteger:
return ReduceToInteger(node);
case Runtime::kInlineToLength:
return ReduceToLength(node);
case Runtime::kInlineToNumber:
return ReduceToNumber(node);
case Runtime::kInlineToObject:
return ReduceToObject(node);
case Runtime::kInlineToString:
......@@ -135,16 +127,6 @@ Reduction JSIntrinsicLowering::ReduceGeneratorClose(Node* node) {
return Change(node, op, generator, closed, effect, control);
}
Reduction JSIntrinsicLowering::ReduceGeneratorGetInputOrDebugPos(Node* node) {
Node* const generator = NodeProperties::GetValueInput(node, 0);
Node* const effect = NodeProperties::GetEffectInput(node);
Node* const control = NodeProperties::GetControlInput(node);
Operator const* const op = simplified()->LoadField(
AccessBuilder::ForJSGeneratorObjectInputOrDebugPos());
return Change(node, op, generator, effect, control);
}
Reduction JSIntrinsicLowering::ReduceAsyncGeneratorReject(Node* node) {
return Change(
node, Builtins::CallableFor(isolate(), Builtins::kAsyncGeneratorReject),
......@@ -246,17 +228,6 @@ Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op) {
return Changed(node);
}
Reduction JSIntrinsicLowering::ReduceToInteger(Node* node) {
NodeProperties::ChangeOp(node, javascript()->ToInteger());
return Changed(node);
}
Reduction JSIntrinsicLowering::ReduceToNumber(Node* node) {
NodeProperties::ChangeOp(node, javascript()->ToNumber());
return Changed(node);
}
Reduction JSIntrinsicLowering::ReduceToLength(Node* node) {
NodeProperties::ChangeOp(node, javascript()->ToLength());
......
......@@ -40,11 +40,9 @@ class V8_EXPORT_PRIVATE JSIntrinsicLowering final
private:
Reduction ReduceCreateIterResultObject(Node* node);
Reduction ReduceDebugIsActive(Node* node);
Reduction ReduceDeoptimizeNow(Node* node);
Reduction ReduceCreateJSGeneratorObject(Node* node);
Reduction ReduceGeneratorClose(Node* node);
Reduction ReduceGeneratorGetInputOrDebugPos(Node* node);
Reduction ReduceAsyncGeneratorReject(Node* node);
Reduction ReduceAsyncGeneratorResolve(Node* node);
Reduction ReduceAsyncGeneratorYield(Node* node);
......@@ -55,9 +53,7 @@ class V8_EXPORT_PRIVATE JSIntrinsicLowering final
Reduction ReduceIsSmi(Node* node);
Reduction ReduceRejectPromise(Node* node);
Reduction ReduceResolvePromise(Node* node);
Reduction ReduceToInteger(Node* node);
Reduction ReduceToLength(Node* node);
Reduction ReduceToNumber(Node* node);
Reduction ReduceToObject(Node* node);
Reduction ReduceToString(Node* node);
Reduction ReduceCall(Node* node);
......
......@@ -180,7 +180,6 @@ bool Linkage::NeedsFrameStateInput(Runtime::FunctionId function) {
// Some inline intrinsics are also safe to call without a FrameState.
case Runtime::kInlineCreateIterResultObject:
case Runtime::kInlineGeneratorClose:
case Runtime::kInlineGeneratorGetInputOrDebugPos:
case Runtime::kInlineGeneratorGetResumeMode:
case Runtime::kInlineCreateJSGeneratorObject:
case Runtime::kInlineIsArray:
......
......@@ -1731,8 +1731,6 @@ Type Typer::Visitor::TypeJSCallRuntime(Node* node) {
return Type::OtherObject();
case Runtime::kInlineStringCharFromCode:
return Type::String();
case Runtime::kInlineToInteger:
return TypeUnaryOp(node, ToInteger);
case Runtime::kInlineToLength:
return TypeUnaryOp(node, ToLength);
case Runtime::kInlineToNumber:
......
......@@ -15,7 +15,7 @@ function JSProxyGetTarget(proxy) { };
function JSProxyGetHandler(proxy) { };
try {
isProxy = Function(['object'], 'return %_IsJSProxy(object)');
isProxy = Function(['object'], 'return %IsJSProxy(object)');
JSProxyGetTarget = Function(['proxy'],
'return %JSProxyGetTarget(proxy)');
JSProxyGetHandler = Function(['proxy'],
......
......@@ -246,7 +246,6 @@ bool IntrinsicHasNoSideEffect(Runtime::FunctionId id) {
/* Conversions */ \
V(NumberToString) \
V(ToBigInt) \
V(ToInteger) \
V(ToLength) \
V(ToNumber) \
V(ToObject) \
......
......@@ -159,12 +159,6 @@ Node* IntrinsicsGenerator::IsArray(
return IsInstanceType(input, JS_ARRAY_TYPE);
}
Node* IntrinsicsGenerator::IsJSProxy(
const InterpreterAssembler::RegListNodePair& args, Node* context) {
Node* input = __ LoadRegisterFromRegisterList(args, 0);
return IsInstanceType(input, JS_PROXY_TYPE);
}
Node* IntrinsicsGenerator::IsTypedArray(
const InterpreterAssembler::RegListNodePair& args, Node* context) {
Node* input = __ LoadRegisterFromRegisterList(args, 0);
......@@ -244,18 +238,6 @@ Node* IntrinsicsGenerator::ToLength(
args, context, Builtins::CallableFor(isolate(), Builtins::kToLength));
}
Node* IntrinsicsGenerator::ToInteger(
const InterpreterAssembler::RegListNodePair& args, Node* context) {
return IntrinsicAsStubCall(
args, context, Builtins::CallableFor(isolate(), Builtins::kToInteger));
}
Node* IntrinsicsGenerator::ToNumber(
const InterpreterAssembler::RegListNodePair& args, Node* context) {
return IntrinsicAsStubCall(
args, context, Builtins::CallableFor(isolate(), Builtins::kToNumber));
}
Node* IntrinsicsGenerator::ToObject(
const InterpreterAssembler::RegListNodePair& args, Node* context) {
return IntrinsicAsStubCall(
......@@ -336,15 +318,6 @@ Node* IntrinsicsGenerator::CreateJSGeneratorObject(
Builtins::kCreateGeneratorObject);
}
Node* IntrinsicsGenerator::GeneratorGetInputOrDebugPos(
const InterpreterAssembler::RegListNodePair& args, Node* context) {
Node* generator = __ LoadRegisterFromRegisterList(args, 0);
Node* const value =
__ LoadObjectField(generator, JSGeneratorObject::kInputOrDebugPosOffset);
return value;
}
Node* IntrinsicsGenerator::GeneratorGetResumeMode(
const InterpreterAssembler::RegListNodePair& args, Node* context) {
Node* generator = __ LoadRegisterFromRegisterList(args, 0);
......
......@@ -19,7 +19,6 @@ namespace interpreter {
V(AsyncGeneratorYield, async_generator_yield, 3) \
V(CreateJSGeneratorObject, create_js_generator_object, 2) \
V(GeneratorGetResumeMode, generator_get_resume_mode, 1) \
V(GeneratorGetInputOrDebugPos, generator_get_input_or_debug_pos, 1) \
V(GeneratorClose, generator_close, 1) \
V(GetImportMetaObject, get_import_meta_object, 0) \
V(Call, call, -1) \
......@@ -28,7 +27,6 @@ namespace interpreter {
V(HasProperty, has_property, 2) \
V(GetProperty, get_property, 2) \
V(IsArray, is_array, 1) \
V(IsJSProxy, is_js_proxy, 1) \
V(IsJSReceiver, is_js_receiver, 1) \
V(IsSmi, is_smi, 1) \
V(IsTypedArray, is_typed_array, 1) \
......@@ -36,8 +34,6 @@ namespace interpreter {
V(ResolvePromise, resolve_promise, 2) \
V(ToString, to_string, 1) \
V(ToLength, to_length, 1) \
V(ToInteger, to_integer, 1) \
V(ToNumber, to_number, 1) \
V(ToObject, to_object, 1)
class IntrinsicsHelper {
......
......@@ -62,10 +62,8 @@ macro REQUIRE_OBJECT_COERCIBLE(arg, functionName) = if (IS_NULL(%IS_VAR(arg)) ||
# Inline macros. Use %IS_VAR to make sure arg is evaluated only once.
macro TO_BOOLEAN(arg) = (!!(arg));
macro TO_INTEGER(arg) = (%_ToInteger(arg));
macro TO_LENGTH(arg) = (%_ToLength(arg));
macro TO_STRING(arg) = (%_ToString(arg));
macro TO_NUMBER(arg) = (%_ToNumber(arg));
macro TO_OBJECT(arg) = (%_ToObject(arg));
macro HAS_OWN_PROPERTY(obj, key) = (%_Call(ObjectHasOwnProperty, obj, key));
......
......@@ -53,12 +53,6 @@ RUNTIME_FUNCTION(Runtime_GeneratorGetFunction) {
return generator->function();
}
RUNTIME_FUNCTION(Runtime_GeneratorGetInputOrDebugPos) {
// Runtime call is implemented in InterpreterIntrinsics and lowered in
// JSIntrinsicLowering
UNREACHABLE();
}
RUNTIME_FUNCTION(Runtime_AsyncGeneratorResolve) {
// Runtime call is implemented in InterpreterIntrinsics and lowered in
// JSIntrinsicLowering
......
......@@ -1156,13 +1156,6 @@ RUNTIME_FUNCTION(Runtime_ToNumeric) {
RETURN_RESULT_OR_FAILURE(isolate, Object::ToNumeric(isolate, input));
}
RUNTIME_FUNCTION(Runtime_ToInteger) {
HandleScope scope(isolate);
DCHECK_EQ(1, args.length());
CONVERT_ARG_HANDLE_CHECKED(Object, input, 0);
RETURN_RESULT_OR_FAILURE(isolate, Object::ToInteger(isolate, input));
}
RUNTIME_FUNCTION(Runtime_ToLength) {
HandleScope scope(isolate);
......
......@@ -194,7 +194,6 @@ namespace internal {
F(CreateJSGeneratorObject, 2, 1) \
F(GeneratorClose, 1, 1) \
F(GeneratorGetFunction, 1, 1) \
F(GeneratorGetInputOrDebugPos, 1, 1) \
F(GeneratorGetResumeMode, 1, 1)
#ifdef V8_INTL_SUPPORT
......@@ -333,7 +332,6 @@ namespace internal {
F(StoreDataPropertyInLiteral, 3, 1) \
F(ShrinkPropertyDictionary, 1, 1) \
F(ToFastProperties, 1, 1) \
F(ToInteger, 1, 1) \
F(ToLength, 1, 1) \
F(ToName, 1, 1) \
F(ToNumber, 1, 1) \
......
......@@ -94,29 +94,6 @@ TEST(IsArray) {
CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("42")));
}
TEST(IsJSProxy) {
HandleAndZoneScope handles;
InvokeIntrinsicHelper helper(handles.main_isolate(), handles.main_zone(),
Runtime::kInlineIsJSProxy);
Factory* factory = handles.main_isolate()->factory();
CHECK_EQ(*factory->false_value(),
*helper.Invoke(helper.NewObject("new Date()")));
CHECK_EQ(*factory->false_value(),
*helper.Invoke(helper.NewObject("(function() {})")));
CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("([1])")));
CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("({})")));
CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("(/x/)")));
CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.Undefined()));
CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.Null()));
CHECK_EQ(*factory->false_value(),
*helper.Invoke(helper.NewObject("'string'")));
CHECK_EQ(*factory->false_value(), *helper.Invoke(helper.NewObject("42")));
CHECK_EQ(*factory->true_value(),
*helper.Invoke(helper.NewObject("new Proxy({},{})")));
}
TEST(IsTypedArray) {
HandleAndZoneScope handles;
......@@ -198,15 +175,6 @@ TEST(IntrinsicAsStubCall) {
HandleAndZoneScope handles;
Isolate* isolate = handles.main_isolate();
Factory* factory = isolate->factory();
InvokeIntrinsicHelper to_number_helper(isolate, handles.main_zone(),
Runtime::kInlineToNumber);
CHECK_EQ(Smi::FromInt(46),
*to_number_helper.Invoke(to_number_helper.NewObject("'46'")));
InvokeIntrinsicHelper to_integer_helper(isolate, handles.main_zone(),
Runtime::kInlineToInteger);
CHECK_EQ(Smi::FromInt(502),
*to_integer_helper.Invoke(to_integer_helper.NewObject("502.67")));
InvokeIntrinsicHelper has_property_helper(isolate, handles.main_zone(),
Runtime::kInlineHasProperty);
......
......@@ -5,47 +5,34 @@
// Flags: --allow-natives-syntax
assertEquals(1, %ToNumber(1));
assertEquals(1, %_ToNumber(1));
assertEquals(.5, %ToNumber(.5));
assertEquals(.5, %_ToNumber(.5));
assertEquals(0, %ToNumber(null));
assertEquals(0, %_ToNumber(null));
assertEquals(1, %ToNumber(true));
assertEquals(1, %_ToNumber(true));
assertEquals(0, %ToNumber(false));
assertEquals(0, %_ToNumber(false));
assertEquals(NaN, %ToNumber(undefined));
assertEquals(NaN, %_ToNumber(undefined));
assertEquals(-1, %ToNumber("-1"));
assertEquals(-1, %_ToNumber("-1"));
assertEquals(123, %ToNumber("123"));
assertEquals(123, %_ToNumber("123"));
assertEquals(NaN, %ToNumber("random text"));
assertEquals(NaN, %_ToNumber("random text"));
assertThrows(function() { %ToNumber(Symbol.toPrimitive) }, TypeError);
assertThrows(function() { %_ToNumber(Symbol.toPrimitive) }, TypeError);
var a = { toString: function() { return 54321 }};
assertEquals(54321, %ToNumber(a));
assertEquals(54321, %_ToNumber(a));
var b = { valueOf: function() { return 42 }};
assertEquals(42, %ToNumber(b));
assertEquals(42, %_ToNumber(b));
var c = {
toString: function() { return "x"},
valueOf: function() { return 123 }
};
assertEquals(123, %ToNumber(c));
assertEquals(123, %_ToNumber(c));
var d = {
[Symbol.toPrimitive]: function(hint) {
......@@ -54,8 +41,6 @@ var d = {
}
};
assertEquals(987654321, %ToNumber(d));
assertEquals(987654321, %_ToNumber(d));
var e = new Date(0);
assertEquals(0, %ToNumber(e));
assertEquals(0, %_ToNumber(e));
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment