aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ExecutionEngine
diff options
context:
space:
mode:
authorNicolas Geoffray <nicolas.geoffray@lip6.fr>2008-04-20 23:39:44 +0000
committerNicolas Geoffray <nicolas.geoffray@lip6.fr>2008-04-20 23:39:44 +0000
commit580631a73a71ff621c71618b16e9644b30a9d3c9 (patch)
tree155c26c3e7a344745abeb057bfd8ae5e14b67859 /lib/ExecutionEngine
parent546e36a2c17f9eb7b2b1f2f19e522673153948aa (diff)
downloadexternal_llvm-580631a73a71ff621c71618b16e9644b30a9d3c9.zip
external_llvm-580631a73a71ff621c71618b16e9644b30a9d3c9.tar.gz
external_llvm-580631a73a71ff621c71618b16e9644b30a9d3c9.tar.bz2
Be pessimistic in computing the buffer size when aligning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50008 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine')
-rw-r--r--lib/ExecutionEngine/JIT/JITDwarfEmitter.cpp3
-rw-r--r--lib/ExecutionEngine/JIT/JITEmitter.cpp15
2 files changed, 11 insertions, 7 deletions
diff --git a/lib/ExecutionEngine/JIT/JITDwarfEmitter.cpp b/lib/ExecutionEngine/JIT/JITDwarfEmitter.cpp
index b5a0737..b73b0bd 100644
--- a/lib/ExecutionEngine/JIT/JITDwarfEmitter.cpp
+++ b/lib/ExecutionEngine/JIT/JITDwarfEmitter.cpp
@@ -664,7 +664,8 @@ unsigned JITDwarfEmitter::GetDwarfTableSizeInBytes(MachineFunction& F,
/// the new value.
static unsigned RoundUpToAlign(unsigned FinalSize, unsigned Alignment) {
if (Alignment == 0) Alignment = 1;
- return (FinalSize + Alignment - 1) & ~(Alignment - 1);
+ // Since we do not know where the buffer will be allocated, be pessimistic.
+ return FinalSize + Alignment;
}
unsigned
diff --git a/lib/ExecutionEngine/JIT/JITEmitter.cpp b/lib/ExecutionEngine/JIT/JITEmitter.cpp
index 7492982..f0857c1 100644
--- a/lib/ExecutionEngine/JIT/JITEmitter.cpp
+++ b/lib/ExecutionEngine/JIT/JITEmitter.cpp
@@ -623,9 +623,10 @@ static unsigned GetJumpTableSizeInBytes(MachineJumpTableInfo *MJTI) {
return NumEntries * EntrySize;
}
-static void AddAlignment(uintptr_t& Size, unsigned Alignment) {
+static uintptr_t RoundUpToAlign(uintptr_t Size, unsigned Alignment) {
if (Alignment == 0) Alignment = 1;
- Size = (Size + Alignment - 1) & (Alignment - 1);
+ // Since we do not know where the buffer will be allocated, be pessimistic.
+ return Size + Alignment;
}
void JITEmitter::startFunction(MachineFunction &F) {
@@ -636,22 +637,24 @@ void JITEmitter::startFunction(MachineFunction &F) {
MachineConstantPool *MCP = F.getConstantPool();
// Ensure the constant pool/jump table info is at least 4-byte aligned.
- AddAlignment(ActualSize, 16);
+ ActualSize = RoundUpToAlign(ActualSize, 16);
// Add the alignment of the constant pool
- AddAlignment(ActualSize, 1 << MCP->getConstantPoolAlignment());
+ ActualSize = RoundUpToAlign(ActualSize,
+ 1 << MCP->getConstantPoolAlignment());
// Add the constant pool size
ActualSize += GetConstantPoolSizeInBytes(MCP);
// Add the aligment of the jump table info
- AddAlignment(ActualSize, MJTI->getAlignment());
+ ActualSize = RoundUpToAlign(ActualSize, MJTI->getAlignment());
// Add the jump table size
ActualSize += GetJumpTableSizeInBytes(MJTI);
// Add the alignment for the function
- AddAlignment(ActualSize, std::max(F.getFunction()->getAlignment(), 8U));
+ ActualSize = RoundUpToAlign(ActualSize,
+ std::max(F.getFunction()->getAlignment(), 8U));
// Add the function size
ActualSize += TII->GetFunctionSizeInBytes(F);