Changes in directory llvm/lib/Bytecode/Writer:
Writer.cpp updated: 1.146 -> 1.147 --- Log message: * PIC codegen for X86/Linux has been implemented * PIC-aware internal structures in X86 Codegen have been refactored * Visibility (default/weak) has been added * Docs fixes (external weak linkage, visibility, formatting) --- Diffs of the changes: (+17 -5) Writer.cpp | 22 +++++++++++++++++----- 1 files changed, 17 insertions(+), 5 deletions(-) Index: llvm/lib/Bytecode/Writer/Writer.cpp diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.146 llvm/lib/Bytecode/Writer/Writer.cpp:1.147 --- llvm/lib/Bytecode/Writer/Writer.cpp:1.146 Fri Jan 12 01:05:13 2007 +++ llvm/lib/Bytecode/Writer/Writer.cpp Fri Jan 12 13:20:46 2007 @@ -960,6 +960,14 @@ } } +static unsigned getEncodedVisibility(const GlobalValue *GV) { + switch (GV->getVisibility()) { + default: assert(0 && "Invalid visibility!"); + case GlobalValue::DefaultVisibility: return 0; + case GlobalValue::HiddenVisibility: return 1; + } +} + void BytecodeWriter::outputModuleInfoBlock(const Module *M) { BytecodeBlock ModuleInfoBlock(BytecodeFormat::ModuleGlobalInfoBlockID, *this); @@ -979,7 +987,9 @@ // Fields: bit0 = isConstant, bit1 = hasInitializer, bit2-4=Linkage, // bit5+ = Slot # for type. - bool HasExtensionWord = (I->getAlignment() != 0) || I->hasSection(); + bool HasExtensionWord = (I->getAlignment() != 0) || + I->hasSection() || + (I->getVisibility() != GlobalValue::DefaultVisibility); // If we need to use the extension byte, set linkage=3(internal) and // initializer = 0 (impossible!). @@ -993,12 +1003,13 @@ output_vbr(oSlot); // The extension word has this format: bit 0 = has initializer, bit 1-3 = - // linkage, bit 4-8 = alignment (log2), bit 9 = has SectionID, - // bits 10+ = future use. + // linkage, bit 4-8 = alignment (log2), bit 9 = has SectionID, + // bits 10-12 = visibility, bits 13+ = future use. unsigned ExtWord = (unsigned)I->hasInitializer() | (getEncodedLinkage(I) << 1) | ((Log2_32(I->getAlignment())+1) << 4) | - ((unsigned)I->hasSection() << 9); + ((unsigned)I->hasSection() << 9) | + (getEncodedVisibility(I) << 10); output_vbr(ExtWord); if (I->hasSection()) { // Give section names unique ID's. @@ -1102,7 +1113,8 @@ if (F->isExternal()) return; BytecodeBlock FunctionBlock(BytecodeFormat::FunctionBlockID, *this); - output_vbr(getEncodedLinkage(F)); + unsigned rWord = (getEncodedVisibility(F) << 16) | getEncodedLinkage(F); + output_vbr(rWord); // Get slot information about the function... Table.incorporateFunction(F); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits