[llvm] 7866442 - [XCOFF] Adjust .rename emission sequence

via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 10 07:48:38 PDT 2020


Author: jasonliu
Date: 2020-08-10T14:48:24Z
New Revision: 7866442b3f5d395e7f92a5d6b6ed0df3e4ba429b

URL: https://github.com/llvm/llvm-project/commit/7866442b3f5d395e7f92a5d6b6ed0df3e4ba429b
DIFF: https://github.com/llvm/llvm-project/commit/7866442b3f5d395e7f92a5d6b6ed0df3e4ba429b.diff

LOG: [XCOFF] Adjust .rename emission sequence

Summary:
AIX assembler does not generate correct relocation when .rename
appear between tc entry label and .tc directive.
So only emit .rename after .tc/.comm or other linkage is emitted.

Reviewed By: daltenty, hubert.reinterpretcast

Differential Revision: https://reviews.llvm.org/D85317

Added: 
    

Modified: 
    llvm/lib/MC/MCAsmStreamer.cpp
    llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
    llvm/test/CodeGen/PowerPC/aix-xcoff-symbol-rename.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index 6a8572e57922..b8da7f1615c9 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -800,11 +800,6 @@ void MCAsmStreamer::emitXCOFFLocalCommonSymbol(MCSymbol *LabelSym,
 
 void MCAsmStreamer::emitXCOFFSymbolLinkageWithVisibility(
     MCSymbol *Symbol, MCSymbolAttr Linkage, MCSymbolAttr Visibility) {
-  // Print symbol's rename (original name contains invalid character(s)) if
-  // there is one.
-  if (cast<MCSymbolXCOFF>(Symbol)->hasRename())
-    emitXCOFFRenameDirective(Symbol,
-                             cast<MCSymbolXCOFF>(Symbol)->getSymbolTableName());
 
   switch (Linkage) {
   case MCSA_Global:
@@ -839,6 +834,12 @@ void MCAsmStreamer::emitXCOFFSymbolLinkageWithVisibility(
     report_fatal_error("unexpected value for Visibility type");
   }
   EmitEOL();
+
+  // Print symbol's rename (original name contains invalid character(s)) if
+  // there is one.
+  if (cast<MCSymbolXCOFF>(Symbol)->hasRename())
+    emitXCOFFRenameDirective(Symbol,
+                             cast<MCSymbolXCOFF>(Symbol)->getSymbolTableName());
 }
 
 void MCAsmStreamer::emitXCOFFRenameDirective(const MCSymbol *Name,
@@ -868,12 +869,6 @@ void MCAsmStreamer::emitELFSize(MCSymbol *Symbol, const MCExpr *Value) {
 
 void MCAsmStreamer::emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
                                      unsigned ByteAlignment) {
-  // Print symbol's rename (original name contains invalid character(s)) if
-  // there is one.
-  MCSymbolXCOFF *XSym = dyn_cast<MCSymbolXCOFF>(Symbol);
-  if (XSym && XSym->hasRename())
-    emitXCOFFRenameDirective(XSym, XSym->getSymbolTableName());
-
   OS << "\t.comm\t";
   Symbol->print(OS, MAI);
   OS << ',' << Size;
@@ -885,6 +880,13 @@ void MCAsmStreamer::emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
       OS << ',' << Log2_32(ByteAlignment);
   }
   EmitEOL();
+
+  // Print symbol's rename (original name contains invalid character(s)) if
+  // there is one.
+  MCSymbolXCOFF *XSym = dyn_cast<MCSymbolXCOFF>(Symbol);
+  if (XSym && XSym->hasRename())
+    emitXCOFFRenameDirective(XSym, XSym->getSymbolTableName());
+
 }
 
 void MCAsmStreamer::emitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,

diff  --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
index 3092d56da1c5..23eb02f29ed3 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
@@ -124,9 +124,10 @@ class PPCTargetAsmStreamer : public PPCTargetStreamer {
       MCSymbolXCOFF *TCSym =
           cast<MCSymbolXCOFF>(Streamer.getContext().getOrCreateSymbol(
               XSym->getSymbolTableName() + "[TC]"));
+      OS << "\t.tc " << TCSym->getName() << "," << XSym->getName() << '\n';
+
       if (TCSym->hasRename())
         Streamer.emitXCOFFRenameDirective(TCSym, TCSym->getSymbolTableName());
-      OS << "\t.tc " << TCSym->getName() << "," << XSym->getName() << '\n';
       return;
     }
 

diff  --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-symbol-rename.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-symbol-rename.ll
index ee3f9da68dad..27dac1b9a30b 100644
--- a/llvm/test/CodeGen/PowerPC/aix-xcoff-symbol-rename.ll
+++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-symbol-rename.ll
@@ -40,10 +40,10 @@ entry:
 ; This is f at o
 declare i32 @"f\40o"(...)
 
-; ASM:         .rename _Renamed..24f_o[DS],"f$o" # -- Begin function f$o
-; ASM-NEXT:    .lglobl _Renamed..24f_o[DS]
-; ASM-NEXT:    .rename ._Renamed..24f_o,".f$o"
+; ASM:         .lglobl _Renamed..24f_o[DS] # -- Begin function f$o
+; ASM-NEXT:    .rename _Renamed..24f_o[DS],"f$o"
 ; ASM-NEXT:    .lglobl ._Renamed..24f_o
+; ASM-NEXT:    .rename ._Renamed..24f_o,".f$o"
 ; ASM-NEXT:    .align  4
 ; ASM-NEXT:    .csect _Renamed..24f_o[DS],2
 ; ASM-NEXT:    .vbyte  4, ._Renamed..24f_o     # @"f$o"
@@ -53,10 +53,10 @@ declare i32 @"f\40o"(...)
 ; ASM-NEXT:  ._Renamed..24f_o:
 ; ASM:         bl ._Renamed..40f_o
 ; ASM-NEXT:    nop
-; ASM:         .rename _Renamed..26f_o[DS],"f&o" # -- Begin function f&o
-; ASM-NEXT:    .globl  _Renamed..26f_o[DS]
-; ASM-NEXT:    .rename ._Renamed..26f_o,".f&o"
+; ASM:         .globl  _Renamed..26f_o[DS] # -- Begin function f&o
+; ASM-NEXT:    .rename _Renamed..26f_o[DS],"f&o"
 ; ASM-NEXT:    .globl  ._Renamed..26f_o
+; ASM-NEXT:    .rename ._Renamed..26f_o,".f&o"
 ; ASM-NEXT:    .align  4
 ; ASM-NEXT:    .csect _Renamed..26f_o[DS],2
 ; ASM-NEXT:    .vbyte  4, ._Renamed..26f_o     # @"f&o"
@@ -65,10 +65,10 @@ declare i32 @"f\40o"(...)
 ; ASM-NEXT:    .csect .text[PR],2
 ; ASM-NEXT:  ._Renamed..26f_o:
 ; ASM:         bl ._Renamed..24f_o
-; ASM:         .rename _Renamed..265ff__o[DS],"f&_o" # -- Begin function f&_o
-; ASM-NEXT:    .globl  _Renamed..265ff__o[DS]
-; ASM-NEXT:    .rename ._Renamed..265ff__o,".f&_o"
+; ASM:         .globl  _Renamed..265ff__o[DS] # -- Begin function f&_o
+; ASM-NEXT:    .rename _Renamed..265ff__o[DS],"f&_o"
 ; ASM-NEXT:    .globl  ._Renamed..265ff__o
+; ASM-NEXT:    .rename ._Renamed..265ff__o,".f&_o"
 ; ASM-NEXT:    .align  4
 ; ASM-NEXT:    .csect _Renamed..265ff__o[DS],2
 ; ASM-NEXT:    .vbyte  4, ._Renamed..265ff__o  # @"f&_o"
@@ -77,21 +77,21 @@ declare i32 @"f\40o"(...)
 ; ASM-NEXT:    .csect .text[PR],2
 ; ASM-NEXT:  ._Renamed..265ff__o:
 ; ASM:         .csect .data[RW],2
-; ASM-NEXT:    .rename _Renamed..60f_o,"f`o"
 ; ASM-NEXT:    .globl  _Renamed..60f_o
+; ASM-NEXT:    .rename _Renamed..60f_o,"f`o"
 ; ASM-NEXT:    .align  2
 ; ASM-NEXT:  _Renamed..60f_o:
 ; ASM-NEXT:    .vbyte  4, 10                   # 0xa
-; ASM-NEXT:    .rename _Renamed..2222f_o_[RW],"f""o"""
 ; ASM-NEXT:    .comm _Renamed..2222f_o_[RW],4,2
-; ASM-NEXT:    .rename ._Renamed..40f_o,".f at o"
+; ASM-NEXT:    .rename _Renamed..2222f_o_[RW],"f""o"""
 ; ASM-NEXT:    .extern ._Renamed..40f_o
-; ASM-NEXT:    .rename _Renamed..40f_o[DS],"f at o"
+; ASM-NEXT:    .rename ._Renamed..40f_o,".f at o"
 ; ASM-NEXT:    .extern _Renamed..40f_o[DS]
+; ASM-NEXT:    .rename _Renamed..40f_o[DS],"f at o"
 ; ASM-NEXT:    .toc
 ; ASM-NEXT:  L..C0:
-; ASM-NEXT:    .rename _Renamed..40f_o[TC],"f at o"
 ; ASM-NEXT:    .tc _Renamed..40f_o[TC],_Renamed..40f_o[DS]
+; ASM-NEXT:    .rename _Renamed..40f_o[TC],"f at o"
 
 ; OBJ:       Disassembly of section .text:
 ; OBJ-EMPTY:


        


More information about the llvm-commits mailing list