Reviewers: Weiliang,
Message:
PTAL.
Description:
X87: [turbofan] Enable tail calls for %_CallRuntime.
port 1fa4285e1ce16cfadf8c40a0993491ec4e2bbbe0 (r29436).
original commit message:
This involves:
- Enabling the tail call optimization reducer in all cases.
- Adding an addition flag to CallFunctionParameters to mark call sites
that can be tail-called enabled.
- Only set the tail-call flag for %_CallFunction.
BUG=
Please review this at https://codereview.chromium.org/1228463003/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+10, -14 lines):
M src/compiler/x87/code-generator-x87.cc
M src/compiler/x87/instruction-selector-x87.cc
Index: src/compiler/x87/code-generator-x87.cc
diff --git a/src/compiler/x87/code-generator-x87.cc
b/src/compiler/x87/code-generator-x87.cc
index
9805033edb2530900f941b25fe4ecb7fd348bd07..d337ecc9d845934a614a1167996ea0d5ce120cdd
100644
--- a/src/compiler/x87/code-generator-x87.cc
+++ b/src/compiler/x87/code-generator-x87.cc
@@ -297,13 +297,6 @@ void
CodeGenerator::AssembleDeconstructActivationRecord() {
if (descriptor->IsJSFunctionCall() || stack_slots > 0) {
__ mov(esp, ebp);
__ pop(ebp);
- int32_t bytes_to_pop =
- descriptor->IsJSFunctionCall()
- ? static_cast<int32_t>(descriptor->JSParameterCount() *
- kPointerSize)
- : 0;
- __ pop(Operand(esp, bytes_to_pop));
- __ add(esp, Immediate(bytes_to_pop));
}
}
@@ -1604,8 +1597,14 @@ void CodeGenerator::AssembleReturn() {
__ pop(ebp); // Pop caller's frame pointer.
int pop_count = descriptor->IsJSFunctionCall()
?
static_cast<int>(descriptor->JSParameterCount())
- : 0;
- __ Ret(pop_count * kPointerSize, ebx);
+ : (info()->IsStub()
+ ?
info()->code_stub()->GetStackParameterCount()
+ : 0);
+ if (pop_count == 0) {
+ __ ret(0);
+ } else {
+ __ Ret(pop_count * kPointerSize, ebx);
+ }
}
} else {
__ ret(0);
Index: src/compiler/x87/instruction-selector-x87.cc
diff --git a/src/compiler/x87/instruction-selector-x87.cc
b/src/compiler/x87/instruction-selector-x87.cc
index
bd8fc61e0bb7295542b471525ff55d3413e5e260..7dda86efdc61150eaa41cae3eebdc88f163cf166
100644
--- a/src/compiler/x87/instruction-selector-x87.cc
+++ b/src/compiler/x87/instruction-selector-x87.cc
@@ -890,16 +890,13 @@ void InstructionSelector::VisitTailCall(Node* node) {
DCHECK_EQ(0, descriptor->flags() & CallDescriptor::kNeedsNopAfterCall);
// TODO(turbofan): Relax restriction for stack parameters.
- if (descriptor->UsesOnlyRegisters() &&
- descriptor->HasSameReturnLocationsAs(
- linkage()->GetIncomingDescriptor())) {
+
+ if (linkage()->GetIncomingDescriptor()->CanTailCall(node)) {
CallBuffer buffer(zone(), descriptor, nullptr);
// Compute InstructionOperands for inputs and outputs.
InitializeCallBuffer(node, &buffer, true, true);
- DCHECK_EQ(0u, buffer.pushed_nodes.size());
-
// Select the appropriate opcode based on the call type.
InstructionCode opcode;
switch (descriptor->kind()) {
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.