Commit 7f25263c authored by Jakob Gruber's avatar Jakob Gruber Committed by Commit Bot

[csa] Remove unused ReceiverMode for CodeStubArguments

... and other unused methods.

Bug: v8:9708
Change-Id: Ie3658878024fcddcd5503c6462e5ad873eba19b0
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2206733
Commit-Queue: Igor Sheludko <ishell@chromium.org>
Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
Auto-Submit: Jakob Gruber <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/master@{#67859}
parent 9282c907
...@@ -12513,10 +12513,8 @@ TNode<UintPtrT> CodeStubAssembler::LoadJSTypedArrayLength( ...@@ -12513,10 +12513,8 @@ TNode<UintPtrT> CodeStubAssembler::LoadJSTypedArrayLength(
} }
CodeStubArguments::CodeStubArguments(CodeStubAssembler* assembler, CodeStubArguments::CodeStubArguments(CodeStubAssembler* assembler,
TNode<IntPtrT> argc, TNode<RawPtrT> fp, TNode<IntPtrT> argc, TNode<RawPtrT> fp)
ReceiverMode receiver_mode)
: assembler_(assembler), : assembler_(assembler),
receiver_mode_(receiver_mode),
argc_(argc), argc_(argc),
base_(), base_(),
fp_(fp != nullptr ? fp : assembler_->LoadFramePointer()) { fp_(fp != nullptr ? fp : assembler_->LoadFramePointer()) {
...@@ -12536,7 +12534,6 @@ CodeStubArguments::CodeStubArguments(CodeStubAssembler* assembler, ...@@ -12536,7 +12534,6 @@ CodeStubArguments::CodeStubArguments(CodeStubAssembler* assembler,
} }
TNode<Object> CodeStubArguments::GetReceiver() const { TNode<Object> CodeStubArguments::GetReceiver() const {
DCHECK_EQ(receiver_mode_, ReceiverMode::kHasReceiver);
#ifdef V8_REVERSE_JSARGS #ifdef V8_REVERSE_JSARGS
intptr_t offset = -kSystemPointerSize; intptr_t offset = -kSystemPointerSize;
#else #else
...@@ -12546,7 +12543,6 @@ TNode<Object> CodeStubArguments::GetReceiver() const { ...@@ -12546,7 +12543,6 @@ TNode<Object> CodeStubArguments::GetReceiver() const {
} }
void CodeStubArguments::SetReceiver(TNode<Object> object) const { void CodeStubArguments::SetReceiver(TNode<Object> object) const {
DCHECK_EQ(receiver_mode_, ReceiverMode::kHasReceiver);
#ifdef V8_REVERSE_JSARGS #ifdef V8_REVERSE_JSARGS
intptr_t offset = -kSystemPointerSize; intptr_t offset = -kSystemPointerSize;
#else #else
...@@ -12579,26 +12575,6 @@ TNode<Object> CodeStubArguments::AtIndex(int index) const { ...@@ -12579,26 +12575,6 @@ TNode<Object> CodeStubArguments::AtIndex(int index) const {
return AtIndex(assembler_->IntPtrConstant(index)); return AtIndex(assembler_->IntPtrConstant(index));
} }
TNode<Object> CodeStubArguments::GetOptionalArgumentValue(
int index, TNode<Object> default_value) {
CodeStubAssembler::TVariable<Object> result(assembler_);
CodeStubAssembler::Label argument_missing(assembler_),
argument_done(assembler_, &result);
assembler_->GotoIf(assembler_->UintPtrGreaterThanOrEqual(
assembler_->IntPtrConstant(index), argc_),
&argument_missing);
result = AtIndex(index);
assembler_->Goto(&argument_done);
assembler_->BIND(&argument_missing);
result = default_value;
assembler_->Goto(&argument_done);
assembler_->BIND(&argument_done);
return result.value();
}
TNode<Object> CodeStubArguments::GetOptionalArgumentValue( TNode<Object> CodeStubArguments::GetOptionalArgumentValue(
TNode<IntPtrT> index, TNode<Object> default_value) { TNode<IntPtrT> index, TNode<Object> default_value) {
CodeStubAssembler::TVariable<Object> result(assembler_); CodeStubAssembler::TVariable<Object> result(assembler_);
...@@ -12646,13 +12622,8 @@ void CodeStubArguments::ForEach( ...@@ -12646,13 +12622,8 @@ void CodeStubArguments::ForEach(
} }
void CodeStubArguments::PopAndReturn(TNode<Object> value) { void CodeStubArguments::PopAndReturn(TNode<Object> value) {
TNode<IntPtrT> pop_count; TNode<IntPtrT> pop_count =
if (receiver_mode_ == ReceiverMode::kHasReceiver) { assembler_->IntPtrAdd(argc_, assembler_->IntPtrConstant(1));
pop_count = assembler_->IntPtrAdd(argc_, assembler_->IntPtrConstant(1));
} else {
pop_count = argc_;
}
assembler_->PopAndReturn(pop_count, value); assembler_->PopAndReturn(pop_count, value);
} }
......
...@@ -4029,49 +4029,24 @@ class V8_EXPORT_PRIVATE CodeStubAssembler ...@@ -4029,49 +4029,24 @@ class V8_EXPORT_PRIVATE CodeStubAssembler
ParameterMode parameter_mode = INTPTR_PARAMETERS); ParameterMode parameter_mode = INTPTR_PARAMETERS);
}; };
// template <typename TIndex>
class V8_EXPORT_PRIVATE CodeStubArguments { class V8_EXPORT_PRIVATE CodeStubArguments {
public: public:
using Node = compiler::Node; using Node = compiler::Node;
enum ReceiverMode { kHasReceiver, kNoReceiver };
// |argc| specifies the number of arguments passed to the builtin excluding // |argc| specifies the number of arguments passed to the builtin excluding
// the receiver. The arguments will include a receiver iff |receiver_mode| // the receiver. The arguments include the receiver.
// is kHasReceiver. CodeStubArguments(CodeStubAssembler* assembler, TNode<IntPtrT> argc)
: CodeStubArguments(assembler, argc, TNode<RawPtrT>()) {}
CodeStubArguments(CodeStubAssembler* assembler, TNode<Int32T> argc)
: CodeStubArguments(assembler, assembler->ChangeInt32ToIntPtr(argc)) {}
CodeStubArguments(CodeStubAssembler* assembler, TNode<IntPtrT> argc, CodeStubArguments(CodeStubAssembler* assembler, TNode<IntPtrT> argc,
ReceiverMode receiver_mode = ReceiverMode::kHasReceiver) TNode<RawPtrT> fp);
: CodeStubArguments(assembler, argc, TNode<RawPtrT>(), receiver_mode) {}
CodeStubArguments(CodeStubAssembler* assembler, TNode<Int32T> argc,
ReceiverMode receiver_mode = ReceiverMode::kHasReceiver)
: CodeStubArguments(assembler, assembler->ChangeInt32ToIntPtr(argc),
TNode<RawPtrT>(), receiver_mode) {}
// TODO(v8:9708): Consider removing this variant
CodeStubArguments(CodeStubAssembler* assembler, TNode<Smi> argc,
ReceiverMode receiver_mode = ReceiverMode::kHasReceiver)
: CodeStubArguments(assembler, assembler->ParameterToIntPtr(argc),
TNode<RawPtrT>(), receiver_mode) {}
// |argc| specifies the number of arguments passed to the builtin excluding
// the receiver. The arguments will include a receiver iff |receiver_mode|
// is kHasReceiver.
CodeStubArguments(CodeStubAssembler* assembler, TNode<IntPtrT> argc,
TNode<RawPtrT> fp,
ReceiverMode receiver_mode = ReceiverMode::kHasReceiver);
CodeStubArguments(CodeStubAssembler* assembler, TNode<Smi> argc,
TNode<RawPtrT> fp,
ReceiverMode receiver_mode = ReceiverMode::kHasReceiver)
: CodeStubArguments(assembler, assembler->ParameterToIntPtr(argc), fp,
receiver_mode) {}
// Used by Torque to construct arguments based on a Torque-defined // Used by Torque to construct arguments based on a Torque-defined
// struct of values. // struct of values.
CodeStubArguments(CodeStubAssembler* assembler, CodeStubArguments(CodeStubAssembler* assembler,
TorqueStructArguments torque_arguments) TorqueStructArguments torque_arguments)
: assembler_(assembler), : assembler_(assembler),
receiver_mode_(ReceiverMode::kHasReceiver),
argc_(torque_arguments.length), argc_(torque_arguments.length),
base_(torque_arguments.base), base_(torque_arguments.base),
fp_(torque_arguments.frame) {} fp_(torque_arguments.frame) {}
...@@ -4084,68 +4059,41 @@ class V8_EXPORT_PRIVATE CodeStubArguments { ...@@ -4084,68 +4059,41 @@ class V8_EXPORT_PRIVATE CodeStubArguments {
// Computes address of the index'th argument. // Computes address of the index'th argument.
TNode<RawPtrT> AtIndexPtr(TNode<IntPtrT> index) const; TNode<RawPtrT> AtIndexPtr(TNode<IntPtrT> index) const;
TNode<RawPtrT> AtIndexPtr(TNode<Smi> index) const {
return AtIndexPtr(assembler_->ParameterToIntPtr(index));
}
// |index| is zero-based and does not include the receiver // |index| is zero-based and does not include the receiver
TNode<Object> AtIndex(TNode<IntPtrT> index) const; TNode<Object> AtIndex(TNode<IntPtrT> index) const;
// TODO(v8:9708): Consider removing this variant
TNode<Object> AtIndex(TNode<Smi> index) const {
return AtIndex(assembler_->ParameterToIntPtr(index));
}
TNode<Object> AtIndex(int index) const; TNode<Object> AtIndex(int index) const;
TNode<Object> GetOptionalArgumentValue(int index) {
return GetOptionalArgumentValue(index, assembler_->UndefinedConstant());
}
TNode<Object> GetOptionalArgumentValue(int index,
TNode<Object> default_value);
TNode<IntPtrT> GetLength() const { return argc_; } TNode<IntPtrT> GetLength() const { return argc_; }
TorqueStructArguments GetTorqueArguments() const { TorqueStructArguments GetTorqueArguments() const {
return TorqueStructArguments{fp_, base_, argc_}; return TorqueStructArguments{fp_, base_, argc_};
} }
TNode<Object> GetOptionalArgumentValue(TNode<IntPtrT> index,
TNode<Object> default_value);
TNode<Object> GetOptionalArgumentValue(TNode<IntPtrT> index) { TNode<Object> GetOptionalArgumentValue(TNode<IntPtrT> index) {
return GetOptionalArgumentValue(index, assembler_->UndefinedConstant()); return GetOptionalArgumentValue(index, assembler_->UndefinedConstant());
} }
TNode<Object> GetOptionalArgumentValue(TNode<IntPtrT> index, TNode<Object> GetOptionalArgumentValue(int index) {
TNode<Object> default_value); return GetOptionalArgumentValue(assembler_->IntPtrConstant(index));
}
using ForEachBodyFunction = std::function<void(TNode<Object> arg)>;
// Iteration doesn't include the receiver. |first| and |last| are zero-based. // Iteration doesn't include the receiver. |first| and |last| are zero-based.
template <typename TIndex> using ForEachBodyFunction = std::function<void(TNode<Object> arg)>;
void ForEach(const ForEachBodyFunction& body, TNode<TIndex> first = {}, void ForEach(const ForEachBodyFunction& body, TNode<IntPtrT> first = {},
TNode<TIndex> last = {}) const { TNode<IntPtrT> last = {}) const {
CodeStubAssembler::VariableList list(0, assembler_->zone()); CodeStubAssembler::VariableList list(0, assembler_->zone());
ForEach(list, body, first, last); ForEach(list, body, first, last);
} }
// Iteration doesn't include the receiver. |first| and |last| are zero-based.
void ForEach(const CodeStubAssembler::VariableList& vars, void ForEach(const CodeStubAssembler::VariableList& vars,
const ForEachBodyFunction& body, TNode<IntPtrT> first = {}, const ForEachBodyFunction& body, TNode<IntPtrT> first = {},
TNode<IntPtrT> last = {}) const; TNode<IntPtrT> last = {}) const;
void ForEach(const CodeStubAssembler::VariableList& vars,
const ForEachBodyFunction& body, TNode<Smi> first,
TNode<Smi> last = {}) const {
TNode<IntPtrT> first_intptr = assembler_->ParameterToIntPtr(first);
TNode<IntPtrT> last_intptr;
if (last != nullptr) {
last_intptr = assembler_->ParameterToIntPtr(last);
}
return ForEach(vars, body, first_intptr, last_intptr);
}
void PopAndReturn(TNode<Object> value); void PopAndReturn(TNode<Object> value);
private: private:
CodeStubAssembler* assembler_; CodeStubAssembler* assembler_;
ReceiverMode receiver_mode_;
TNode<IntPtrT> argc_; TNode<IntPtrT> argc_;
TNode<RawPtrT> base_; TNode<RawPtrT> base_;
TNode<RawPtrT> fp_; TNode<RawPtrT> fp_;
......
...@@ -2155,79 +2155,6 @@ TEST(Arguments) { ...@@ -2155,79 +2155,6 @@ TEST(Arguments) {
CHECK_EQ(*isolate->factory()->undefined_value(), *result); CHECK_EQ(*isolate->factory()->undefined_value(), *result);
} }
TEST(ArgumentsWithSmiConstantIndices) {
Isolate* isolate(CcTest::InitIsolateOnce());
const int kNumParams = 4;
CodeAssemblerTester asm_tester(isolate, kNumParams);
CodeStubAssembler m(asm_tester.state());
CodeStubArguments arguments(&m, m.SmiConstant(3));
CSA_ASSERT(&m, m.TaggedEqual(arguments.AtIndex(m.SmiConstant(0)),
m.SmiConstant(12)));
CSA_ASSERT(&m, m.TaggedEqual(arguments.AtIndex(m.SmiConstant(1)),
m.SmiConstant(13)));
CSA_ASSERT(&m, m.TaggedEqual(arguments.AtIndex(m.SmiConstant(2)),
m.SmiConstant(14)));
arguments.PopAndReturn(arguments.GetReceiver());
FunctionTester ft(asm_tester.GenerateCode(), kNumParams);
Handle<Object> result = ft.Call(isolate->factory()->undefined_value(),
Handle<Smi>(Smi::FromInt(12), isolate),
Handle<Smi>(Smi::FromInt(13), isolate),
Handle<Smi>(Smi::FromInt(14), isolate))
.ToHandleChecked();
CHECK_EQ(*isolate->factory()->undefined_value(), *result);
}
TNode<Smi> NonConstantSmi(CodeStubAssembler* m, int value) {
// Generate a SMI with the given value and feed it through a Phi so it can't
// be inferred to be constant.
Variable var(m, MachineRepresentation::kTagged, m->SmiConstant(value));
Label dummy_done(m);
// Even though the Goto always executes, it will taint the variable and thus
// make it appear non-constant when used later.
m->GotoIf(m->Int32Constant(1), &dummy_done);
var.Bind(m->SmiConstant(value));
m->Goto(&dummy_done);
m->BIND(&dummy_done);
// Ensure that the above hackery actually created a non-constant SMI.
Smi smi_constant;
CHECK(!m->ToSmiConstant(var.value(), &smi_constant));
return m->UncheckedCast<Smi>(var.value());
}
TEST(ArgumentsWithSmiIndices) {
Isolate* isolate(CcTest::InitIsolateOnce());
const int kNumParams = 4;
CodeAssemblerTester asm_tester(isolate, kNumParams);
CodeStubAssembler m(asm_tester.state());
CodeStubArguments arguments(&m, m.SmiConstant(3));
CSA_ASSERT(&m, m.TaggedEqual(arguments.AtIndex(NonConstantSmi(&m, 0)),
m.SmiConstant(12)));
CSA_ASSERT(&m, m.TaggedEqual(arguments.AtIndex(NonConstantSmi(&m, 1)),
m.SmiConstant(13)));
CSA_ASSERT(&m, m.TaggedEqual(arguments.AtIndex(NonConstantSmi(&m, 2)),
m.SmiConstant(14)));
arguments.PopAndReturn(arguments.GetReceiver());
FunctionTester ft(asm_tester.GenerateCode(), kNumParams);
Handle<Object> result = ft.Call(isolate->factory()->undefined_value(),
Handle<Smi>(Smi::FromInt(12), isolate),
Handle<Smi>(Smi::FromInt(13), isolate),
Handle<Smi>(Smi::FromInt(14), isolate))
.ToHandleChecked();
CHECK_EQ(*isolate->factory()->undefined_value(), *result);
}
TEST(ArgumentsForEach) { TEST(ArgumentsForEach) {
Isolate* isolate(CcTest::InitIsolateOnce()); Isolate* isolate(CcTest::InitIsolateOnce());
......
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