Changes in directory llvm/lib/Bytecode/Writer:
SlotCalculator.cpp updated: 1.76 -> 1.77 Writer.cpp updated: 1.140 -> 1.141 --- Log message: For PR950: http://llvm.org/PR950 : Update for signless integer types and parameter attribute implementation. Of significant note: 1. This changes the bytecode format yet again. 2. There are 1/2 as many integer type planes (this is a good thing) 3. GEP indices now use only 1 bit to identify their type which means more GEP instructions won't be relegated to format 0 (size win) 4. Parameter attributes are implemented but currently being stored verbosely for each function type. Some other day this needs to be optimized for size. --- Diffs of the changes: (+15 -23) SlotCalculator.cpp | 3 +-- Writer.cpp | 35 ++++++++++++++--------------------- 2 files changed, 15 insertions(+), 23 deletions(-) Index: llvm/lib/Bytecode/Writer/SlotCalculator.cpp diff -u llvm/lib/Bytecode/Writer/SlotCalculator.cpp:1.76 llvm/lib/Bytecode/Writer/SlotCalculator.cpp:1.77 --- llvm/lib/Bytecode/Writer/SlotCalculator.cpp:1.76 Wed Dec 6 19:30:31 2006 +++ llvm/lib/Bytecode/Writer/SlotCalculator.cpp Sat Dec 30 23:44:24 2006 @@ -145,8 +145,7 @@ // for (unsigned plane = 0, e = Table.size(); plane != e; ++plane) { if (const ArrayType *AT = dyn_cast<ArrayType>(Types[plane])) - if (AT->getElementType() == Type::SByteTy || - AT->getElementType() == Type::UByteTy) { + if (AT->getElementType() == Type::Int8Ty) { TypePlane &Plane = Table[plane]; unsigned FirstNonStringID = 0; for (unsigned i = 0, e = Plane.size(); i != e; ++i) Index: llvm/lib/Bytecode/Writer/Writer.cpp diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.140 llvm/lib/Bytecode/Writer/Writer.cpp:1.141 --- llvm/lib/Bytecode/Writer/Writer.cpp:1.140 Tue Dec 19 17:16:47 2006 +++ llvm/lib/Bytecode/Writer/Writer.cpp Sat Dec 30 23:44:24 2006 @@ -214,16 +214,20 @@ int Slot = Table.getSlot(MT->getReturnType()); assert(Slot != -1 && "Type used but not available!!"); output_typeid((unsigned)Slot); + output_vbr(unsigned(MT->getParamAttrs(0))); // Output the number of arguments to function (+1 if varargs): output_vbr((unsigned)MT->getNumParams()+MT->isVarArg()); // Output all of the arguments... FunctionType::param_iterator I = MT->param_begin(); + unsigned Idx = 1; for (; I != MT->param_end(); ++I) { Slot = Table.getSlot(*I); assert(Slot != -1 && "Type used but not available!!"); output_typeid((unsigned)Slot); + output_vbr(unsigned(MT->getParamAttrs(Idx))); + Idx++; } // Terminate list with VoidTy if we are a varargs function... @@ -323,20 +327,13 @@ output_vbr(0U); break; - case Type::UByteTyID: // Unsigned integer types... - case Type::UShortTyID: - case Type::UIntTyID: - case Type::ULongTyID: + case Type::Int8TyID: // Unsigned integer types... + case Type::Int16TyID: + case Type::Int32TyID: + case Type::Int64TyID: output_vbr(cast<ConstantInt>(CPV)->getZExtValue()); break; - case Type::SByteTyID: // Signed integer types... - case Type::ShortTyID: - case Type::IntTyID: - case Type::LongTyID: - output_vbr(cast<ConstantInt>(CPV)->getSExtValue()); - break; - case Type::ArrayTyID: { const ConstantArray *CPA = cast<ConstantArray>(CPV); assert(!CPA->isString() && "Constant strings should be handled specially!"); @@ -489,12 +486,10 @@ unsigned IdxId; switch (I->getOperand(Idx)->getType()->getTypeID()) { default: assert(0 && "Unknown index type!"); - case Type::UIntTyID: IdxId = 0; break; - case Type::IntTyID: IdxId = 1; break; - case Type::ULongTyID: IdxId = 2; break; - case Type::LongTyID: IdxId = 3; break; + case Type::Int32TyID: IdxId = 0; break; + case Type::Int64TyID: IdxId = 1; break; } - Slot = (Slot << 2) | IdxId; + Slot = (Slot << 1) | IdxId; } output_vbr(unsigned(Slot)); } @@ -742,12 +737,10 @@ unsigned IdxId; switch (GEP->getOperand(Idx)->getType()->getTypeID()) { default: assert(0 && "Unknown index type!"); - case Type::UIntTyID: IdxId = 0; break; - case Type::IntTyID: IdxId = 1; break; - case Type::ULongTyID: IdxId = 2; break; - case Type::LongTyID: IdxId = 3; break; + case Type::Int32TyID: IdxId = 0; break; + case Type::Int64TyID: IdxId = 1; break; } - Slots[Idx] = (Slots[Idx] << 2) | IdxId; + Slots[Idx] = (Slots[Idx] << 1) | IdxId; if (Slots[Idx] > MaxOpSlot) MaxOpSlot = Slots[Idx]; } } else if (Opcode == 58) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits