[llvm-commits] CVS: llvm/lib/Bytecode/Reader/Analyzer.cpp Reader.cpp
Anton Korobeynikov
asl at math.spbu.ru
Fri Jan 12 11:21:21 PST 2007
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();
More information about the llvm-commits
mailing list