Changes in directory llvm/lib/Target:
TargetData.cpp updated: 1.97 -> 1.98 --- Log message: simplify some code, ensure that packed structures get abi alignment of 1. --- Diffs of the changes: (+11 -18) TargetData.cpp | 29 +++++++++++------------------ 1 files changed, 11 insertions(+), 18 deletions(-) Index: llvm/lib/Target/TargetData.cpp diff -u llvm/lib/Target/TargetData.cpp:1.97 llvm/lib/Target/TargetData.cpp:1.98 --- llvm/lib/Target/TargetData.cpp:1.97 Thu Feb 15 16:07:05 2007 +++ llvm/lib/Target/TargetData.cpp Fri Feb 16 16:25:34 2007 @@ -442,8 +442,7 @@ Get the ABI (\a abi_or_pref == true) or preferred alignment (\a abi_or_pref == false) for the requested type \a Ty. */ -unsigned char TargetData::getAlignment(const Type *Ty, bool abi_or_pref) const -{ +unsigned char TargetData::getAlignment(const Type *Ty, bool abi_or_pref) const { int AlignType = -1; assert(Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!"); @@ -454,27 +453,21 @@ return (abi_or_pref ? getPointerABIAlignment() : getPointerPrefAlignment()); - case Type::ArrayTyID: { - const ArrayType *ATy = cast<ArrayType>(Ty); - return (abi_or_pref - ? getABITypeAlignment(ATy->getElementType()) - : getPrefTypeAlignment(ATy->getElementType())); - } + case Type::ArrayTyID: + return getAlignment(cast<ArrayType>(Ty)->getElementType(), abi_or_pref); + case Type::StructTyID: { - // Get the layout annotation... which is lazily created on demand. + // Packed structure types always have an ABI alignment of one. + if (cast<StructType>(Ty)->isPacked() && abi_or_pref) + return 1; + + // Get the layout annotation... which is lazily created on demand. const StructLayout *Layout = getStructLayout(cast<StructType>(Ty)); const TargetAlignElem &elem = getAlignment(AGGREGATE_ALIGN, 0); assert(validAlignment(elem) && "Aggregate alignment return invalid in getAlignment"); - if (abi_or_pref) { - return (elem.ABIAlign < Layout->getAlignment() - ? Layout->StructAlignment - : elem.ABIAlign); - } else { - return (elem.PrefAlign < Layout->getAlignment() - ? Layout->StructAlignment - : elem.PrefAlign); - } + unsigned Align = abi_or_pref ? elem.ABIAlign : elem.PrefAlign; + return Align < Layout->getAlignment() ? Layout->StructAlignment : Align; } case Type::IntegerTyID: case Type::VoidTyID: _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits