[llvm-commits] [llvm] r60621 - in /llvm/trunk: lib/Target/ARM/ARMTargetAsmInfo.cpp lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp test/CodeGen/ARM/2008-08-07-AsmPrintBug.ll test/CodeGen/ARM/hidden-vis-2.ll test/CodeGen/ARM/hidden-vis-3.ll test/CodeGen/ARM/hidden-vis.ll

Evan Cheng evan.cheng at apple.com
Fri Dec 5 18:00:56 PST 2008


Author: evancheng
Date: Fri Dec  5 20:00:55 2008
New Revision: 60621

URL: http://llvm.org/viewvc/llvm-project?rev=60621&view=rev
Log:
Clean up some ARM GV asm printing out; minor fixes to match what gcc does.

Added:
    llvm/trunk/test/CodeGen/ARM/hidden-vis-2.ll
    llvm/trunk/test/CodeGen/ARM/hidden-vis-3.ll
    llvm/trunk/test/CodeGen/ARM/hidden-vis.ll
Modified:
    llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp
    llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
    llvm/trunk/test/CodeGen/ARM/2008-08-07-AsmPrintBug.ll

Modified: llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp?rev=60621&r1=60620&r2=60621&view=diff

==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp Fri Dec  5 20:00:55 2008
@@ -56,6 +56,7 @@
   ZeroFillDirective = "\t.zerofill\t";  // Uses .zerofill
   SetDirective = "\t.set\t";
   WeakRefDirective = "\t.weak_reference\t";
+  WeakDefDirective = "\t.weak_definition ";
   HiddenDirective = "\t.private_extern\t";
   ProtectedDirective = NULL;
   JumpTableDataSection = ".const";

Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp?rev=60621&r1=60620&r2=60621&view=diff

==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp Fri Dec  5 20:00:55 2008
@@ -29,7 +29,6 @@
 #include "llvm/Target/TargetData.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/TargetOptions.h"
-#include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/Statistic.h"
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/ADT/StringSet.h"
@@ -84,10 +83,6 @@
     /// asm printer should generate stubs for.
     StringSet<> FnStubs;
 
-    /// PCRelGVs - Keeps the set of GlobalValues used in pc relative
-    /// constantpool.
-    SmallPtrSet<const GlobalValue*, 8> PCRelGVs;
-
     /// True if asm printer is printing a series of CONSTPOOL_ENTRY.
     bool InCPMode;
     
