encode function calling convs in the bytecode file. invoke and call are

still to come.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21749 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2005-05-06 20:42:57 +00:00
parent a8e8f16714
commit 479ffebd73
2 changed files with 16 additions and 1 deletions

View File

@ -1886,6 +1886,14 @@ void BytecodeReader::ParseModuleGlobalInfo() {
if ((Flags & (1 << 4)) == 0)
FunctionSignatureList.push_back(Func);
// Look at the low bits. If there is a calling conv here, apply it,
// read it as a vbr.
Flags &= 15;
if (Flags)
Func->setCallingConv(Flags-1);
else
Func->setCallingConv(read_vbr_uint());
if (Handler) Handler->handleFunctionDeclaration(Func);
// Get the next function signature.

View File

@ -923,10 +923,17 @@ void BytecodeWriter::outputModuleInfoBlock(const Module *M) {
assert(Slot != -1 && "Module slot calculator is broken!");
assert(Slot >= Type::FirstDerivedTyID && "Derived type not in range!");
assert(((Slot << 5) >> 5) == Slot && "Slot # too big!");
unsigned ID = (Slot << 5) + 1;
unsigned ID = (Slot << 5);
if (I->getCallingConv() < 15)
ID += I->getCallingConv()+1;
if (I->isExternal()) // If external, we don't have an FunctionInfo block.
ID |= 1 << 4;
output_vbr(ID);
if (I->getCallingConv() >= 15)
output_vbr(I->getCallingConv());
}
output_vbr((unsigned)Table.getSlot(Type::VoidTy) << 5);