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. _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits