From cea2245f04556ad718a7f18cb286b3150d5631a7 Mon Sep 17 00:00:00 2001 From: Misha Brukman Date: Fri, 13 Dec 2002 04:34:02 +0000 Subject: [PATCH] Start allocating stack space at [ebp-4] to not overwrite the return address. Also make all loads & stores 4-byte aligned for performance. ;) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4982 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/RegAllocSimple.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/CodeGen/RegAllocSimple.cpp b/lib/CodeGen/RegAllocSimple.cpp index d78a75c92e3..e5f7ddb9e98 100644 --- a/lib/CodeGen/RegAllocSimple.cpp +++ b/lib/CodeGen/RegAllocSimple.cpp @@ -50,13 +50,15 @@ namespace { RegAllocSimple(TargetMachine &tm) : TM(tm), CurrMBB(0), maxOffset(0), RegInfo(tm.getRegisterInfo()), - NumBytesAllocated(0), ByteAlignment(4) + ByteAlignment(4) { // build reverse mapping for physReg -> register class RegInfo->buildReg2RegClassMap(PhysReg2RegClassMap); RegsUsed[RegInfo->getFramePointer()] = 1; RegsUsed[RegInfo->getStackPointer()] = 1; + + cleanupAfterFunction(); } bool isAvailableReg(unsigned Reg) { @@ -80,7 +82,7 @@ namespace { void cleanupAfterFunction() { RegMap.clear(); SSA2PhysRegMap.clear(); - NumBytesAllocated = 0; + NumBytesAllocated = 4; } /// Moves value from memory into that register @@ -112,6 +114,7 @@ unsigned RegAllocSimple::allocateStackSpaceFor(unsigned VirtReg, const TargetRegisterClass *regClass) { if (RegMap.find(VirtReg) == RegMap.end()) { +#if 0 unsigned size = regClass->getDataSize(); unsigned over = NumBytesAllocated - (NumBytesAllocated % ByteAlignment); if (size >= ByteAlignment - over) { @@ -120,6 +123,10 @@ unsigned RegAllocSimple::allocateStackSpaceFor(unsigned VirtReg, } RegMap[VirtReg] = NumBytesAllocated; NumBytesAllocated += size; +#endif + // FIXME: forcing each arg to take 4 bytes on the stack + RegMap[VirtReg] = NumBytesAllocated; + NumBytesAllocated += 4; } return RegMap[VirtReg]; } -- 2.34.1