Changes in directory llvm/lib/Bytecode/Reader:
Analyzer.cpp updated: 1.27 -> 1.28 Reader.cpp updated: 1.220 -> 1.221 --- 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: (+37 -6) Analyzer.cpp | 7 ++++++- Reader.cpp | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 6 deletions(-) Index: llvm/lib/Bytecode/Reader/Analyzer.cpp diff -u llvm/lib/Bytecode/Reader/Analyzer.cpp:1.27 llvm/lib/Bytecode/Reader/Analyzer.cpp:1.28 --- llvm/lib/Bytecode/Reader/Analyzer.cpp:1.27 Sat Jan 6 01:24:43 2007 +++ llvm/lib/Bytecode/Reader/Analyzer.cpp Fri Jan 12 13:20:46 2007 @@ -162,6 +162,7 @@ const Type* ElemType, bool isConstant, GlobalValue::LinkageTypes Linkage, + GlobalValue::VisibilityTypes Visibility, unsigned SlotNum, unsigned initSlot ) { @@ -169,7 +170,9 @@ *os << " GV: " << ( initSlot == 0 ? "Uni" : "I" ) << "nitialized, " << ( isConstant? "Constant, " : "Variable, ") - << " Linkage=" << Linkage << " Type="; + << " Linkage=" << Linkage + << " Visibility="<< Visibility + << " Type="; WriteTypeSymbolic(*os, ElemType, M); *os << " Slot=" << SlotNum << " InitSlot=" << initSlot << "\n"; @@ -206,6 +209,7 @@ *os << " Function Decl: "; WriteTypeSymbolic(*os,Func->getType(),M); *os <<", Linkage=" << Func->getLinkage(); + *os <<", Visibility=" << Func->getVisibility(); *os << "\n"; } } @@ -311,6 +315,7 @@ if (os) { *os << " BLOCK: Function {\n" << " Linkage: " << Func->getLinkage() << "\n" + << " Visibility: " << Func->getVisibility() << "\n" << " Type: "; WriteTypeSymbolic(*os,Func->getType(),M); *os << "\n"; Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.220 llvm/lib/Bytecode/Reader/Reader.cpp:1.221 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.220 Fri Jan 12 01:05:13 2007 +++ llvm/lib/Bytecode/Reader/Reader.cpp Fri Jan 12 13:20:46 2007 @@ -1628,9 +1628,12 @@ unsigned FuncSize = BlockEnd - At; GlobalValue::LinkageTypes Linkage = GlobalValue::ExternalLinkage; + GlobalValue::VisibilityTypes Visibility = GlobalValue::DefaultVisibility; - unsigned LinkageType = read_vbr_uint(); - switch (LinkageType) { + unsigned rWord = read_vbr_uint(); + unsigned LinkageID = rWord & 65535; + unsigned VisibilityID = rWord >> 16; + switch (LinkageID) { case 0: Linkage = GlobalValue::ExternalLinkage; break; case 1: Linkage = GlobalValue::WeakLinkage; break; case 2: Linkage = GlobalValue::AppendingLinkage; break; @@ -1644,8 +1647,17 @@ Linkage = GlobalValue::InternalLinkage; break; } + switch (VisibilityID) { + case 0: Visibility = GlobalValue::DefaultVisibility; break; + case 1: Visibility = GlobalValue::HiddenVisibility; break; + default: + error("Unknown visibility type: " + utostr(VisibilityID)); + Visibility = GlobalValue::DefaultVisibility; + break; + } F->setLinkage(Linkage); + F->setVisibility(Visibility); if (Handler) Handler->handleFunctionBegin(F,FuncSize); // Keep track of how many basic blocks we have read in... @@ -1844,6 +1856,7 @@ // Linkage, bit4+ = slot# unsigned SlotNo = VarType >> 5; unsigned LinkageID = (VarType >> 2) & 7; + unsigned VisibilityID = 0; bool isConstant = VarType & 1; bool hasInitializer = (VarType & 2) != 0; unsigned Alignment = 0; @@ -1853,10 +1866,12 @@ if (LinkageID == 3 && !hasInitializer) { unsigned ExtWord = read_vbr_uint(); // The extension word has this format: bit 0 = has initializer, bit 1-3 = - // linkage, bit 4-8 = alignment (log2), bits 10+ = future use. + // linkage, bit 4-8 = alignment (log2), bit 9 = has section, + // bits 10-12 = visibility, bits 13+ = future use. hasInitializer = ExtWord & 1; LinkageID = (ExtWord >> 1) & 7; Alignment = (1 << ((ExtWord >> 4) & 31)) >> 1; + VisibilityID = (ExtWord >> 10) & 7; if (ExtWord & (1 << 9)) // Has a section ID. GlobalSectionID = read_vbr_uint(); @@ -1877,7 +1892,16 @@ Linkage = GlobalValue::InternalLinkage; break; } - + GlobalValue::VisibilityTypes Visibility; + switch (VisibilityID) { + case 0: Visibility = GlobalValue::DefaultVisibility; break; + case 1: Visibility = GlobalValue::HiddenVisibility; break; + default: + error("Unknown visibility type: " + utostr(VisibilityID)); + Visibility = GlobalValue::DefaultVisibility; + break; + } + const Type *Ty = getType(SlotNo); if (!Ty) error("Global has no type! SlotNo=" + utostr(SlotNo)); @@ -1891,6 +1915,7 @@ GlobalVariable *GV = new GlobalVariable(ElTy, isConstant, Linkage, 0, "", TheModule); GV->setAlignment(Alignment); + GV->setVisibility(Visibility); insertValue(GV, SlotNo, ModuleValues); if (GlobalSectionID != 0) @@ -1904,7 +1929,8 @@ // Notify handler about the global value. if (Handler) - Handler->handleGlobalVariable(ElTy, isConstant, Linkage, SlotNo,initSlot); + Handler->handleGlobalVariable(ElTy, isConstant, Linkage, Visibility, + SlotNo, initSlot); // Get next item VarType = read_vbr_uint(); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits