Skip to content

Commit 863a2d6

Browse files
verwaestV8 LUCI CQ
authored andcommitted
[interpreter] Remove unused interpreter intrinsics
This also removes intrinsics that were just used in tests. It keeps InlineIncBlockCounter for now because it's a less straightforward. Change-Id: I77e55d7a746294892d0fd7ab577ebf8eb42f1f08 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2953195 Commit-Queue: Toon Verwaest <[email protected]> Reviewed-by: Jakob Gruber <[email protected]> Reviewed-by: Leszek Swirski <[email protected]> Cr-Commit-Position: refs/heads/master@{#75217}
1 parent 11f7e43 commit 863a2d6

23 files changed

Lines changed: 41 additions & 446 deletions

src/baseline/baseline-compiler.cc

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,56 +1274,6 @@ void BaselineCompiler::VisitInvokeIntrinsic() {
12741274
}
12751275
}
12761276

1277-
void BaselineCompiler::VisitIntrinsicIsJSReceiver(
1278-
interpreter::RegisterList args) {
1279-
SelectBooleanConstant(
1280-
kInterpreterAccumulatorRegister,
1281-
[&](Label* is_true, Label::Distance distance) {
1282-
BaselineAssembler::ScratchRegisterScope scratch_scope(&basm_);
1283-
__ LoadRegister(kInterpreterAccumulatorRegister, args[0]);
1284-
1285-
Label is_smi;
1286-
__ JumpIfSmi(kInterpreterAccumulatorRegister, &is_smi, Label::kNear);
1287-
1288-
// If we ever added more instance types after LAST_JS_RECEIVER_TYPE,
1289-
// this would have to become a range check.
1290-
STATIC_ASSERT(LAST_JS_RECEIVER_TYPE == LAST_TYPE);
1291-
__ JumpIfObjectType(Condition::kGreaterThanEqual,
1292-
kInterpreterAccumulatorRegister,
1293-
FIRST_JS_RECEIVER_TYPE,
1294-
scratch_scope.AcquireScratch(), is_true, distance);
1295-
1296-
__ Bind(&is_smi);
1297-
});
1298-
}
1299-
1300-
void BaselineCompiler::VisitIntrinsicIsArray(interpreter::RegisterList args) {
1301-
SelectBooleanConstant(
1302-
kInterpreterAccumulatorRegister,
1303-
[&](Label* is_true, Label::Distance distance) {
1304-
BaselineAssembler::ScratchRegisterScope scratch_scope(&basm_);
1305-
__ LoadRegister(kInterpreterAccumulatorRegister, args[0]);
1306-
1307-
Label is_smi;
1308-
__ JumpIfSmi(kInterpreterAccumulatorRegister, &is_smi, Label::kNear);
1309-
1310-
__ JumpIfObjectType(Condition::kEqual, kInterpreterAccumulatorRegister,
1311-
JS_ARRAY_TYPE, scratch_scope.AcquireScratch(),
1312-
is_true, distance);
1313-
1314-
__ Bind(&is_smi);
1315-
});
1316-
}
1317-
1318-
void BaselineCompiler::VisitIntrinsicIsSmi(interpreter::RegisterList args) {
1319-
SelectBooleanConstant(
1320-
kInterpreterAccumulatorRegister,
1321-
[&](Label* is_true, Label::Distance distance) {
1322-
__ LoadRegister(kInterpreterAccumulatorRegister, args[0]);
1323-
__ JumpIfSmi(kInterpreterAccumulatorRegister, is_true, distance);
1324-
});
1325-
}
1326-
13271277
void BaselineCompiler::VisitIntrinsicCopyDataProperties(
13281278
interpreter::RegisterList args) {
13291279
CallBuiltin<Builtin::kCopyDataProperties>(args);
@@ -1334,19 +1284,6 @@ void BaselineCompiler::VisitIntrinsicCreateIterResultObject(
13341284
CallBuiltin<Builtin::kCreateIterResultObject>(args);
13351285
}
13361286

1337-
void BaselineCompiler::VisitIntrinsicHasProperty(
1338-
interpreter::RegisterList args) {
1339-
CallBuiltin<Builtin::kHasProperty>(args);
1340-
}
1341-
1342-
void BaselineCompiler::VisitIntrinsicToLength(interpreter::RegisterList args) {
1343-
CallBuiltin<Builtin::kToLength>(args);
1344-
}
1345-
1346-
void BaselineCompiler::VisitIntrinsicToObject(interpreter::RegisterList args) {
1347-
CallBuiltin<Builtin::kToObject>(args);
1348-
}
1349-
13501287
void BaselineCompiler::VisitIntrinsicCall(interpreter::RegisterList args) {
13511288
// First argument register contains the function target.
13521289
__ LoadRegister(kJavaScriptCallTargetRegister, args.first_register());

src/compiler/js-intrinsic-lowering.cc

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,6 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) {
7474
return ReduceAsyncGeneratorYield(node);
7575
case Runtime::kInlineGeneratorGetResumeMode:
7676
return ReduceGeneratorGetResumeMode(node);
77-
case Runtime::kInlineIsArray:
78-
return ReduceIsInstanceType(node, JS_ARRAY_TYPE);
79-
case Runtime::kInlineIsJSReceiver:
80-
return ReduceIsJSReceiver(node);
81-
case Runtime::kInlineIsSmi:
82-
return ReduceIsSmi(node);
83-
case Runtime::kInlineToLength:
84-
return ReduceToLength(node);
85-
case Runtime::kInlineToObject:
86-
return ReduceToObject(node);
8777
case Runtime::kInlineCall:
8878
return ReduceCall(node);
8979
case Runtime::kInlineIncBlockCounter:
@@ -272,10 +262,6 @@ Reduction JSIntrinsicLowering::ReduceIsJSReceiver(Node* node) {
272262
}
273263

274264

275-
Reduction JSIntrinsicLowering::ReduceIsSmi(Node* node) {
276-
return Change(node, simplified()->ObjectIsSmi());
277-
}
278-
279265
Reduction JSIntrinsicLowering::ReduceTurbofanStaticAssert(Node* node) {
280266
if (FLAG_always_opt) {
281267
// Ignore static asserts, as we most likely won't have enough information

src/compiler/js-intrinsic-lowering.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ class V8_EXPORT_PRIVATE JSIntrinsicLowering final
5757
Reduction ReduceGeneratorGetResumeMode(Node* node);
5858
Reduction ReduceIsInstanceType(Node* node, InstanceType instance_type);
5959
Reduction ReduceIsJSReceiver(Node* node);
60-
Reduction ReduceIsSmi(Node* node);
6160
Reduction ReduceIsBeingInterpreted(Node* node);
6261
Reduction ReduceTurbofanStaticAssert(Node* node);
6362
Reduction ReduceVerifyType(Node* node);

src/compiler/linkage.cc

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,6 @@ bool Linkage::NeedsFrameStateInput(Runtime::FunctionId function) {
260260
case Runtime::kInlineGeneratorClose:
261261
case Runtime::kInlineGeneratorGetResumeMode:
262262
case Runtime::kInlineCreateJSGeneratorObject:
263-
case Runtime::kInlineIsArray:
264-
case Runtime::kInlineIsJSReceiver:
265-
case Runtime::kInlineIsRegExp:
266-
case Runtime::kInlineIsSmi:
267263
return false;
268264

269265
default:

src/compiler/typer.cc

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1825,21 +1825,8 @@ Type Typer::Visitor::TypeJSCallWithSpread(Node* node) {
18251825

18261826
Type Typer::Visitor::TypeJSCallRuntime(Node* node) {
18271827
switch (CallRuntimeParametersOf(node->op()).id()) {
1828-
case Runtime::kInlineIsJSReceiver:
1829-
return TypeUnaryOp(node, ObjectIsReceiver);
1830-
case Runtime::kInlineIsSmi:
1831-
return TypeUnaryOp(node, ObjectIsSmi);
1832-
case Runtime::kInlineIsArray:
1833-
case Runtime::kInlineIsRegExp:
1834-
return Type::Boolean();
18351828
case Runtime::kInlineCreateIterResultObject:
18361829
return Type::OtherObject();
1837-
case Runtime::kInlineToLength:
1838-
return TypeUnaryOp(node, ToLength);
1839-
case Runtime::kInlineToNumber:
1840-
return TypeUnaryOp(node, ToNumber);
1841-
case Runtime::kInlineToObject:
1842-
return TypeUnaryOp(node, ToObject);
18431830
case Runtime::kHasInPrototypeChain:
18441831
return Type::Boolean();
18451832
default:

src/debug/debug-evaluate.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,6 @@ bool IntrinsicHasNoSideEffect(Runtime::FunctionId id) {
396396
// Intrinsics with inline versions have to be allowlisted here a second time.
397397
#define INLINE_INTRINSIC_ALLOWLIST(V) \
398398
V(Call) \
399-
V(IsJSReceiver) \
400399
V(AsyncFunctionEnter) \
401400
V(AsyncFunctionReject) \
402401
V(AsyncFunctionResolve)

src/interpreter/interpreter-intrinsics-generator.cc

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -166,32 +166,6 @@ TNode<Object> IntrinsicsGenerator::IntrinsicAsBuiltinCall(
166166
}
167167
}
168168

169-
TNode<Object> IntrinsicsGenerator::IsJSReceiver(
170-
const InterpreterAssembler::RegListNodePair& args, TNode<Context> context,
171-
int arg_count) {
172-
TNode<Object> input = __ LoadRegisterFromRegisterList(args, 0);
173-
TNode<Oddball> result = __ Select<Oddball>(
174-
__ TaggedIsSmi(input), [=] { return __ FalseConstant(); },
175-
[=] {
176-
return __ SelectBooleanConstant(__ IsJSReceiver(__ CAST(input)));
177-
});
178-
return result;
179-
}
180-
181-
TNode<Object> IntrinsicsGenerator::IsArray(
182-
const InterpreterAssembler::RegListNodePair& args, TNode<Context> context,
183-
int arg_count) {
184-
TNode<Object> input = __ LoadRegisterFromRegisterList(args, 0);
185-
return IsInstanceType(input, JS_ARRAY_TYPE);
186-
}
187-
188-
TNode<Object> IntrinsicsGenerator::IsSmi(
189-
const InterpreterAssembler::RegListNodePair& args, TNode<Context> context,
190-
int arg_count) {
191-
TNode<Object> input = __ LoadRegisterFromRegisterList(args, 0);
192-
return __ SelectBooleanConstant(__ TaggedIsSmi(input));
193-
}
194-
195169
TNode<Object> IntrinsicsGenerator::CopyDataProperties(
196170
const InterpreterAssembler::RegListNodePair& args, TNode<Context> context,
197171
int arg_count) {
@@ -206,25 +180,6 @@ TNode<Object> IntrinsicsGenerator::CreateIterResultObject(
206180
arg_count);
207181
}
208182

209-
TNode<Object> IntrinsicsGenerator::HasProperty(
210-
const InterpreterAssembler::RegListNodePair& args, TNode<Context> context,
211-
int arg_count) {
212-
return IntrinsicAsBuiltinCall(args, context, Builtin::kHasProperty,
213-
arg_count);
214-
}
215-
216-
TNode<Object> IntrinsicsGenerator::ToLength(
217-
const InterpreterAssembler::RegListNodePair& args, TNode<Context> context,
218-
int arg_count) {
219-
return IntrinsicAsBuiltinCall(args, context, Builtin::kToLength, arg_count);
220-
}
221-
222-
TNode<Object> IntrinsicsGenerator::ToObject(
223-
const InterpreterAssembler::RegListNodePair& args, TNode<Context> context,
224-
int arg_count) {
225-
return IntrinsicAsBuiltinCall(args, context, Builtin::kToObject, arg_count);
226-
}
227-
228183
TNode<Object> IntrinsicsGenerator::Call(
229184
const InterpreterAssembler::RegListNodePair& args, TNode<Context> context,
230185
int arg_count) {

src/interpreter/interpreter-intrinsics.h

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,25 @@ namespace interpreter {
1313

1414
// List of supported intrisics, with upper case name, lower case name and
1515
// expected number of arguments (-1 denoting argument count is variable).
16-
#define INTRINSICS_LIST(V) \
17-
V(AsyncFunctionAwaitCaught, async_function_await_caught, 2) \
18-
V(AsyncFunctionAwaitUncaught, async_function_await_uncaught, 2) \
19-
V(AsyncFunctionEnter, async_function_enter, 2) \
20-
V(AsyncFunctionReject, async_function_reject, 3) \
21-
V(AsyncFunctionResolve, async_function_resolve, 3) \
22-
V(AsyncGeneratorAwaitCaught, async_generator_await_caught, 2) \
23-
V(AsyncGeneratorAwaitUncaught, async_generator_await_uncaught, 2) \
24-
V(AsyncGeneratorReject, async_generator_reject, 2) \
25-
V(AsyncGeneratorResolve, async_generator_resolve, 3) \
26-
V(AsyncGeneratorYield, async_generator_yield, 3) \
27-
V(CreateJSGeneratorObject, create_js_generator_object, 2) \
28-
V(GeneratorGetResumeMode, generator_get_resume_mode, 1) \
29-
V(GeneratorClose, generator_close, 1) \
30-
V(GetImportMetaObject, get_import_meta_object, 0) \
31-
V(Call, call, -1) \
32-
V(CopyDataProperties, copy_data_properties, 2) \
33-
V(CreateIterResultObject, create_iter_result_object, 2) \
34-
V(CreateAsyncFromSyncIterator, create_async_from_sync_iterator, 1) \
35-
V(HasProperty, has_property, 2) \
36-
V(IsArray, is_array, 1) \
37-
V(IsJSReceiver, is_js_receiver, 1) \
38-
V(IsSmi, is_smi, 1) \
39-
V(ToLength, to_length, 1) \
40-
V(ToObject, to_object, 1)
16+
#define INTRINSICS_LIST(V) \
17+
V(AsyncFunctionAwaitCaught, async_function_await_caught, 2) \
18+
V(AsyncFunctionAwaitUncaught, async_function_await_uncaught, 2) \
19+
V(AsyncFunctionEnter, async_function_enter, 2) \
20+
V(AsyncFunctionReject, async_function_reject, 3) \
21+
V(AsyncFunctionResolve, async_function_resolve, 3) \
22+
V(AsyncGeneratorAwaitCaught, async_generator_await_caught, 2) \
23+
V(AsyncGeneratorAwaitUncaught, async_generator_await_uncaught, 2) \
24+
V(AsyncGeneratorReject, async_generator_reject, 2) \
25+
V(AsyncGeneratorResolve, async_generator_resolve, 3) \
26+
V(AsyncGeneratorYield, async_generator_yield, 3) \
27+
V(CreateJSGeneratorObject, create_js_generator_object, 2) \
28+
V(GeneratorGetResumeMode, generator_get_resume_mode, 1) \
29+
V(GeneratorClose, generator_close, 1) \
30+
V(GetImportMetaObject, get_import_meta_object, 0) \
31+
V(Call, call, -1) \
32+
V(CopyDataProperties, copy_data_properties, 2) \
33+
V(CreateIterResultObject, create_iter_result_object, 2) \
34+
V(CreateAsyncFromSyncIterator, create_async_from_sync_iterator, 1)
4135

4236
class IntrinsicsHelper {
4337
public:

src/runtime/runtime.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ namespace internal {
4646
F(ArrayIsArray, 1, 1) \
4747
F(ArraySpeciesConstructor, 1, 1) \
4848
F(GrowArrayElements, 2, 1) \
49-
I(IsArray, 1, 1) \
49+
F(IsArray, 1, 1) \
5050
F(NewArray, -1 /* >= 3 */, 1) \
5151
F(NormalizeElements, 1, 1) \
5252
F(TransitionElementsKind, 2, 1) \
@@ -276,7 +276,7 @@ namespace internal {
276276
F(ArrayBufferMaxByteLength, 0, 1) \
277277
F(GetHoleNaNLower, 0, 1) \
278278
F(GetHoleNaNUpper, 0, 1) \
279-
I(IsSmi, 1, 1) \
279+
F(IsSmi, 1, 1) \
280280
F(MaxSmi, 0, 1) \
281281
F(NumberToStringSlow, 1, 1) \
282282
F(StringParseFloat, 1, 1) \
@@ -308,9 +308,9 @@ namespace internal {
308308
F(GetProperty, -1 /* [2, 3] */, 1) \
309309
F(HasFastPackedElements, 1, 1) \
310310
F(HasInPrototypeChain, 2, 1) \
311-
I(HasProperty, 2, 1) \
311+
F(HasProperty, 2, 1) \
312312
F(InternalSetPrototype, 2, 1) \
313-
I(IsJSReceiver, 1, 1) \
313+
F(IsJSReceiver, 1, 1) \
314314
F(JSReceiverPreventExtensionsDontThrow, 1, 1) \
315315
F(JSReceiverPreventExtensionsThrow, 1, 1) \
316316
F(JSReceiverGetPrototypeOf, 1, 1) \
@@ -338,11 +338,11 @@ namespace internal {
338338
F(ShrinkNameDictionary, 1, 1) \
339339
F(ShrinkSwissNameDictionary, 1, 1) \
340340
F(ToFastProperties, 1, 1) \
341-
I(ToLength, 1, 1) \
341+
F(ToLength, 1, 1) \
342342
F(ToName, 1, 1) \
343-
I(ToNumber, 1, 1) \
343+
F(ToNumber, 1, 1) \
344344
F(ToNumeric, 1, 1) \
345-
I(ToObject, 1, 1) \
345+
F(ToObject, 1, 1) \
346346
F(ToString, 1, 1) \
347347
F(TryMigrateInstance, 1, 1) \
348348
F(SwissTableAdd, 4, 1) \
@@ -397,7 +397,7 @@ namespace internal {
397397
F(SetPropertyWithReceiver, 4, 1)
398398

399399
#define FOR_EACH_INTRINSIC_REGEXP(F, I) \
400-
I(IsRegExp, 1, 1) \
400+
F(IsRegExp, 1, 1) \
401401
F(RegExpBuildIndices, 3, 1) \
402402
F(RegExpExec, 4, 1) \
403403
F(RegExpExecTreatMatchAtEndAsFailure, 4, 1) \

test/cctest/compiler/test-run-bytecode-graph-builder.cc

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -633,27 +633,6 @@ TEST(BytecodeGraphBuilderCallRuntime) {
633633
}
634634
}
635635

636-
TEST(BytecodeGraphBuilderInvokeIntrinsic) {
637-
HandleAndZoneScope scope;
638-
Isolate* isolate = scope.main_isolate();
639-
Factory* factory = isolate->factory();
640-
641-
ExpectedSnippet<1> snippets[] = {
642-
{"function f(arg0) { return %_IsJSReceiver(arg0); }\nf()",
643-
{factory->false_value(), factory->NewNumberFromInt(1)}},
644-
{"function f(arg0) { return %_IsArray(arg0) }\nf(undefined)",
645-
{factory->true_value(), BytecodeGraphTester::NewObject("[1, 2, 3]")}},
646-
};
647-
648-
for (size_t i = 0; i < arraysize(snippets); i++) {
649-
BytecodeGraphTester tester(isolate, snippets[i].code_snippet);
650-
auto callable = tester.GetCallable<Handle<Object>>();
651-
Handle<Object> return_value =
652-
callable(snippets[i].parameter(0)).ToHandleChecked();
653-
CHECK(return_value->SameValue(*snippets[i].return_value()));
654-
}
655-
}
656-
657636
void TestBytecodeGraphBuilderGlobals(size_t shard) {
658637
HandleAndZoneScope scope;
659638
Isolate* isolate = scope.main_isolate();

0 commit comments

Comments
 (0)