From e6b3b4101263fa190d5315c8cdc9ae1248efb5eb Mon Sep 17 00:00:00 2001 From: Santiago Aboy Solanes <solanes@chromium.org> Date: Wed, 11 Sep 2019 09:54:40 +0100 Subject: [PATCH] [CSA][cleanup] TNodify interpreter-intrinsics-generator Bug: v8:6949, v8:9396 Change-Id: If9fa66de4aecfe72c30ac81c563216fd5e057eb3 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1792903 Commit-Queue: Santiago Aboy Solanes <solanes@chromium.org> Reviewed-by: Mythri Alle <mythria@chromium.org> Cr-Commit-Position: refs/heads/master@{#63667} --- .../interpreter-intrinsics-generator.cc | 122 +++++++++--------- .../interpreter-intrinsics-generator.h | 2 +- 2 files changed, 63 insertions(+), 61 deletions(-) diff --git a/src/interpreter/interpreter-intrinsics-generator.cc b/src/interpreter/interpreter-intrinsics-generator.cc index c54c090d4f..96dbef77ae 100644 --- a/src/interpreter/interpreter-intrinsics-generator.cc +++ b/src/interpreter/interpreter-intrinsics-generator.cc @@ -31,8 +31,9 @@ class IntrinsicsGenerator { zone_(assembler->zone()), assembler_(assembler) {} - Node* InvokeIntrinsic(TNode<Uint32T> function_id, TNode<Context> context, - const InterpreterAssembler::RegListNodePair& args); + TNode<Object> InvokeIntrinsic( + TNode<Uint32T> function_id, TNode<Context> context, + const InterpreterAssembler::RegListNodePair& args); private: enum InstanceTypeCompareMode { @@ -40,18 +41,20 @@ class IntrinsicsGenerator { kInstanceTypeGreaterThanOrEqual }; - Node* IsInstanceType(Node* input, int type); - Node* CompareInstanceType(Node* map, int type, InstanceTypeCompareMode mode); - Node* IntrinsicAsStubCall(const InterpreterAssembler::RegListNodePair& args, - TNode<Context> context, Callable const& callable); - Node* IntrinsicAsBuiltinCall( + TNode<Oddball> IsInstanceType(TNode<Object> input, int type); + TNode<BoolT> CompareInstanceType(TNode<HeapObject> map, int type, + InstanceTypeCompareMode mode); + TNode<Object> IntrinsicAsStubCall( + const InterpreterAssembler::RegListNodePair& args, TNode<Context> context, + Callable const& callable); + TNode<Object> IntrinsicAsBuiltinCall( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context, Builtins::Name name); void AbortIfArgCountMismatch(int expected, compiler::TNode<Word32T> actual); -#define DECLARE_INTRINSIC_HELPER(name, lower_case, count) \ - Node* name(const InterpreterAssembler::RegListNodePair& args, \ - TNode<Context> context); +#define DECLARE_INTRINSIC_HELPER(name, lower_case, count) \ + TNode<Object> name(const InterpreterAssembler::RegListNodePair& args, \ + TNode<Context> context); INTRINSICS_LIST(DECLARE_INTRINSIC_HELPER) #undef DECLARE_INTRINSIC_HELPER @@ -66,7 +69,7 @@ class IntrinsicsGenerator { DISALLOW_COPY_AND_ASSIGN(IntrinsicsGenerator); }; -Node* GenerateInvokeIntrinsic( +TNode<Object> GenerateInvokeIntrinsic( InterpreterAssembler* assembler, TNode<Uint32T> function_id, TNode<Context> context, const InterpreterAssembler::RegListNodePair& args) { IntrinsicsGenerator generator(assembler); @@ -75,12 +78,11 @@ Node* GenerateInvokeIntrinsic( #define __ assembler_-> -Node* IntrinsicsGenerator::InvokeIntrinsic( +TNode<Object> IntrinsicsGenerator::InvokeIntrinsic( TNode<Uint32T> function_id, TNode<Context> context, const InterpreterAssembler::RegListNodePair& args) { InterpreterAssembler::Label abort(assembler_), end(assembler_); - InterpreterAssembler::Variable result(assembler_, - MachineRepresentation::kTagged); + InterpreterAssembler::TVariable<Object> result(assembler_); #define MAKE_LABEL(name, lower_case, count) \ InterpreterAssembler::Label lower_case(assembler_); @@ -103,9 +105,9 @@ Node* IntrinsicsGenerator::InvokeIntrinsic( if (FLAG_debug_code && expected_arg_count >= 0) { \ AbortIfArgCountMismatch(expected_arg_count, args.reg_count()); \ } \ - Node* value = name(args, context); \ + TNode<Object> value = name(args, context); \ if (value) { \ - result.Bind(value); \ + result = value; \ __ Goto(&end); \ } \ } @@ -115,7 +117,7 @@ Node* IntrinsicsGenerator::InvokeIntrinsic( __ BIND(&abort); { __ Abort(AbortReason::kUnexpectedFunctionIDForInvokeIntrinsic); - result.Bind(__ UndefinedConstant()); + result = __ UndefinedConstant(); __ Goto(&end); } @@ -123,8 +125,8 @@ Node* IntrinsicsGenerator::InvokeIntrinsic( return result.value(); } -Node* IntrinsicsGenerator::CompareInstanceType(Node* object, int type, - InstanceTypeCompareMode mode) { +TNode<BoolT> IntrinsicsGenerator::CompareInstanceType( + TNode<HeapObject> object, int type, InstanceTypeCompareMode mode) { TNode<Uint16T> instance_type = __ LoadInstanceType(object); if (mode == kInstanceTypeEqual) { @@ -135,17 +137,18 @@ Node* IntrinsicsGenerator::CompareInstanceType(Node* object, int type, } } -Node* IntrinsicsGenerator::IsInstanceType(Node* input, int type) { +TNode<Oddball> IntrinsicsGenerator::IsInstanceType(TNode<Object> input, + int type) { TNode<Oddball> result = __ Select<Oddball>( __ TaggedIsSmi(input), [=] { return __ FalseConstant(); }, [=] { return __ SelectBooleanConstant( - CompareInstanceType(input, type, kInstanceTypeEqual)); + CompareInstanceType(__ CAST(input), type, kInstanceTypeEqual)); }); return result; } -Node* IntrinsicsGenerator::IsJSReceiver( +TNode<Object> IntrinsicsGenerator::IsJSReceiver( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { TNode<Object> input = __ LoadRegisterFromRegisterList(args, 0); TNode<Oddball> result = __ Select<Oddball>( @@ -156,19 +159,19 @@ Node* IntrinsicsGenerator::IsJSReceiver( return result; } -Node* IntrinsicsGenerator::IsArray( +TNode<Object> IntrinsicsGenerator::IsArray( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { TNode<Object> input = __ LoadRegisterFromRegisterList(args, 0); return IsInstanceType(input, JS_ARRAY_TYPE); } -Node* IntrinsicsGenerator::IsSmi( +TNode<Object> IntrinsicsGenerator::IsSmi( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { TNode<Object> input = __ LoadRegisterFromRegisterList(args, 0); return __ SelectBooleanConstant(__ TaggedIsSmi(input)); } -Node* IntrinsicsGenerator::IntrinsicAsStubCall( +TNode<Object> IntrinsicsGenerator::IntrinsicAsStubCall( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context, Callable const& callable) { int param_count = callable.descriptor().GetParameterCount(); @@ -180,56 +183,57 @@ Node* IntrinsicsGenerator::IntrinsicAsStubCall( stub_args[index++] = __ LoadRegisterFromRegisterList(args, i); } stub_args[index++] = context; - return __ CallStubN(StubCallMode::kCallCodeObject, callable.descriptor(), 1, - input_count, stub_args); + return __ CAST(__ CallStubN(StubCallMode::kCallCodeObject, + callable.descriptor(), 1, input_count, + stub_args)); } -Node* IntrinsicsGenerator::IntrinsicAsBuiltinCall( +TNode<Object> IntrinsicsGenerator::IntrinsicAsBuiltinCall( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context, Builtins::Name name) { Callable callable = Builtins::CallableFor(isolate_, name); return IntrinsicAsStubCall(args, context, callable); } -Node* IntrinsicsGenerator::CopyDataProperties( +TNode<Object> IntrinsicsGenerator::CopyDataProperties( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsStubCall( args, context, Builtins::CallableFor(isolate(), Builtins::kCopyDataProperties)); } -Node* IntrinsicsGenerator::CreateIterResultObject( +TNode<Object> IntrinsicsGenerator::CreateIterResultObject( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsStubCall( args, context, Builtins::CallableFor(isolate(), Builtins::kCreateIterResultObject)); } -Node* IntrinsicsGenerator::HasProperty( +TNode<Object> IntrinsicsGenerator::HasProperty( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsStubCall( args, context, Builtins::CallableFor(isolate(), Builtins::kHasProperty)); } -Node* IntrinsicsGenerator::ToStringRT( +TNode<Object> IntrinsicsGenerator::ToStringRT( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsStubCall( args, context, Builtins::CallableFor(isolate(), Builtins::kToString)); } -Node* IntrinsicsGenerator::ToLength( +TNode<Object> IntrinsicsGenerator::ToLength( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsStubCall( args, context, Builtins::CallableFor(isolate(), Builtins::kToLength)); } -Node* IntrinsicsGenerator::ToObject( +TNode<Object> IntrinsicsGenerator::ToObject( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsStubCall( args, context, Builtins::CallableFor(isolate(), Builtins::kToObject)); } -Node* IntrinsicsGenerator::Call( +TNode<Object> IntrinsicsGenerator::Call( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { // First argument register contains the function target. TNode<Object> function = __ LoadRegisterFromRegisterList(args, 0); @@ -252,16 +256,15 @@ Node* IntrinsicsGenerator::Call( __ CallJSAndDispatch(function, context, target_args, ConvertReceiverMode::kAny); - return nullptr; // We never return from the CallJSAndDispatch above. + return TNode<Object>(); // We never return from the CallJSAndDispatch above. } -Node* IntrinsicsGenerator::CreateAsyncFromSyncIterator( +TNode<Object> IntrinsicsGenerator::CreateAsyncFromSyncIterator( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { InterpreterAssembler::Label not_receiver( assembler_, InterpreterAssembler::Label::kDeferred); InterpreterAssembler::Label done(assembler_); - InterpreterAssembler::Variable return_value(assembler_, - MachineRepresentation::kTagged); + InterpreterAssembler::TVariable<Object> return_value(assembler_); TNode<Object> sync_iterator = __ LoadRegisterFromRegisterList(args, 0); @@ -281,13 +284,13 @@ Node* IntrinsicsGenerator::CreateAsyncFromSyncIterator( __ StoreObjectFieldNoWriteBarrier(iterator, JSAsyncFromSyncIterator::kNextOffset, next); - return_value.Bind(iterator); + return_value = iterator; __ Goto(&done); __ BIND(¬_receiver); { - return_value.Bind( - __ CallRuntime(Runtime::kThrowSymbolIteratorInvalid, context)); + return_value = + __ CallRuntime(Runtime::kThrowSymbolIteratorInvalid, context); // Unreachable due to the Throw in runtime call. __ Goto(&done); @@ -297,13 +300,13 @@ Node* IntrinsicsGenerator::CreateAsyncFromSyncIterator( return return_value.value(); } -Node* IntrinsicsGenerator::CreateJSGeneratorObject( +TNode<Object> IntrinsicsGenerator::CreateJSGeneratorObject( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kCreateGeneratorObject); } -Node* IntrinsicsGenerator::GeneratorGetResumeMode( +TNode<Object> IntrinsicsGenerator::GeneratorGetResumeMode( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { TNode<JSGeneratorObject> generator = __ CAST(__ LoadRegisterFromRegisterList(args, 0)); @@ -313,7 +316,7 @@ Node* IntrinsicsGenerator::GeneratorGetResumeMode( return value; } -Node* IntrinsicsGenerator::GeneratorClose( +TNode<Object> IntrinsicsGenerator::GeneratorClose( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { TNode<JSGeneratorObject> generator = __ CAST(__ LoadRegisterFromRegisterList(args, 0)); @@ -323,7 +326,7 @@ Node* IntrinsicsGenerator::GeneratorClose( return __ UndefinedConstant(); } -Node* IntrinsicsGenerator::GetImportMetaObject( +TNode<Object> IntrinsicsGenerator::GetImportMetaObject( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { TNode<Context> const module_context = __ LoadModuleContext(context); TNode<HeapObject> const module = @@ -331,71 +334,70 @@ Node* IntrinsicsGenerator::GetImportMetaObject( TNode<Object> const import_meta = __ LoadObjectField(module, SourceTextModule::kImportMetaOffset); - InterpreterAssembler::Variable return_value(assembler_, - MachineRepresentation::kTagged); - return_value.Bind(import_meta); + InterpreterAssembler::TVariable<Object> return_value(assembler_); + return_value = import_meta; InterpreterAssembler::Label end(assembler_); __ GotoIfNot(__ IsTheHole(import_meta), &end); - return_value.Bind(__ CallRuntime(Runtime::kGetImportMetaObject, context)); + return_value = __ CallRuntime(Runtime::kGetImportMetaObject, context); __ Goto(&end); __ BIND(&end); return return_value.value(); } -Node* IntrinsicsGenerator::AsyncFunctionAwaitCaught( +TNode<Object> IntrinsicsGenerator::AsyncFunctionAwaitCaught( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kAsyncFunctionAwaitCaught); } -Node* IntrinsicsGenerator::AsyncFunctionAwaitUncaught( +TNode<Object> IntrinsicsGenerator::AsyncFunctionAwaitUncaught( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kAsyncFunctionAwaitUncaught); } -Node* IntrinsicsGenerator::AsyncFunctionEnter( +TNode<Object> IntrinsicsGenerator::AsyncFunctionEnter( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kAsyncFunctionEnter); } -Node* IntrinsicsGenerator::AsyncFunctionReject( +TNode<Object> IntrinsicsGenerator::AsyncFunctionReject( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kAsyncFunctionReject); } -Node* IntrinsicsGenerator::AsyncFunctionResolve( +TNode<Object> IntrinsicsGenerator::AsyncFunctionResolve( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kAsyncFunctionResolve); } -Node* IntrinsicsGenerator::AsyncGeneratorAwaitCaught( +TNode<Object> IntrinsicsGenerator::AsyncGeneratorAwaitCaught( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kAsyncGeneratorAwaitCaught); } -Node* IntrinsicsGenerator::AsyncGeneratorAwaitUncaught( +TNode<Object> IntrinsicsGenerator::AsyncGeneratorAwaitUncaught( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kAsyncGeneratorAwaitUncaught); } -Node* IntrinsicsGenerator::AsyncGeneratorReject( +TNode<Object> IntrinsicsGenerator::AsyncGeneratorReject( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kAsyncGeneratorReject); } -Node* IntrinsicsGenerator::AsyncGeneratorResolve( +TNode<Object> IntrinsicsGenerator::AsyncGeneratorResolve( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kAsyncGeneratorResolve); } -Node* IntrinsicsGenerator::AsyncGeneratorYield( +TNode<Object> IntrinsicsGenerator::AsyncGeneratorYield( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context) { return IntrinsicAsBuiltinCall(args, context, Builtins::kAsyncGeneratorYield); } diff --git a/src/interpreter/interpreter-intrinsics-generator.h b/src/interpreter/interpreter-intrinsics-generator.h index 22e501e230..0944a611c4 100644 --- a/src/interpreter/interpreter-intrinsics-generator.h +++ b/src/interpreter/interpreter-intrinsics-generator.h @@ -16,7 +16,7 @@ class Node; namespace interpreter { -extern compiler::Node* GenerateInvokeIntrinsic( +extern compiler::TNode<Object> GenerateInvokeIntrinsic( InterpreterAssembler* assembler, compiler::TNode<Uint32T> function_id, compiler::TNode<Context> context, const InterpreterAssembler::RegListNodePair& args);