Changes in directory llvm/lib/Bytecode/Writer:

Writer.cpp updated: 1.169 -> 1.170
---
Log message:

Fix a bug that caused alignment information to occasionally get stripped off
of an allocation instruction when writing to bytecode.


---
Diffs of the changes:  (+11 -2)

 Writer.cpp |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)


Index: llvm/lib/Bytecode/Writer/Writer.cpp
diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.169 
llvm/lib/Bytecode/Writer/Writer.cpp:1.170
--- llvm/lib/Bytecode/Writer/Writer.cpp:1.169   Tue Feb 27 20:25:20 2007
+++ llvm/lib/Bytecode/Writer/Writer.cpp Sun Apr  8 22:37:36 2007
@@ -429,8 +429,14 @@
   output_typeid(Type);                      // Result type
 
   unsigned NumArgs = I->getNumOperands();
-  output_vbr(NumArgs + (isa<CastInst>(I)  || isa<InvokeInst>(I) || 
-                        isa<CmpInst>(I) || isa<VAArgInst>(I) || Opcode == 58));
+  bool HasExtraArg = false;
+  if (isa<CastInst>(I)  || isa<InvokeInst>(I) || 
+      isa<CmpInst>(I) || isa<VAArgInst>(I) || Opcode == 58)
+    HasExtraArg = true;
+  if (const AllocationInst *AI = dyn_cast<AllocationInst>(I))
+    HasExtraArg = AI->getAlignment() != 0;
+  
+  output_vbr(NumArgs + HasExtraArg);
 
   if (!isa<GetElementPtrInst>(&I)) {
     for (unsigned i = 0; i < NumArgs; ++i)
@@ -445,6 +451,9 @@
     } else if (Opcode == 58) {  // Call escape sequence
       output_vbr((cast<CallInst>(I)->getCallingConv() << 1) |
                  unsigned(cast<CallInst>(I)->isTailCall()));
+    } else if (const AllocationInst *AI = dyn_cast<AllocationInst>(I)) {
+      if (AI->getAlignment())
+        output_vbr((unsigned)Log2_32(AI->getAlignment())+1);
     }
   } else {
     output_vbr(Table.getSlot(I->getOperand(0)));



_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to