Packed Structures

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32361 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Andrew Lenharth
2006-12-08 18:06:16 +00:00
parent 8894255fc0
commit 38ecbf18eb
10 changed files with 75 additions and 20 deletions
+12 -1
View File
@@ -1192,7 +1192,18 @@ const Type *BytecodeReader::ParseType() {
Typ = read_vbr_uint();
}
Result = StructType::get(Elements);
Result = StructType::get(Elements, false);
break;
}
case Type::BC_ONLY_PackedStructTyID: {
std::vector<const Type*> Elements;
unsigned Typ = read_vbr_uint();
while (Typ) { // List is terminated by void/0 typeid
Elements.push_back(getType(Typ));
Typ = read_vbr_uint();
}
Result = StructType::get(Elements, true);
break;
}
case Type::PointerTyID: {
+5 -3
View File
@@ -197,7 +197,11 @@ inline BytecodeBlock::~BytecodeBlock() { // Do backpatch when block goes out
//===----------------------------------------------------------------------===//
void BytecodeWriter::outputType(const Type *T) {
output_vbr((unsigned)T->getTypeID());
const StructType* STy = dyn_cast<StructType>(T);
if(STy && STy->isPacked())
output_vbr((unsigned)Type::BC_ONLY_PackedStructTyID);
else
output_vbr((unsigned)T->getTypeID());
// That's all there is to handling primitive types...
if (T->isPrimitiveType()) {
@@ -246,10 +250,8 @@ void BytecodeWriter::outputType(const Type *T) {
break;
}
case Type::StructTyID: {
const StructType *ST = cast<StructType>(T);
// Output all of the element types...
for (StructType::element_iterator I = ST->element_begin(),
E = ST->element_end(); I != E; ++I) {