Skip to content

Commit a6ffe8e

Browse files
bbudgeCommit bot
authored andcommitted
Revert of [Turbofan] Change AlignSavedCalleeRegisterSlots to AlignFrame. (patchset v8#2 id:20001 of https://codereview.chromium.org/2124983004/ )
Reason for revert: Speculative revert to fix perf regression: https://bugs.chromium.org/p/chromium/issues/detail?id=627803 Original issue's description: > [Turbofan] Change AlignSavedCalleeRegisterSlots to AlignFrame. > Clean up call sites. > > LOG=N > BUG=v8:4124 > > Committed: https://crrev.com/d8d75782fb90da21b92ca3dda59cfa3088ad3912 > Cr-Commit-Position: refs/heads/master@{#37650} TBR=bmeurer@chromium.org,mtrofin@chromium.org,danno@chromium.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=v8:4124 Review-Url: https://codereview.chromium.org/2151563003 Cr-Commit-Position: refs/heads/master@{#37732}
1 parent 08fed37 commit a6ffe8e

6 files changed

Lines changed: 32 additions & 10 deletions

File tree

src/compiler/arm/code-generator-arm.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1559,7 +1559,10 @@ void CodeGenerator::FinishFrame(Frame* frame) {
15591559

15601560
const RegList saves_fp = descriptor->CalleeSavedFPRegisters();
15611561
if (saves_fp != 0) {
1562-
frame->AlignFrame();
1562+
frame->AlignSavedCalleeRegisterSlots();
1563+
}
1564+
1565+
if (saves_fp != 0) {
15631566
// Save callee-saved FP registers.
15641567
STATIC_ASSERT(DwVfpRegister::kMaxNumRegisters == 32);
15651568
uint32_t last = base::bits::CountLeadingZeros32(saves_fp) - 1;

src/compiler/frame.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,15 @@ class Frame : public ZoneObject {
9898
return !allocated_double_registers_->IsEmpty();
9999
}
100100

101+
void AlignSavedCalleeRegisterSlots(int alignment = kDoubleSize) {
102+
int alignment_slots = alignment / kPointerSize;
103+
int delta = alignment_slots - (frame_slot_count_ & (alignment_slots - 1));
104+
if (delta != alignment_slots) {
105+
frame_slot_count_ += delta;
106+
}
107+
spill_slot_count_ += delta;
108+
}
109+
101110
void AllocateSavedCalleeRegisterSlots(int count) {
102111
frame_slot_count_ += count;
103112
}

src/compiler/mips/code-generator-mips.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1822,7 +1822,10 @@ void CodeGenerator::FinishFrame(Frame* frame) {
18221822

18231823
const RegList saves_fpu = descriptor->CalleeSavedFPRegisters();
18241824
if (saves_fpu != 0) {
1825-
frame->AlignFrame();
1825+
frame->AlignSavedCalleeRegisterSlots();
1826+
}
1827+
1828+
if (saves_fpu != 0) {
18261829
int count = base::bits::CountPopulation32(saves_fpu);
18271830
DCHECK(kNumCalleeSavedFPU == count);
18281831
frame->AllocateSavedCalleeRegisterSlots(count *

src/compiler/ppc/code-generator-ppc.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1993,7 +1993,7 @@ void CodeGenerator::FinishFrame(Frame* frame) {
19931993

19941994
// Save callee-saved Double registers.
19951995
if (double_saves != 0) {
1996-
frame->AlignFrame();
1996+
frame->AlignSavedCalleeRegisterSlots();
19971997
DCHECK(kNumCalleeSavedDoubles ==
19981998
base::bits::CountPopulation32(double_saves));
19991999
frame->AllocateSavedCalleeRegisterSlots(kNumCalleeSavedDoubles *

src/compiler/s390/code-generator-s390.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2015,7 +2015,7 @@ void CodeGenerator::FinishFrame(Frame* frame) {
20152015

20162016
// Save callee-saved Double registers.
20172017
if (double_saves != 0) {
2018-
frame->AlignFrame();
2018+
frame->AlignSavedCalleeRegisterSlots();
20192019
DCHECK(kNumCalleeSavedDoubles ==
20202020
base::bits::CountPopulation32(double_saves));
20212021
frame->AllocateSavedCalleeRegisterSlots(kNumCalleeSavedDoubles *

src/compiler/x64/code-generator-x64.cc

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2124,15 +2124,22 @@ void CodeGenerator::FinishFrame(Frame* frame) {
21242124
CallDescriptor* descriptor = linkage()->GetIncomingDescriptor();
21252125

21262126
const RegList saves_fp = descriptor->CalleeSavedFPRegisters();
2127-
if (saves_fp != 0) { // Save callee-saved XMM registers.
2128-
frame->AlignFrame();
2129-
uint32_t count = base::bits::CountPopulation32(saves_fp);
2130-
frame->AllocateSavedCalleeRegisterSlots(count *
2131-
(kQuadWordSize / kPointerSize));
2127+
if (saves_fp != 0) {
2128+
frame->AlignSavedCalleeRegisterSlots();
2129+
if (saves_fp != 0) { // Save callee-saved XMM registers.
2130+
const uint32_t saves_fp_count = base::bits::CountPopulation32(saves_fp);
2131+
frame->AllocateSavedCalleeRegisterSlots(saves_fp_count *
2132+
(kQuadWordSize / kPointerSize));
2133+
}
21322134
}
21332135
const RegList saves = descriptor->CalleeSavedRegisters();
21342136
if (saves != 0) { // Save callee-saved registers.
2135-
uint32_t count = base::bits::CountPopulation32(saves);
2137+
int count = 0;
2138+
for (int i = Register::kNumRegisters - 1; i >= 0; i--) {
2139+
if (((1 << i) & saves)) {
2140+
++count;
2141+
}
2142+
}
21362143
frame->AllocateSavedCalleeRegisterSlots(count);
21372144
}
21382145
}

0 commit comments

Comments
 (0)