[llvm-commits] CVS: llvm/lib/Bytecode/Writer/Writer.cpp
Chris Lattner
lattner at cs.uiuc.edu
Thu May 22 13:37:01 PDT 2003
Changes in directory llvm/lib/Bytecode/Writer:
Writer.cpp updated: 1.33 -> 1.34
---
Log message:
Fix bug: Assembler/2003-05-03-BytecodeReaderProblem.llx
by emitting the type planes before any constants (which could be constant
expressions involving undefined types!)
---
Diffs of the changes:
Index: llvm/lib/Bytecode/Writer/Writer.cpp
diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.33 llvm/lib/Bytecode/Writer/Writer.cpp:1.34
--- llvm/lib/Bytecode/Writer/Writer.cpp:1.33 Tue Apr 22 13:15:10 2003
+++ llvm/lib/Bytecode/Writer/Writer.cpp Thu May 22 13:35:38 2003
@@ -125,25 +125,34 @@
BytecodeBlock CPool(BytecodeFormat::ConstantPool, Out);
unsigned NumPlanes = Table.getNumPlanes();
-
- for (unsigned pno = 0; pno != NumPlanes; pno++) {
- const std::vector<const Value*> &Plane = Table.getPlane(pno);
- if (!Plane.empty()) { // Skip empty type planes...
- unsigned ValNo = 0;
- if (isFunction) // Don't reemit module constants
- ValNo += Table.getModuleLevel(pno);
- else if (pno == Type::TypeTyID) // If type plane wasn't written out above
- continue;
-
- if (pno >= Type::FirstDerivedTyID) {
- // Skip zero initializer
- if (ValNo == 0)
- ValNo = 1;
- }
- outputConstantsInPlane(Plane, ValNo); // Write out constants in the plane
+ // Output the type plane before any constants!
+ if (isFunction && NumPlanes > Type::TypeTyID) {
+ const std::vector<const Value*> &Plane = Table.getPlane(Type::TypeTyID);
+ if (!Plane.empty()) { // Skip empty type planes...
+ unsigned ValNo = Table.getModuleLevel(Type::TypeTyID);
+ outputConstantsInPlane(Plane, ValNo);
}
}
+
+ for (unsigned pno = 0; pno != NumPlanes; pno++)
+ if (pno != Type::TypeTyID) { // Type plane handled above.
+ const std::vector<const Value*> &Plane = Table.getPlane(pno);
+ if (!Plane.empty()) { // Skip empty type planes...
+ unsigned ValNo = 0;
+ if (isFunction) // Don't reemit module constants
+ ValNo += Table.getModuleLevel(pno);
+
+ if (pno >= Type::FirstDerivedTyID) {
+ // Skip zero initializer
+ if (ValNo == 0)
+ ValNo = 1;
+ }
+
+ // Write out constants in the plane
+ outputConstantsInPlane(Plane, ValNo);
+ }
+ }
}
void BytecodeWriter::outputModuleInfoBlock(const Module *M) {
More information about the llvm-commits
mailing list