[llvm-commits] CVS: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp

Chris Lattner sabre at nondot.org
Mon May 7 22:38:25 PDT 2007



Changes in directory llvm/lib/Bitcode/Writer:

BitcodeWriter.cpp updated: 1.51 -> 1.52
---
Log message:

Make a preemptive bitcode format change to support PR1146: http://llvm.org/PR1146 .  This lets us do
pr1146: http://llvm.org/PR1146  in llvm 2.1 without ugly code to emulate old behavior.  This should
be merged into the 2.0 release branch.


---
Diffs of the changes:  (+23 -4)

 BitcodeWriter.cpp |   27 +++++++++++++++++++++++----
 1 files changed, 23 insertions(+), 4 deletions(-)


Index: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
diff -u llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.51 llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.52
--- llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.51	Sun May  6 14:19:23 2007
+++ llvm/lib/Bitcode/Writer/BitcodeWriter.cpp	Tue May  8 00:38:01 2007
@@ -386,6 +386,12 @@
     Vals.push_back(F->getCallingConv());
     Vals.push_back(F->isDeclaration());
     Vals.push_back(getEncodedLinkage(F));
+    
+    // Note: we emit the param attr ID number for the function type of this
+    // function.  In the future, we intend for attrs to be properties of
+    // functions, instead of on the type.  This is to support this future work.
+    Vals.push_back(VE.getParamAttrID(F->getFunctionType()->getParamAttrs()));
+    
     Vals.push_back(Log2_32(F->getAlignment())+1);
     Vals.push_back(F->hasSection() ? SectionMap[F->getSection()] : 0);
     Vals.push_back(getEncodedVisibility(F));
@@ -736,15 +742,21 @@
       Vals.push_back(VE.getValueID(I.getOperand(i)));
     break;
   case Instruction::Invoke: {
+    const PointerType *PTy = cast<PointerType>(I.getOperand(0)->getType());
+    const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
     Code = bitc::FUNC_CODE_INST_INVOKE;
+    
+    // Note: we emit the param attr ID number for the function type of this
+    // function.  In the future, we intend for attrs to be properties of
+    // functions, instead of on the type.  This is to support this future work.
+    Vals.push_back(VE.getParamAttrID(FTy->getParamAttrs()));
+    
     Vals.push_back(cast<InvokeInst>(I).getCallingConv());
     Vals.push_back(VE.getValueID(I.getOperand(1)));      // normal dest
     Vals.push_back(VE.getValueID(I.getOperand(2)));      // unwind dest
     PushValueAndType(I.getOperand(0), InstID, Vals, VE); // callee
     
     // Emit value #'s for the fixed parameters.
-    const PointerType *PTy = cast<PointerType>(I.getOperand(0)->getType());
-    const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
     for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
       Vals.push_back(VE.getValueID(I.getOperand(i+3)));  // fixed param.
 
@@ -806,14 +818,21 @@
     Vals.push_back(cast<StoreInst>(I).isVolatile());
     break;
   case Instruction::Call: {
+    const PointerType *PTy = cast<PointerType>(I.getOperand(0)->getType());
+    const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
+
     Code = bitc::FUNC_CODE_INST_CALL;
+    
+    // Note: we emit the param attr ID number for the function type of this
+    // function.  In the future, we intend for attrs to be properties of
+    // functions, instead of on the type.  This is to support this future work.
+    Vals.push_back(VE.getParamAttrID(FTy->getParamAttrs()));
+    
     Vals.push_back((cast<CallInst>(I).getCallingConv() << 1) |
                    unsigned(cast<CallInst>(I).isTailCall()));
     PushValueAndType(I.getOperand(0), InstID, Vals, VE);  // Callee
     
     // Emit value #'s for the fixed parameters.
-    const PointerType *PTy = cast<PointerType>(I.getOperand(0)->getType());
-    const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
     for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
       Vals.push_back(VE.getValueID(I.getOperand(i+1)));  // fixed param.
       






More information about the llvm-commits mailing list