Changes in directory llvm/lib/Target:
TargetData.cpp updated: 1.71 -> 1.72 --- Log message: Move getPreferredAlignmentLog from AsmPrinter to TargetData --- Diffs of the changes: (+23 -0) TargetData.cpp | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+) Index: llvm/lib/Target/TargetData.cpp diff -u llvm/lib/Target/TargetData.cpp:1.71 llvm/lib/Target/TargetData.cpp:1.72 --- llvm/lib/Target/TargetData.cpp:1.71 Fri Oct 20 02:07:24 2006 +++ llvm/lib/Target/TargetData.cpp Tue Oct 24 15:32:14 2006 @@ -354,3 +354,26 @@ return Result; } +/// getPreferredAlignmentLog - Return the preferred alignment of the +/// specified global, returned in log form. This includes an explicitly +/// requested alignment (if the global has one). +unsigned TargetData::getPreferredAlignmentLog(const GlobalVariable *GV) const { + const Type *ElemType = GV->getType()->getElementType(); + unsigned Alignment = getTypeAlignmentShift(ElemType); + if (GV->getAlignment() > (1U << Alignment)) + Alignment = Log2_32(GV->getAlignment()); + + if (GV->hasInitializer()) { + // Always round up alignment of global doubles to 8 bytes. + if (GV->getType()->getElementType() == Type::DoubleTy && Alignment < 3) + Alignment = 3; + if (Alignment < 4) { + // If the global is not external, see if it is large. If so, give it a + // larger alignment. + if (getTypeSize(ElemType) > 128) + Alignment = 4; // 16-byte alignment. + } + } + return Alignment; +} + _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits