llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-systemz

Author: None (llvmbot)

<details>
<summary>Changes</summary>

Backport 84bbaa097c591b32e0f20a546ae6397705ba5ceb

Requested by: @<!-- -->amy-kwan

---
Full diff: https://github.com/llvm/llvm-project/pull/178701.diff


7 Files Affected:

- (modified) llvm/include/llvm/MC/MCGOFFStreamer.h (+4-1) 
- (modified) llvm/include/llvm/MC/MCObjectStreamer.h (+2-1) 
- (modified) llvm/lib/MC/GOFFObjectWriter.cpp (+3) 
- (modified) llvm/lib/MC/MCGOFFStreamer.cpp (+13) 
- (modified) llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMAsmStreamer.cpp 
(+7-9) 
- (modified) llvm/test/CodeGen/SystemZ/zos-hlasm-out.ll (+1-1) 
- (added) llvm/test/CodeGen/SystemZ/zos-symbol-2.ll (+53) 


``````````diff
diff --git a/llvm/include/llvm/MC/MCGOFFStreamer.h 
b/llvm/include/llvm/MC/MCGOFFStreamer.h
index 886efe10d45df..756574d1caaf3 100644
--- a/llvm/include/llvm/MC/MCGOFFStreamer.h
+++ b/llvm/include/llvm/MC/MCGOFFStreamer.h
@@ -11,12 +11,13 @@
 
 #include "llvm/MC/MCObjectStreamer.h"
 #include "llvm/MC/MCObjectWriter.h"
