diff options
author | Vikram S. Adve <vadve@cs.uiuc.edu> | 2001-11-15 15:22:26 +0000 |
---|---|---|
committer | Vikram S. Adve <vadve@cs.uiuc.edu> | 2001-11-15 15:22:26 +0000 |
commit | fbb8a647496ce46a9b122b60ea64d39ded76ac57 (patch) | |
tree | 95df7ad36baef1dff1d37c6e11ba90293a0f5455 /llvm/lib/CodeGen/MachineInstr.cpp | |
parent | a514745a964021172e24af93a2c507e3a35ea23c (diff) | |
download | bcm5719-llvm-fbb8a647496ce46a9b122b60ea64d39ded76ac57.tar.gz bcm5719-llvm-fbb8a647496ce46a9b122b60ea64d39ded76ac57.zip |
Modify AllocateLocalVar method to take a size argument.
llvm-svn: 1318
Diffstat (limited to 'llvm/lib/CodeGen/MachineInstr.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineInstr.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp index 5993daf65a0..383bd2a32d9 100644 --- a/llvm/lib/CodeGen/MachineInstr.cpp +++ b/llvm/lib/CodeGen/MachineInstr.cpp @@ -16,6 +16,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/Target/MachineFrameInfo.h" #include "llvm/Target/MachineRegInfo.h" +#include "llvm/Target/MachineCacheInfo.h" #include "llvm/Method.h" #include "llvm/iOther.h" #include "llvm/Instruction.h" @@ -192,6 +193,24 @@ operator<<(ostream &os, const MachineOperand &mop) return os; } +// Align data larger than one L1 cache line on L1 cache line boundaries. +// Align all smaller data on the next higher 2^x boundary (4, 8, ...). +// +// THIS FUNCTION HAS BEEN COPIED FROM EMITASSEMBLY.CPP AND +// SHOULD BE USED DIRECTLY THERE +// +inline unsigned int +SizeToAlignment(unsigned int size, const TargetMachine& target) +{ + unsigned short cacheLineSize = target.getCacheInfo().getCacheLineSize(1); + if (size > (unsigned) cacheLineSize / 2) + return cacheLineSize; + else + for (unsigned sz=1; /*no condition*/; sz *= 2) + if (sz >= size) + return sz; +} + static unsigned int ComputeMaxOptionalArgsSize(const TargetMachine& target, const Method* method) { @@ -248,7 +267,8 @@ MachineCodeForMethod::MachineCodeForMethod(const Method* _M, int MachineCodeForMethod::allocateLocalVar(const TargetMachine& target, - const Value* val) + const Value* val, + unsigned int size) { // Check if we've allocated a stack slot for this value already // @@ -258,9 +278,15 @@ MachineCodeForMethod::allocateLocalVar(const TargetMachine& target, bool growUp; int firstOffset =target.getFrameInfo().getFirstAutomaticVarOffset(*this, growUp); - unsigned int size = target.findOptimalStorageSize(val->getType()); - unsigned char align = target.DataLayout.getTypeAlignment(val->getType()); + unsigned char align; + if (size == 0) + { + size = target.findOptimalStorageSize(val->getType()); + // align = target.DataLayout.getTypeAlignment(val->getType()); + } + align = SizeToAlignment(size, target); + offset = getAutomaticVarsSize(); if (! growUp) offset += size; |