Move getPreferredAlignmentLog from AsmPrinter to TargetData
authorDevang Patel <dpatel@apple.com>
Tue, 24 Oct 2006 20:32:14 +0000 (20:32 +0000)
committerDevang Patel <dpatel@apple.com>
Tue, 24 Oct 2006 20:32:14 +0000 (20:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31171 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/AsmPrinter.h
include/llvm/Target/TargetData.h
lib/CodeGen/AsmPrinter.cpp
lib/Target/Alpha/AlphaAsmPrinter.cpp
lib/Target/PowerPC/PPCAsmPrinter.cpp
lib/Target/TargetData.cpp
lib/Target/X86/X86AsmPrinter.cpp
lib/Target/X86/X86IntelAsmPrinter.cpp

index 68ca2d0e32a8bfa8c04cf5066febb99d86da4033..223841e1d20858051128b749af259ebad4ecb6b6 100644 (file)
@@ -95,11 +95,6 @@ namespace llvm {
     ///
     void SwitchToDataSection(const char *NewSection, const GlobalValue *GV);
     
-    /// 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 getPreferredAlignmentLog(const GlobalVariable *GV) const;
-    
     /// getGlobalLinkName - Returns the asm/link name of of the specified
     /// global variable.  Should be overridden by each target asm printer to
     /// generate the appropriate value.
index e4ea5c1cc4c5caf9c53c5854e552ee3c77bef26d..b8cdae5f7f31d8fb66483fed43622bb6b152cf67 100644 (file)
@@ -31,6 +31,7 @@ class Value;
 class Type;
 class StructType;
 class StructLayout;
+class GlobalVariable;
 
 class TargetData : public ImmutablePass {
   bool          LittleEndian;          // Defaults to false
@@ -142,6 +143,11 @@ public:
   /// removed, this method must be called whenever a StructType is removed to
   /// avoid a dangling pointer in this cache.
   void InvalidateStructLayoutInfo(const StructType *Ty) const;
+
+  /// getPreferredAlignmentLog - Return the preferred alignment of the
+  /// specified global, returned in log form.  This includes an explicitly
+  /// requested alignment (if the global has one).
+  virtual unsigned getPreferredAlignmentLog(const GlobalVariable *GV) const;
 };
 
 /// StructLayout - used to lazily calculate structure layout information for a
index 09978344a784ae7fa8a7ed9fbc5625efa58471d6..9a740692b9becd39f8443c1875692e949cc2c0ce 100644 (file)
@@ -326,29 +326,6 @@ void AsmPrinter::EmitXXStructorList(Constant *List) {
     }
 }
 
-/// 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 AsmPrinter::getPreferredAlignmentLog(const GlobalVariable *GV) const {
-  const Type *ElemType = GV->getType()->getElementType();
-  unsigned Alignment = TM.getTargetData()->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 (TM.getTargetData()->getTypeSize(ElemType) > 128)
-        Alignment = 4;    // 16-byte alignment.
-    }
-  }
-  return Alignment;
-}
-
 /// getGlobalLinkName - Returns the asm/link name of of the specified
 /// global variable.  Should be overridden by each target asm printer to
 /// generate the appropriate value.
index 3448f3c47393e1e49e64f6fcf9171c731a508f3b..f94f5537bc5cf982ba4ec8d80de5a484df113ee6 100644 (file)
@@ -232,7 +232,7 @@ bool AlphaAsmPrinter::doFinalization(Module &M) {
       Constant *C = I->getInitializer();
       unsigned Size = TD->getTypeSize(C->getType());
       //      unsigned Align = TD->getTypeAlignmentShift(C->getType());
-      unsigned Align = getPreferredAlignmentLog(I);
+      unsigned Align = TD->getPreferredAlignmentLog(I);
 
       if (C->isNullValue() &&
           (I->hasLinkOnceLinkage() || I->hasInternalLinkage() ||
index bba9d75558f10df1cdd672f0a0900c86bd1cf682..a7086975f056873f640cbe127b3b0fb497e5e10b 100644 (file)
@@ -513,7 +513,7 @@ bool DarwinAsmPrinter::doFinalization(Module &M) {
     std::string name = Mang->getValueName(I);
     Constant *C = I->getInitializer();
     unsigned Size = TD->getTypeSize(C->getType());
-    unsigned Align = getPreferredAlignmentLog(I);
+    unsigned Align = TD->getPreferredAlignmentLog(I);
 
     if (C->isNullValue() && /* FIXME: Verify correct */
         (I->hasInternalLinkage() || I->hasWeakLinkage() ||
index 834177420f6ceb3e1e47858f49b829795f5b85a7..03a232c67144f334b7d8617a423743d0170d3535 100644 (file)
@@ -354,3 +354,26 @@ uint64_t TargetData::getIndexedOffset(const Type *ptrTy,
   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;
+}
+
index 2438546f3db2cbd47d4c0a5c88219bb21ea402de..5e13a35f8317989dbe2b4083c755050276d109cd 100644 (file)
@@ -139,7 +139,7 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
     std::string name = Mang->getValueName(I);
     Constant *C = I->getInitializer();
     unsigned Size = TD->getTypeSize(C->getType());
-    unsigned Align = getPreferredAlignmentLog(I);
+    unsigned Align = TD->getPreferredAlignmentLog(I);
 
     if (C->isNullValue() && /* FIXME: Verify correct */
         (I->hasInternalLinkage() || I->hasWeakLinkage() ||
index 7a420d894e8c190bce0cecc29cb33c83a9689619..11caea9dbeffb8b6f895158a79d1f7179af8d229 100755 (executable)
@@ -387,7 +387,7 @@ bool X86IntelAsmPrinter::doFinalization(Module &M) {
     std::string name = Mang->getValueName(I);
     Constant *C = I->getInitializer();
     unsigned Size = TD->getTypeSize(C->getType());
-    unsigned Align = getPreferredAlignmentLog(I);
+    unsigned Align = TD->getPreferredAlignmentLog(I);
     bool bCustomSegment = false;
 
     switch (I->getLinkage()) {