+#include "llvm/Support/Compiler.h"
 
 namespace llvm {
 class GOFFObjectWriter;
 class MCSymbolGOFF;
 
-class MCGOFFStreamer : public MCObjectStreamer {
+class LLVM_ABI MCGOFFStreamer : public MCObjectStreamer {
 
 public:
   MCGOFFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> MAB,
@@ -31,6 +32,8 @@ class MCGOFFStreamer : public MCObjectStreamer {
 
   GOFFObjectWriter &getWriter();
 
+  void emitLabel(MCSymbol *Symbol, SMLoc Loc = SMLoc()) override;
+
   bool emitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
 
   void emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
diff --git a/llvm/include/llvm/MC/MCObjectStreamer.h 
b/llvm/include/llvm/MC/MCObjectStreamer.h
index 3c5a6ce42e4f8..5d43e32f02b86 100644
--- a/llvm/include/llvm/MC/MCObjectStreamer.h
+++ b/llvm/include/llvm/MC/MCObjectStreamer.h
@@ -14,6 +14,7 @@
 #include "llvm/MC/MCFixup.h"
 #include "llvm/MC/MCSection.h"
 #include "llvm/MC/MCStreamer.h"
+#include "llvm/Support/Compiler.h"
 
 namespace llvm {
 class MCContext;
@@ -36,7 +37,7 @@ class raw_pwrite_stream;
 /// are expected to subclass this interface to implement directives specific
 /// to that file format or custom semantics expected by the object writer
 /// implementation.
-class MCObjectStreamer : public MCStreamer {
+class LLVM_ABI MCObjectStreamer : public MCStreamer {
   std::unique_ptr<MCAssembler> Assembler;
   bool EmitEHFrame;
   bool EmitDebugFrame;
diff --git a/llvm/lib/MC/GOFFObjectWriter.cpp b/llvm/lib/MC/GOFFObjectWriter.cpp
index 366ca088449dc..cbe9c7eb2fac1 100644
--- a/llvm/lib/MC/GOFFObjectWriter.cpp
+++ b/llvm/lib/MC/GOFFObjectWriter.cpp
@@ -385,6 +385,9 @@ void GOFFWriter::defineSymbols() {
     } else if (Symbol.isInEDSection()) {
       Symbol.setIndex(++Ordinal);
       defineLabel(Symbol);
+    } else {
+      // Symbol is in PR section, the symbol refers to the section.
+      Symbol.setIndex(Symbol.getSection().getOrdinal());
     }
   }
 }
diff --git a/llvm/lib/MC/MCGOFFStreamer.cpp b/llvm/lib/MC/MCGOFFStreamer.cpp
index 51580e0063207..7c99fcbc5451c 100644
--- a/llvm/lib/MC/MCGOFFStreamer.cpp
+++ b/llvm/lib/MC/MCGOFFStreamer.cpp
@@ -55,6 +55,19 @@ void MCGOFFStreamer::changeSection(MCSection *Section, 
uint32_t Subsection) {
   }
 }
 
+void MCGOFFStreamer::emitLabel(MCSymbol *Symbol, SMLoc Loc) {
+  MCSectionGOFF *Section =
+      static_cast<MCSectionGOFF *>(getCurrentSectionOnly());
+  if (Section->isPR()) {
+    if (Section->getBeginSymbol() == nullptr)
+      Section->setBeginSymbol(Symbol);
+    else
+      getContext().reportError(
+          Loc, "only one symbol can be defined in a PR section.");
+  }
+  MCObjectStreamer::emitLabel(Symbol, Loc);
+}
+
 bool MCGOFFStreamer::emitSymbolAttribute(MCSymbol *Sym,
                                          MCSymbolAttr Attribute) {
   return static_cast<MCSymbolGOFF *>(Sym)->setSymbolAttribute(Attribute);
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMAsmStreamer.cpp 
b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMAsmStreamer.cpp
index 875b7c42e8db2..8a559e1ab261b 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMAsmStreamer.cpp
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMAsmStreamer.cpp
@@ -232,13 +232,15 @@ void SystemZHLASMAsmStreamer::emitLabel(MCSymbol *Symbol, 
SMLoc Loc) {
 
   MCStreamer::emitLabel(Sym, Loc);
 
-  // Emit ENTRY statement only if not implied by CSECT.
-  bool EmitEntry = true;
+  // Emit label and ENTRY statement only if not implied by CSECT. Do not emit a
+  // label if the symbol is on a PR section.
+  bool EmitLabelAndEntry =
+      !static_cast<MCSectionGOFF *>(getCurrentSectionOnly())->isPR();
   if (!Sym->isTemporary() && Sym->isInEDSection()) {
-    EmitEntry =
+    EmitLabelAndEntry =
         Sym->getName() !=
         static_cast<MCSectionGOFF &>(Sym->getSection()).getParent()->getName();
-    if (EmitEntry) {
+    if (EmitLabelAndEntry) {
       OS << " ENTRY " << Sym->getName();
       EmitEOL();
     }
@@ -248,12 +250,8 @@ void SystemZHLASMAsmStreamer::emitLabel(MCSymbol *Symbol, 
SMLoc Loc) {
     EmitEOL();
   }
 
-  // TODO Need to adjust this based on Label type
-  if (EmitEntry) {
+  if (EmitLabelAndEntry) {
     OS << Sym->getName() << " DS 0H";
-    // TODO Update LabelSuffix in SystemZMCAsmInfoGOFF once tests have been
-    // moved to HLASM syntax.
-    // OS << MAI->getLabelSuffix();
     EmitEOL();
   }
 }
diff --git a/llvm/test/CodeGen/SystemZ/zos-hlasm-out.ll 
b/llvm/test/CodeGen/SystemZ/zos-hlasm-out.ll
index 4415cbfee833d..e3d3b0d8825c1 100644
--- a/llvm/test/CodeGen/SystemZ/zos-hlasm-out.ll
+++ b/llvm/test/CodeGen/SystemZ/zos-hlasm-out.ll
@@ -36,8 +36,8 @@ define void @foo() {
 ; CHECK: DC AD(L#EPM_foo_0-L#PPA1_foo_0)
 ; CHECK-LABEL: L#.str DS 0H
 ; CHECK: DC XL10'48656C6C6F2025730A00'
+; CHECK: Greeting XATTR LINKAGE(XPLINK),REFERENCE(DATA),SCOPE(EXPORT)
 ; CHECK: DS 0B
-; CHECK-LABEL: Greeting DS 0H
 ; CHECK: DC AD(L#.str)
 ; CHECK: DS 0B
 ; CHECK-LABEL: L#.str.1 DS 0H
diff --git a/llvm/test/CodeGen/SystemZ/zos-symbol-2.ll 
b/llvm/test/CodeGen/SystemZ/zos-symbol-2.ll
new file mode 100644
index 0000000000000..ffea210fa9c7b
--- /dev/null
+++ b/llvm/test/CodeGen/SystemZ/zos-symbol-2.ll
@@ -0,0 +1,53 @@
+; RUN: llc <%s --mtriple s390x-ibm-zos -emit-gnuas-syntax-on-zos=false | 
FileCheck %s
+; RUN: llc <%s --mtriple s390x-ibm-zos --filetype=obj | \
+; RUN:   od -Ax -tx1 -v | FileCheck --check-prefix=CHECKREL --ignore-case %s
+
+@a = hidden global i64 0, align 8
+@b = external global i64, align 8
+
+define i64 @calc() {
+entry:
+  %0 = load i64, ptr @a, align 8
+  %1 = load i64, ptr @b, align 8
+  %add = add i64 %0, %1
+  ret i64 %add
+}
+
+; Check the global CSECT definition
+; CHECK:      stdin#C CSECT
+; CHECK-NEXT: C_CODE64 CATTR ALIGN(3),FILL(0),READONLY,RMODE(64)
+
+; Check the attributes on the function
+; CHECK:       ENTRY calc
+; CHECK-NEXT: calc XATTR LINKAGE(XPLINK),REFERENCE(CODE),SCOPE(EXPORT)
+; CHECK-NEXT: calc DS 0H
+
+; Check the definition of the variable
+; CHECK:      a CSECT
+; CHECK-NEXT: C_WSA64 CATTR 
ALIGN(3),FILL(0),DEFLOAD,NOTEXECUTABLE,RMODE(64),PART(a)
+; CHECK-NEXT: a XATTR LINKAGE(XPLINK),REFERENCE(DATA),SCOPE(LIBRARY)
+
+; Check the declaration of the external variable
+; CHECK:       EXTRN b
+; CHECK-NEXT: b XATTR LINKAGE(XPLINK),SCOPE(EXPORT)
+
+; Check the relocation data directory.
+;  03 is prefix byte
+;  2. is header type (RT_RLD)
+;  .1 is flag (record is continued)
+;  00 is version
+; CHECKREL:      000690 03 21 00 00 00 60 00 00 02 00 04 00 00 00 00 00
+; CHECKREL-NEXT: 0006a0 00 0b 00 00 00 02 00 00 00 4e 60 00 00 00 04 00
+; CHECKREL-NEXT: 0006b0 00 00 00 00 00 0c 00 00 00 00 08 00 00 00 00 00
+; CHECKREL-NEXT: 0006c0 00 0b 00 00 00 04 00 00 00 00 60 00 02 00 08 00
+; CHECKREL-NEXT: 0006d0 00 00 00 00 00 0c 20 00 00 00 08 00 00 00 00 00
+; Continuation of relocation data directory.
+;  03 is prefix byte
+;  2. is header type (RT_RLD)
+;  .2 is flag (record is continuation but not continued)
+;  00 is version
+; CHECKREL-NEXT: 0006e0 03 22 00 00 07 00 00 00 09 40 00 00 00 08 00 00
+; CHECKREL-NEXT: 0006f0 00 00 00 00 0e 00 00 00 08 00 00 00 00 00 00 00
+; CHECKREL-NEXT: 000700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+; CHECKREL-NEXT: 000710 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+; CHECKREL-NEXT: 000720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

``````````

</details>


https://github.com/llvm/llvm-project/pull/178701
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to