Be pessimistic in computing the buffer size when aligning.
authorNicolas Geoffray <nicolas.geoffray@lip6.fr>
Sun, 20 Apr 2008 23:39:44 +0000 (23:39 +0000)
committerNicolas Geoffray <nicolas.geoffray@lip6.fr>
Sun, 20 Apr 2008 23:39:44 +0000 (23:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50008 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/JIT/JITDwarfEmitter.cpp
lib/ExecutionEngine/JIT/JITEmitter.cpp

index b5a073777345f103b5b14fab8b25422098e44470..b73b0bd76c322b89262a542eb4e554414836123c 100644 (file)
@@ -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
index 7492982cf477b65f8d20b7d6dc05067307a09b44..f0857c100efcdec81afffee7d01a2f5fc1946053 100644 (file)
@@ -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);