@@ -677,12 +672,6 @@
     
     if (MCPE.isMachineConstantPoolEntry()) {
       EmitMachineConstantPoolValue(MCPE.Val.MachineCPVal);
-      ARMConstantPoolValue *ACPV =
-        static_cast<ARMConstantPoolValue*>(MCPE.Val.MachineCPVal);
-      if (ACPV->getPCAdjustment() != 0) {
-        const GlobalValue *GV = ACPV->getGV();
-        PCRelGVs.insert(GV);
-      }
     } else {
       EmitGlobalConstant(MCPE.Val.ConstVal);
       // remember to emit the weak reference
@@ -841,18 +830,18 @@
   const Type *Type = C->getType();
   unsigned Size = TD->getABITypeSize(Type);
   unsigned Align = TD->getPreferredAlignmentLog(GVar);
+  bool isDarwin = Subtarget->isTargetDarwin();
 
   printVisibility(name, GVar->getVisibility());
 
   if (Subtarget->isTargetELF())
     O << "\t.type " << name << ",%object\n";
 
-  SwitchToSection(TAI->SectionForGlobal(GVar));
-
   if (C->isNullValue() && !GVar->hasSection() && !GVar->isThreadLocal()) {
     // FIXME: This seems to be pretty darwin-specific
 
     if (GVar->hasExternalLinkage()) {
+      SwitchToSection(TAI->SectionForGlobal(GVar));
       if (const char *Directive = TAI->getZeroFillDirective()) {
         O << "\t.globl\t" << name << "\n";
         O << Directive << "__DATA, __common, " << name << ", "
@@ -864,14 +853,34 @@
     if (GVar->hasInternalLinkage() || GVar->mayBeOverridden()) {
       if (Size == 0) Size = 1;   // .comm Foo, 0 is undefined, avoid it.
 
-      if (TAI->getLCOMMDirective() != NULL) {
-        if (PCRelGVs.count(GVar) || GVar->hasInternalLinkage()) {
+      if (isDarwin) {
+        if (GVar->hasInternalLinkage()) {
+          O << TAI->getLCOMMDirective()  << name << "," << Size
+            << ',' << Align;
+        } else if (GVar->hasCommonLinkage()) {
+          O << TAI->getCOMMDirective()  << name << "," << Size
+            << ',' << Align;
+        } else {
+          SwitchToSection(TAI->SectionForGlobal(GVar));
+          O << "\t.globl " << name << '\n'
+            << TAI->getWeakDefDirective() << name << '\n';
+          EmitAlignment(Align, GVar);
+          O << name << ":\t\t\t\t" << TAI->getCommentString() << ' ';
+          PrintUnmangledNameSafely(GVar, O);
+          O << '\n';
+          EmitGlobalConstant(C);
+          return;
+        }
+      } else if (TAI->getLCOMMDirective() != NULL) {
+        if (GVar->hasInternalLinkage()) {
           O << TAI->getLCOMMDirective() << name << "," << Size;
-          if (Subtarget->isTargetDarwin())
-            O << "," << Align;
-        } else
+        } else {
           O << TAI->getCOMMDirective()  << name << "," << Size;
+          if (TAI->getCOMMDirectiveTakesAlignment())
+            O << ',' << (TAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
+        }
       } else {
+        SwitchToSection(TAI->SectionForGlobal(GVar));
         if (GVar->hasInternalLinkage())
           O << "\t.local\t" << name << "\n";
         O << TAI->getCOMMDirective()  << name << "," << Size;
@@ -885,10 +894,12 @@
     }
   }
 
+  SwitchToSection(TAI->SectionForGlobal(GVar));
   switch (GVar->getLinkage()) {
+   case GlobalValue::CommonLinkage:
    case GlobalValue::LinkOnceLinkage:
    case GlobalValue::WeakLinkage:
-    if (Subtarget->isTargetDarwin()) {
+    if (isDarwin) {
       O << "\t.globl " << name << "\n"
         << "\t.weak_definition " << name << "\n";
     } else {
@@ -980,7 +991,7 @@
 
     // Output non-lazy-pointers for external and common global variables.
     if (!GVNonLazyPtrs.empty()) {
-      SwitchToDataSection(".non_lazy_symbol_pointer", 0);
+      SwitchToDataSection("\t.non_lazy_symbol_pointer", 0);
       for (StringSet<>::iterator i =  GVNonLazyPtrs.begin(),
              e = GVNonLazyPtrs.end(); i != e; ++i) {
         const char *p = i->getKeyData();

Modified: llvm/trunk/test/CodeGen/ARM/2008-08-07-AsmPrintBug.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2008-08-07-AsmPrintBug.ll?rev=60621&r1=60620&r2=60621&view=diff

==============================================================================
--- llvm/trunk/test/CodeGen/ARM/2008-08-07-AsmPrintBug.ll (original)
+++ llvm/trunk/test/CodeGen/ARM/2008-08-07-AsmPrintBug.ll Fri Dec  5 20:00:55 2008
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | llc -mtriple=arm-apple-darwin -mattr=+v6 -relocation-model=pic | grep lcomm
+; RUN: llvm-as < %s | llc -mtriple=arm-apple-darwin -mattr=+v6 -relocation-model=pic | grep comm
 
 	%struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
 	%struct.__gcov_var = type { %struct.FILE*, i32, i32, i32, i32, i32, i32, [1025 x i32] }

Added: llvm/trunk/test/CodeGen/ARM/hidden-vis-2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/hidden-vis-2.ll?rev=60621&view=auto

==============================================================================
--- llvm/trunk/test/CodeGen/ARM/hidden-vis-2.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/hidden-vis-2.ll Fri Dec  5 20:00:55 2008
@@ -0,0 +1,9 @@
+; RUN: llvm-as < %s | llc -mtriple=arm-apple-darwin | grep ldr | count 2
+
+ at x = weak hidden global i32 0		; <i32*> [#uses=1]
+
+define i32 @t() nounwind readonly {
+entry:
+	%0 = load i32* @x, align 4		; <i32> [#uses=1]
+	ret i32 %0
+}

Added: llvm/trunk/test/CodeGen/ARM/hidden-vis-3.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/hidden-vis-3.ll?rev=60621&view=auto

==============================================================================
--- llvm/trunk/test/CodeGen/ARM/hidden-vis-3.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/hidden-vis-3.ll Fri Dec  5 20:00:55 2008
@@ -0,0 +1,14 @@
+; RUN: llvm-as < %s | llc -mtriple=arm-apple-darwin | grep ldr | count 6
+; RUN: llvm-as < %s | llc -mtriple=arm-apple-darwin | grep non_lazy_ptr
+; RUN: llvm-as < %s | llc -mtriple=arm-apple-darwin | grep long | count 4
+
+ at x = external hidden global i32		; <i32*> [#uses=1]
+ at y = extern_weak hidden global i32	; <i32*> [#uses=1]
+
+define i32 @t() nounwind readonly {
+entry:
+	%0 = load i32* @x, align 4		; <i32> [#uses=1]
+	%1 = load i32* @y, align 4		; <i32> [#uses=1]
+	%2 = add i32 %1, %0		; <i32> [#uses=1]
+	ret i32 %2
+}

Added: llvm/trunk/test/CodeGen/ARM/hidden-vis.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/hidden-vis.ll?rev=60621&view=auto

==============================================================================
--- llvm/trunk/test/CodeGen/ARM/hidden-vis.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/hidden-vis.ll Fri Dec  5 20:00:55 2008
@@ -0,0 +1,18 @@
+; RUN: llvm-as < %s | llc -mtriple=arm-apple-darwin | \
+; RUN:   grep .private_extern | count 2
+
+%struct.Person = type { i32 }
+ at a = hidden global i32 0
+ at b = external global i32
+
+
+define weak hidden void @_ZN6Person13privateMethodEv(%struct.Person* %this) {
+  ret void
+}
+
+declare void @function(i32)
+
+define weak void @_ZN6PersonC1Ei(%struct.Person* %this, i32 %_c) {
+  ret void
+}
+





More information about the llvm-commits mailing list