[llvm-commits] CVS: llvm/lib/Bytecode/Writer/Writer.cpp
Anton Korobeynikov
asl at math.spbu.ru
Wed Apr 25 07:28:11 PDT 2007
Changes in directory llvm/lib/Bytecode/Writer:
Writer.cpp updated: 1.176 -> 1.177
---
Log message:
Implement aliases. This fixes PR1017: http://llvm.org/PR1017 and it's dependent bugs. CFE part
will follow.
---
Diffs of the changes: (+26 -1)
Writer.cpp | 27 ++++++++++++++++++++++++++-
1 files changed, 26 insertions(+), 1 deletion(-)
Index: llvm/lib/Bytecode/Writer/Writer.cpp
diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.176 llvm/lib/Bytecode/Writer/Writer.cpp:1.177
--- llvm/lib/Bytecode/Writer/Writer.cpp:1.176 Sun Apr 22 14:24:39 2007
+++ llvm/lib/Bytecode/Writer/Writer.cpp Wed Apr 25 09:27:10 2007
@@ -1088,9 +1088,34 @@
output_vbr((unsigned)SectionNames.size());
for (unsigned i = 0, e = SectionNames.size(); i != e; ++i)
output(SectionNames[i]);
-
+
// Output the inline asm string.
output(M->getModuleInlineAsm());
+
+ // Output aliases
+ for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end();
+ I != E; ++I) {
+ unsigned Slot = Table.getTypeSlot(I->getType());
+ assert(((Slot << 2) >> 2) == Slot && "Slot # too big!");
+ unsigned aliasLinkage = 0;
+ switch (I->getLinkage()) {
+ case GlobalValue::ExternalLinkage:
+ aliasLinkage = 0;
+ break;
+ case GlobalValue::InternalLinkage:
+ aliasLinkage = 1;
+ break;
+ case GlobalValue::WeakLinkage:
+ aliasLinkage = 2;
+ break;
+ default:
+ assert(0 && "Invalid alias linkage");
+ }
+ output_vbr((Slot << 2) | aliasLinkage);
+ output_vbr(Table.getTypeSlot(I->getAliasee()->getType()));
+ output_vbr(Table.getSlot(I->getAliasee()));
+ }
+ output_typeid(Table.getTypeSlot(Type::VoidTy));
}
void BytecodeWriter::outputInstructions(const Function *F) {
More information about the llvm-commits
mailing list