[llvm] [SystemZ] Split SystemZInstPrinter to two classes based on Asm dialect (PR #112975)

via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 21 12:30:41 PDT 2024


https://github.com/tltao updated https://github.com/llvm/llvm-project/pull/112975

>From 89b8c1de55e2a1600c083d100c4061341f337a23 Mon Sep 17 00:00:00 2001
From: Tony Tao <tonytao at ca.ibm.com>
Date: Fri, 18 Oct 2024 16:30:36 -0400
Subject: [PATCH 1/3] Split SystemZInstPrinter to two classes based on Asm
 dialect

---
 .../SystemZ/AsmParser/SystemZAsmParser.cpp    |  10 +-
 llvm/lib/Target/SystemZ/CMakeLists.txt        |   3 +-
 .../SystemZ/MCTargetDesc/CMakeLists.txt       |   4 +-
 .../MCTargetDesc/SystemZGNUInstPrinter.cpp    |  33 +++
 .../MCTargetDesc/SystemZGNUInstPrinter.h      |  46 +++
 .../MCTargetDesc/SystemZHLASMInstPrinter.cpp  |  35 +++
 .../MCTargetDesc/SystemZHLASMInstPrinter.h    |  45 +++
 .../MCTargetDesc/SystemZInstPrinter.cpp       | 266 ------------------
 .../MCTargetDesc/SystemZInstPrinterCommon.cpp | 246 ++++++++++++++++
 ...stPrinter.h => SystemZInstPrinterCommon.h} |  29 +-
 .../MCTargetDesc/SystemZMCTargetDesc.cpp      |   8 +-
 llvm/lib/Target/SystemZ/SystemZ.td            |  15 +
 llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp |  10 +-
 13 files changed, 454 insertions(+), 296 deletions(-)
 create mode 100644 llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.cpp
 create mode 100644 llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h
 create mode 100644 llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp
 create mode 100644 llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.h
 delete mode 100644 llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinter.cpp
 create mode 100644 llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.cpp
 rename llvm/lib/Target/SystemZ/MCTargetDesc/{SystemZInstPrinter.h => SystemZInstPrinterCommon.h} (78%)

diff --git a/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp b/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
index f0a85645b86289..b8469a6ba70eaf 100644
--- a/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
+++ b/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
@@ -6,7 +6,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "MCTargetDesc/SystemZInstPrinter.h"
+#include "MCTargetDesc/SystemZGNUInstPrinter.h"
 #include "MCTargetDesc/SystemZMCAsmInfo.h"
 #include "MCTargetDesc/SystemZMCTargetDesc.h"
 #include "SystemZTargetStreamer.h"
@@ -721,7 +721,7 @@ void SystemZOperand::print(raw_ostream &OS) const {
     OS << "Token:" << getToken();
     break;
   case KindReg:
-    OS << "Reg:" << SystemZInstPrinter::getRegisterName(getReg());
+    OS << "Reg:" << SystemZGNUInstPrinter::getRegisterName(getReg());
     break;
   case KindImm:
     OS << "Imm:";
@@ -743,10 +743,10 @@ void SystemZOperand::print(raw_ostream &OS) const {
       if (Op.MemKind == BDLMem)
         OS << *cast<MCConstantExpr>(Op.Length.Imm) << ",";
       else if (Op.MemKind == BDRMem)
-        OS << SystemZInstPrinter::getRegisterName(Op.Length.Reg) << ",";
+        OS << SystemZGNUInstPrinter::getRegisterName(Op.Length.Reg) << ",";
       if (Op.Index)
-        OS << SystemZInstPrinter::getRegisterName(Op.Index) << ",";
-      OS << SystemZInstPrinter::getRegisterName(Op.Base);
+        OS << SystemZGNUInstPrinter::getRegisterName(Op.Index) << ",";
+      OS << SystemZGNUInstPrinter::getRegisterName(Op.Base);
       OS << ")";
     }
     break;
diff --git a/llvm/lib/Target/SystemZ/CMakeLists.txt b/llvm/lib/Target/SystemZ/CMakeLists.txt
index 063e5bcd44171e..0d8f3eac6ee4f4 100644
--- a/llvm/lib/Target/SystemZ/CMakeLists.txt
+++ b/llvm/lib/Target/SystemZ/CMakeLists.txt
@@ -3,7 +3,8 @@ add_llvm_component_group(SystemZ HAS_JIT)
 set(LLVM_TARGET_DEFINITIONS SystemZ.td)
 
 tablegen(LLVM SystemZGenAsmMatcher.inc -gen-asm-matcher)
-tablegen(LLVM SystemZGenAsmWriter.inc -gen-asm-writer)
+tablegen(LLVM SystemZGenGNUAsmWriter.inc -gen-asm-writer)
+tablegen(LLVM SystemZGenHLASMAsmWriter.inc -gen-asm-writer -asmwriternum=1)
 tablegen(LLVM SystemZGenCallingConv.inc -gen-callingconv)
 tablegen(LLVM SystemZGenDAGISel.inc -gen-dag-isel)
 tablegen(LLVM SystemZGenDisassemblerTables.inc -gen-disassembler)
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/CMakeLists.txt b/llvm/lib/Target/SystemZ/MCTargetDesc/CMakeLists.txt
index 6700d793697087..9c00706531b88f 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/CMakeLists.txt
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/CMakeLists.txt
@@ -1,7 +1,9 @@
 add_llvm_component_library(LLVMSystemZDesc
   SystemZELFObjectWriter.cpp
+  SystemZGNUInstPrinter.cpp
   SystemZGOFFObjectWriter.cpp
-  SystemZInstPrinter.cpp
+  SystemZHLASMInstPrinter.cpp
+  SystemZInstPrinterCommon.cpp
   SystemZMCAsmBackend.cpp
   SystemZMCAsmInfo.cpp
   SystemZMCCodeEmitter.cpp
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.cpp
new file mode 100644
index 00000000000000..05113010794e0b
--- /dev/null
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.cpp
@@ -0,0 +1,33 @@
+//===- SystemZGNUInstPrinter.cpp - Convert SystemZ MCInst to GNU assembly -===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "SystemZGNUInstPrinter.h"
+#include "llvm/MC/MCInst.h"
+#include "llvm/MC/MCRegister.h"
+#include "llvm/Support/raw_ostream.h"
+
+using namespace llvm;
+
+#define DEBUG_TYPE "asm-printer"
+
+#include "SystemZGenGNUAsmWriter.inc"
+
+void SystemZGNUInstPrinter::printFormattedRegName(const MCAsmInfo *MAI,
+                                                  MCRegister Reg,
+                                                  raw_ostream &O) const {
+  const char *RegName = getRegisterName(Reg);
+  markup(O, Markup::Register) << '%' << RegName;
+}
+
+void SystemZGNUInstPrinter::printInst(const MCInst *MI, uint64_t Address,
+                                      StringRef Annot,
+                                      const MCSubtargetInfo &STI,
+                                      raw_ostream &O) {
+  printInstruction(MI, Address, O);
+  printAnnotation(O, Annot);
+}
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h
new file mode 100644
index 00000000000000..a1c1a7cad7b72e
--- /dev/null
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h
@@ -0,0 +1,46 @@
+//==- SystemZGNUInstPrinter.h - Convert SystemZ MCInst to assembly --*- C++ -*-==//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===-------------------------------------------------------------------------===//
+//
+// This class prints a SystemZ MCInst to a .s file in GNU assembly format.
+//
+//===-------------------------------------------------------------------------===//
+
+#ifndef LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZGNUINSTPRINTER_H
+#define LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZGNUINSTPRINTER_H
+
+#include "SystemZInstPrinterCommon.h"
+#include "llvm/MC/MCInstPrinter.h"
+#include <cstdint>
+
+namespace llvm {
+
+class MCOperand;
+
+class SystemZGNUInstPrinter : public SystemZInstPrinterCommon {
+public:
+  SystemZGNUInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
+                        const MCRegisterInfo &MRI)
+      : SystemZInstPrinterCommon(MAI, MII, MRI) {}
+
+  // Automatically generated by tblgen.
+  std::pair<const char *, uint64_t> getMnemonic(const MCInst *MI) override;
+  void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O);
+  static const char *getRegisterName(MCRegister Reg);
+
+  // Override MCInstPrinter.
+  void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,
+                 const MCSubtargetInfo &STI, raw_ostream &O) override;
+
+private:
+  void printFormattedRegName(const MCAsmInfo *MAI, MCRegister Reg,
+                             raw_ostream &O) const override;
+};
+
+} // end namespace llvm
+
+#endif // LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZGNUINSTPRINTER_H
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp
new file mode 100644
index 00000000000000..644e95ffad97cf
--- /dev/null
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp
@@ -0,0 +1,35 @@
+//===- SystemZHLASMInstPrinter.cpp - Convert SystemZ MCInst to HLASM assembly -===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--------------------------------------------------------------------------===//
+
+#include "SystemZHLASMInstPrinter.h"
+#include "llvm/MC/MCInst.h"
+#include "llvm/MC/MCRegister.h"
+#include "llvm/Support/raw_ostream.h"
+
+using namespace llvm;
+
+#define DEBUG_TYPE "asm-printer"
+
+#include "SystemZGenHLASMAsmWriter.inc"
+
+void SystemZHLASMInstPrinter::printFormattedRegName(const MCAsmInfo *MAI,
+                                                    MCRegister Reg,
+                                                    raw_ostream &O) const {
+  const char *RegName = getRegisterName(Reg);
+  // Skip register prefix so that only register number is left
+  assert(isalpha(RegName[0]) && isdigit(RegName[1]));
+  markup(O, Markup::Register) << (RegName + 1);
+}
+
+void SystemZHLASMInstPrinter::printInst(const MCInst *MI, uint64_t Address,
+                                        StringRef Annot,
+                                        const MCSubtargetInfo &STI,
+                                        raw_ostream &O) {
+  printInstruction(MI, Address, O);
+  printAnnotation(O, Annot);
+}
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.h b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.h
new file mode 100644
index 00000000000000..2d535a52dd583a
--- /dev/null
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.h
@@ -0,0 +1,45 @@
+//- SystemZHLASMInstPrinter.h - Convert SystemZ MCInst to assembly --*- C++ -*-//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This class prints a SystemZ MCInst to a .s file in HLASM assembly format.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZHLASMINSTPRINTER_H
+#define LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZHLASMINSTPRINTER_H
+
+#include "SystemZInstPrinterCommon.h"
+#include "llvm/MC/MCInstPrinter.h"
+#include <cstdint>
+
+namespace llvm {
+
+class MCOperand;
+
+class SystemZHLASMInstPrinter : public SystemZInstPrinterCommon {
+public:
+  SystemZHLASMInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
+                          const MCRegisterInfo &MRI)
+      : SystemZInstPrinterCommon(MAI, MII, MRI) {}
+
+  // Automatically generated by tblgen.
+  std::pair<const char *, uint64_t> getMnemonic(const MCInst *MI) override;
+  void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O);
+  static const char *getRegisterName(MCRegister Reg);
+
+  void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,
+                 const MCSubtargetInfo &STI, raw_ostream &O) override;
+
+private:
+  void printFormattedRegName(const MCAsmInfo *MAI, MCRegister Reg,
+                             raw_ostream &O) const override;
+};
+
+} // end namespace llvm
+
+#endif // LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZHLASMINSTPRINTER_H
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinter.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinter.cpp
deleted file mode 100644
index fa534fadc32305..00000000000000
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinter.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-//===- SystemZInstPrinter.cpp - Convert SystemZ MCInst to assembly syntax -===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "SystemZInstPrinter.h"
-#include "llvm/MC/MCExpr.h"
-#include "llvm/MC/MCInst.h"
-#include "llvm/MC/MCRegister.h"
-#include "llvm/MC/MCSymbol.h"
-#include "llvm/Support/Casting.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/MathExtras.h"
-#include "llvm/Support/raw_ostream.h"
-#include <cassert>
-#include <cstdint>
-
-using namespace llvm;
-
-#define DEBUG_TYPE "asm-printer"
-
-#include "SystemZGenAsmWriter.inc"
-
-void SystemZInstPrinter::printAddress(const MCAsmInfo *MAI, MCRegister Base,
-                                      const MCOperand &DispMO, MCRegister Index,
-                                      raw_ostream &O) {
-  printOperand(DispMO, MAI, O);
-  if (Base || Index) {
-    O << '(';
-    if (Index) {
-      printFormattedRegName(MAI, Index, O);
-      O << ',';
-    }
-    if (Base)
-      printFormattedRegName(MAI, Base, O);
-    else
-      O << '0';
-    O << ')';
-  }
-}
-
-void SystemZInstPrinter::printOperand(const MCOperand &MO, const MCAsmInfo *MAI,
-                                      raw_ostream &O) {
-  if (MO.isReg()) {
-    if (!MO.getReg())
-      O << '0';
-    else
-      printFormattedRegName(MAI, MO.getReg(), O);
-  }
-  else if (MO.isImm())
-    markup(O, Markup::Immediate) << MO.getImm();
-  else if (MO.isExpr())
-    MO.getExpr()->print(O, MAI);
-  else
-    llvm_unreachable("Invalid operand");
-}
-
-void SystemZInstPrinter::printFormattedRegName(const MCAsmInfo *MAI,
-                                               MCRegister Reg,
-                                               raw_ostream &O) const {
-  const char *RegName = getRegisterName(Reg);
-  if (MAI->getAssemblerDialect() == AD_HLASM) {
-    // Skip register prefix so that only register number is left
-    assert(isalpha(RegName[0]) && isdigit(RegName[1]));
-    markup(O, Markup::Register) << (RegName + 1);
-  } else
-    markup(O, Markup::Register) << '%' << RegName;
-}
-
-void SystemZInstPrinter::printRegName(raw_ostream &O, MCRegister Reg) const {
-  printFormattedRegName(&MAI, Reg, O);
-}
-
-void SystemZInstPrinter::printInst(const MCInst *MI, uint64_t Address,
-                                   StringRef Annot, const MCSubtargetInfo &STI,
-                                   raw_ostream &O) {
-  printInstruction(MI, Address, O);
-  printAnnotation(O, Annot);
-}
-
-template <unsigned N>
-void SystemZInstPrinter::printUImmOperand(const MCInst *MI, int OpNum,
-                                          raw_ostream &O) {
-  const MCOperand &MO = MI->getOperand(OpNum);
-  if (MO.isExpr()) {
-    O << *MO.getExpr();
-    return;
-  }
-  uint64_t Value = static_cast<uint64_t>(MO.getImm());
-  assert(isUInt<N>(Value) && "Invalid uimm argument");
-  markup(O, Markup::Immediate) << Value;
-}
-
-template <unsigned N>
-void SystemZInstPrinter::printSImmOperand(const MCInst *MI, int OpNum,
-                                          raw_ostream &O) {
-  const MCOperand &MO = MI->getOperand(OpNum);
-  if (MO.isExpr()) {
-    O << *MO.getExpr();
-    return;
-  }
-  int64_t Value = MI->getOperand(OpNum).getImm();
-  assert(isInt<N>(Value) && "Invalid simm argument");
-  markup(O, Markup::Immediate) << Value;
-}
-
-void SystemZInstPrinter::printU1ImmOperand(const MCInst *MI, int OpNum,
-                                           raw_ostream &O) {
-  printUImmOperand<1>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printU2ImmOperand(const MCInst *MI, int OpNum,
-                                           raw_ostream &O) {
-  printUImmOperand<2>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printU3ImmOperand(const MCInst *MI, int OpNum,
-                                           raw_ostream &O) {
-  printUImmOperand<3>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printU4ImmOperand(const MCInst *MI, int OpNum,
-                                           raw_ostream &O) {
-  printUImmOperand<4>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printS8ImmOperand(const MCInst *MI, int OpNum,
-                                           raw_ostream &O) {
-  printSImmOperand<8>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printU8ImmOperand(const MCInst *MI, int OpNum,
-                                           raw_ostream &O) {
-  printUImmOperand<8>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printU12ImmOperand(const MCInst *MI, int OpNum,
-                                            raw_ostream &O) {
-  printUImmOperand<12>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printS16ImmOperand(const MCInst *MI, int OpNum,
-                                            raw_ostream &O) {
-  printSImmOperand<16>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printU16ImmOperand(const MCInst *MI, int OpNum,
-                                            raw_ostream &O) {
-  printUImmOperand<16>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printS32ImmOperand(const MCInst *MI, int OpNum,
-                                            raw_ostream &O) {
-  printSImmOperand<32>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printU32ImmOperand(const MCInst *MI, int OpNum,
-                                            raw_ostream &O) {
-  printUImmOperand<32>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printU48ImmOperand(const MCInst *MI, int OpNum,
-                                            raw_ostream &O) {
-  printUImmOperand<48>(MI, OpNum, O);
-}
-
-void SystemZInstPrinter::printPCRelOperand(const MCInst *MI, int OpNum,
-                                           raw_ostream &O) {
-  const MCOperand &MO = MI->getOperand(OpNum);
-  if (MO.isImm()) {
-    WithMarkup M = markup(O, Markup::Immediate);
-    O << "0x";
-    O.write_hex(MO.getImm());
-  } else
-    MO.getExpr()->print(O, &MAI);
-}
-
-void SystemZInstPrinter::printPCRelTLSOperand(const MCInst *MI,
-                                              uint64_t Address, int OpNum,
-                                              raw_ostream &O) {
-  // Output the PC-relative operand.
-  printPCRelOperand(MI, OpNum, O);
-
-  // Output the TLS marker if present.
-  if ((unsigned)OpNum + 1 < MI->getNumOperands()) {
-    const MCOperand &MO = MI->getOperand(OpNum + 1);
-    const MCSymbolRefExpr &refExp = cast<MCSymbolRefExpr>(*MO.getExpr());
-    switch (refExp.getKind()) {
-      case MCSymbolRefExpr::VK_TLSGD:
-        O << ":tls_gdcall:";
-        break;
-      case MCSymbolRefExpr::VK_TLSLDM:
-        O << ":tls_ldcall:";
-        break;
-      default:
-        llvm_unreachable("Unexpected symbol kind");
-    }
-    O << refExp.getSymbol().getName();
-  }
-}
-
-void SystemZInstPrinter::printOperand(const MCInst *MI, int OpNum,
-                                      raw_ostream &O) {
-  printOperand(MI->getOperand(OpNum), &MAI, O);
-}
-
-void SystemZInstPrinter::printBDAddrOperand(const MCInst *MI, int OpNum,
-                                            raw_ostream &O) {
-  printAddress(&MAI, MI->getOperand(OpNum).getReg(), MI->getOperand(OpNum + 1),
-               0, O);
-}
-
-void SystemZInstPrinter::printBDXAddrOperand(const MCInst *MI, int OpNum,
-                                             raw_ostream &O) {
-  printAddress(&MAI, MI->getOperand(OpNum).getReg(), MI->getOperand(OpNum + 1),
-               MI->getOperand(OpNum + 2).getReg(), O);
-}
-
-void SystemZInstPrinter::printBDLAddrOperand(const MCInst *MI, int OpNum,
-                                             raw_ostream &O) {
-  unsigned Base = MI->getOperand(OpNum).getReg();
-  const MCOperand &DispMO = MI->getOperand(OpNum + 1);
-  uint64_t Length = MI->getOperand(OpNum + 2).getImm();
-  printOperand(DispMO, &MAI, O);
-  O << '(' << Length;
-  if (Base) {
-    O << ",";
-    printRegName(O, Base);
-  }
-  O << ')';
-}
-
-void SystemZInstPrinter::printBDRAddrOperand(const MCInst *MI, int OpNum,
-                                             raw_ostream &O) {
-  unsigned Base = MI->getOperand(OpNum).getReg();
-  const MCOperand &DispMO = MI->getOperand(OpNum + 1);
-  unsigned Length = MI->getOperand(OpNum + 2).getReg();
-  printOperand(DispMO, &MAI, O);
-  O << "(";
-  printRegName(O, Length);
-  if (Base) {
-    O << ",";
-    printRegName(O, Base);
-  }
-  O << ')';
-}
-
-void SystemZInstPrinter::printBDVAddrOperand(const MCInst *MI, int OpNum,
-                                             raw_ostream &O) {
-  printAddress(&MAI, MI->getOperand(OpNum).getReg(), MI->getOperand(OpNum + 1),
-               MI->getOperand(OpNum + 2).getReg(), O);
-}
-
-void SystemZInstPrinter::printCond4Operand(const MCInst *MI, int OpNum,
-                                           raw_ostream &O) {
-  static const char *const CondNames[] = {
-    "o", "h", "nle", "l", "nhe", "lh", "ne",
-    "e", "nlh", "he", "nl", "le", "nh", "no"
-  };
-  uint64_t Imm = MI->getOperand(OpNum).getImm();
-  assert(Imm > 0 && Imm < 15 && "Invalid condition");
-  O << CondNames[Imm - 1];
-}
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.cpp
new file mode 100644
index 00000000000000..ce04877fcbe4b5
--- /dev/null
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.cpp
@@ -0,0 +1,246 @@
+//=- SystemZInstPrinterCommon.cpp - Common SystemZ MCInst to assembly funcs -=//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "SystemZInstPrinterCommon.h"
+#include "llvm/MC/MCExpr.h"
+#include "llvm/MC/MCInst.h"
+#include "llvm/MC/MCRegister.h"
+#include "llvm/MC/MCSymbol.h"
+#include "llvm/Support/Casting.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/MathExtras.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cassert>
+#include <cstdint>
+
+using namespace llvm;
+
+#define DEBUG_TYPE "asm-printer"
+
+void SystemZInstPrinterCommon::printAddress(const MCAsmInfo *MAI,
+                                            MCRegister Base,
+                                            const MCOperand &DispMO,
+                                            MCRegister Index, raw_ostream &O) {
+  printOperand(DispMO, MAI, O);
+  if (Base || Index) {
+    O << '(';
+    if (Index) {
+      printRegName(O, Index);
+      O << ',';
+    }
+    if (Base)
+      printRegName(O, Index);
+    else
+      O << '0';
+    O << ')';
+  }
+}
+
+void SystemZInstPrinterCommon::printOperand(const MCOperand &MO,
+                                            const MCAsmInfo *MAI,
+                                            raw_ostream &O) {
+  if (MO.isReg()) {
+    if (!MO.getReg())
+      O << '0';
+    else
+      printRegName(O, MO.getReg());
+  } else if (MO.isImm())
+    markup(O, Markup::Immediate) << MO.getImm();
+  else if (MO.isExpr())
+    MO.getExpr()->print(O, MAI);
+  else
+    llvm_unreachable("Invalid operand");
+}
+
+void SystemZInstPrinterCommon::printRegName(raw_ostream &O,
+                                            MCRegister Reg) const {
+  printFormattedRegName(&MAI, Reg, O);
+}
+
+template <unsigned N>
+void SystemZInstPrinterCommon::printUImmOperand(const MCInst *MI, int OpNum,
+                                                raw_ostream &O) {
+  const MCOperand &MO = MI->getOperand(OpNum);
+  if (MO.isExpr()) {
+    O << *MO.getExpr();
+    return;
+  }
+  uint64_t Value = static_cast<uint64_t>(MO.getImm());
+  assert(isUInt<N>(Value) && "Invalid uimm argument");
+  markup(O, Markup::Immediate) << Value;
+}
+
+template <unsigned N>
+void SystemZInstPrinterCommon::printSImmOperand(const MCInst *MI, int OpNum,
+                                                raw_ostream &O) {
+  const MCOperand &MO = MI->getOperand(OpNum);
+  if (MO.isExpr()) {
+    O << *MO.getExpr();
+    return;
+  }
+  int64_t Value = MI->getOperand(OpNum).getImm();
+  assert(isInt<N>(Value) && "Invalid simm argument");
+  markup(O, Markup::Immediate) << Value;
+}
+
+void SystemZInstPrinterCommon::printU1ImmOperand(const MCInst *MI, int OpNum,
+                                                 raw_ostream &O) {
+  printUImmOperand<1>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printU2ImmOperand(const MCInst *MI, int OpNum,
+                                                 raw_ostream &O) {
+  printUImmOperand<2>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printU3ImmOperand(const MCInst *MI, int OpNum,
+                                                 raw_ostream &O) {
+  printUImmOperand<3>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printU4ImmOperand(const MCInst *MI, int OpNum,
+                                                 raw_ostream &O) {
+  printUImmOperand<4>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printS8ImmOperand(const MCInst *MI, int OpNum,
+                                                 raw_ostream &O) {
+  printSImmOperand<8>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printU8ImmOperand(const MCInst *MI, int OpNum,
+                                                 raw_ostream &O) {
+  printUImmOperand<8>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printU12ImmOperand(const MCInst *MI, int OpNum,
+                                                  raw_ostream &O) {
+  printUImmOperand<12>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printS16ImmOperand(const MCInst *MI, int OpNum,
+                                                  raw_ostream &O) {
+  printSImmOperand<16>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printU16ImmOperand(const MCInst *MI, int OpNum,
+                                                  raw_ostream &O) {
+  printUImmOperand<16>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printS32ImmOperand(const MCInst *MI, int OpNum,
+                                                  raw_ostream &O) {
+  printSImmOperand<32>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printU32ImmOperand(const MCInst *MI, int OpNum,
+                                                  raw_ostream &O) {
+  printUImmOperand<32>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printU48ImmOperand(const MCInst *MI, int OpNum,
+                                                  raw_ostream &O) {
+  printUImmOperand<48>(MI, OpNum, O);
+}
+
+void SystemZInstPrinterCommon::printPCRelOperand(const MCInst *MI, int OpNum,
+                                                 raw_ostream &O) {
+  const MCOperand &MO = MI->getOperand(OpNum);
+  if (MO.isImm()) {
+    WithMarkup M = markup(O, Markup::Immediate);
+    O << "0x";
+    O.write_hex(MO.getImm());
+  } else
+    MO.getExpr()->print(O, &MAI);
+}
+
+void SystemZInstPrinterCommon::printPCRelTLSOperand(const MCInst *MI,
+                                                    uint64_t Address, int OpNum,
+                                                    raw_ostream &O) {
+  // Output the PC-relative operand.
+  printPCRelOperand(MI, OpNum, O);
+
+  // Output the TLS marker if present.
+  if ((unsigned)OpNum + 1 < MI->getNumOperands()) {
+    const MCOperand &MO = MI->getOperand(OpNum + 1);
+    const MCSymbolRefExpr &refExp = cast<MCSymbolRefExpr>(*MO.getExpr());
+    switch (refExp.getKind()) {
+    case MCSymbolRefExpr::VK_TLSGD:
+      O << ":tls_gdcall:";
+      break;
+    case MCSymbolRefExpr::VK_TLSLDM:
+      O << ":tls_ldcall:";
+      break;
+    default:
+      llvm_unreachable("Unexpected symbol kind");
+    }
+    O << refExp.getSymbol().getName();
+  }
+}
+
+void SystemZInstPrinterCommon::printOperand(const MCInst *MI, int OpNum,
+                                            raw_ostream &O) {
+  printOperand(MI->getOperand(OpNum), &MAI, O);
+}
+
+void SystemZInstPrinterCommon::printBDAddrOperand(const MCInst *MI, int OpNum,
+                                                  raw_ostream &O) {
+  printAddress(&MAI, MI->getOperand(OpNum).getReg(), MI->getOperand(OpNum + 1),
+               0, O);
+}
+
+void SystemZInstPrinterCommon::printBDXAddrOperand(const MCInst *MI, int OpNum,
+                                                   raw_ostream &O) {
+  printAddress(&MAI, MI->getOperand(OpNum).getReg(), MI->getOperand(OpNum + 1),
+               MI->getOperand(OpNum + 2).getReg(), O);
+}
+
+void SystemZInstPrinterCommon::printBDLAddrOperand(const MCInst *MI, int OpNum,
+                                                   raw_ostream &O) {
+  unsigned Base = MI->getOperand(OpNum).getReg();
+  const MCOperand &DispMO = MI->getOperand(OpNum + 1);
+  uint64_t Length = MI->getOperand(OpNum + 2).getImm();
+  printOperand(DispMO, &MAI, O);
+  O << '(' << Length;
+  if (Base) {
+    O << ",";
+    printRegName(O, Base);
+  }
+  O << ')';
+}
+
+void SystemZInstPrinterCommon::printBDRAddrOperand(const MCInst *MI, int OpNum,
+                                                   raw_ostream &O) {
+  unsigned Base = MI->getOperand(OpNum).getReg();
+  const MCOperand &DispMO = MI->getOperand(OpNum + 1);
+  unsigned Length = MI->getOperand(OpNum + 2).getReg();
+  printOperand(DispMO, &MAI, O);
+  O << "(";
+  printRegName(O, Length);
+  if (Base) {
+    O << ",";
+    printRegName(O, Base);
+  }
+  O << ')';
+}
+
+void SystemZInstPrinterCommon::printBDVAddrOperand(const MCInst *MI, int OpNum,
+                                                   raw_ostream &O) {
+  printAddress(&MAI, MI->getOperand(OpNum).getReg(), MI->getOperand(OpNum + 1),
+               MI->getOperand(OpNum + 2).getReg(), O);
+}
+
+void SystemZInstPrinterCommon::printCond4Operand(const MCInst *MI, int OpNum,
+                                                 raw_ostream &O) {
+  static const char *const CondNames[] = {"o",  "h",  "nle", "l",   "nhe",
+                                          "lh", "ne", "e",   "nlh", "he",
+                                          "nl", "le", "nh",  "no"};
+  uint64_t Imm = MI->getOperand(OpNum).getImm();
+  assert(Imm > 0 && Imm < 15 && "Invalid condition");
+  O << CondNames[Imm - 1];
+}
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinter.h b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.h
similarity index 78%
rename from llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinter.h
rename to llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.h
index 4e7490dad2996b..0f09aba0121c92 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinter.h
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.h
@@ -1,4 +1,4 @@
-//==- SystemZInstPrinter.h - Convert SystemZ MCInst to assembly --*- C++ -*-==//
+//== SystemZInstPrinterCommon.h - Common SystemZ InstPrinter funcs *- C++ -*==//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -10,28 +10,24 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZINSTPRINTER_H
-#define LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZINSTPRINTER_H
+#ifndef LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZINSTPRINTERCOMMON_H
+#define LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZINSTPRINTERCOMMON_H
 
 #include "SystemZMCAsmInfo.h"
 #include "llvm/MC/MCInstPrinter.h"
+#include "llvm/MC/MCRegister.h"
 #include <cstdint>
 
 namespace llvm {
 
 class MCOperand;
 
-class SystemZInstPrinter : public MCInstPrinter {
+class SystemZInstPrinterCommon : public MCInstPrinter {
 public:
-  SystemZInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
-                     const MCRegisterInfo &MRI)
+  SystemZInstPrinterCommon(const MCAsmInfo &MAI, const MCInstrInfo &MII,
+                           const MCRegisterInfo &MRI)
     : MCInstPrinter(MAI, MII, MRI) {}
 
-  // Automatically generated by tblgen.
-  std::pair<const char *, uint64_t> getMnemonic(const MCInst *MI) override;
-  void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O);
-  static const char *getRegisterName(MCRegister Reg);
-
   // Print an address with the given base, displacement and index.
   void printAddress(const MCAsmInfo *MAI, MCRegister Base,
                     const MCOperand &DispMO, MCRegister Index, raw_ostream &O);
@@ -39,16 +35,13 @@ class SystemZInstPrinter : public MCInstPrinter {
   // Print the given operand.
   void printOperand(const MCOperand &MO, const MCAsmInfo *MAI, raw_ostream &O);
 
-  void printFormattedRegName(const MCAsmInfo *MAI, MCRegister Reg,
-                             raw_ostream &O) const;
+  virtual void printFormattedRegName(const MCAsmInfo *MAI, MCRegister Reg,
+                                     raw_ostream &O) const {}
 
   // Override MCInstPrinter.
   void printRegName(raw_ostream &O, MCRegister Reg) const override;
 
-  void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,
-                 const MCSubtargetInfo &STI, raw_ostream &O) override;
-
-private:
+protected:
   template <unsigned N>
   void printUImmOperand(const MCInst *MI, int OpNum, raw_ostream &O);
   template <unsigned N>
@@ -92,4 +85,4 @@ class SystemZInstPrinter : public MCInstPrinter {
 
 } // end namespace llvm
 
-#endif // LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZINSTPRINTER_H
+#endif // LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZINSTPRINTERCOMMON_H
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp
index f58674ee118ee9..058318ab89c054 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp
@@ -6,8 +6,9 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "SystemZGNUInstPrinter.h"
 #include "SystemZMCTargetDesc.h"
-#include "SystemZInstPrinter.h"
+#include "SystemZHLASMInstPrinter.h"
 #include "SystemZMCAsmInfo.h"
 #include "SystemZTargetStreamer.h"
 #include "TargetInfo/SystemZTargetInfo.h"
@@ -186,7 +187,10 @@ static MCInstPrinter *createSystemZMCInstPrinter(const Triple &T,
                                                  const MCAsmInfo &MAI,
                                                  const MCInstrInfo &MII,
                                                  const MCRegisterInfo &MRI) {
-  return new SystemZInstPrinter(MAI, MII, MRI);
+  if (SyntaxVariant == AD_HLASM)
+    return new SystemZHLASMInstPrinter(MAI, MII, MRI);
+
+  return new SystemZGNUInstPrinter(MAI, MII, MRI);
 }
 
 void SystemZTargetStreamer::emitConstantPools() {
diff --git a/llvm/lib/Target/SystemZ/SystemZ.td b/llvm/lib/Target/SystemZ/SystemZ.td
index 9d0c77eafa2e29..ec110645c62ddb 100644
--- a/llvm/lib/Target/SystemZ/SystemZ.td
+++ b/llvm/lib/Target/SystemZ/SystemZ.td
@@ -81,6 +81,20 @@ def HLASMAsmParserVariant : AsmParserVariant {
   string Name = "hlasm";
 }
 
+//===----------------------------------------------------------------------===//
+// Assembly writer
+//===----------------------------------------------------------------------===//
+
+// The SystemZ target supports two different syntaxes for emitting machine code.
+def GNUAsmWriter : AsmWriter {
+  string AsmWriterClassName  = "GNUInstPrinter";
+  int Variant = 0;
+}
+def HLASMAsmWriter : AsmWriter {
+  string AsmWriterClassName  = "HLASMInstPrinter";
+  int Variant = 1;
+}
+
 //===----------------------------------------------------------------------===//
 // Top-level target declaration
 //===----------------------------------------------------------------------===//
@@ -89,5 +103,6 @@ def SystemZ : Target {
   let InstructionSet = SystemZInstrInfo;
   let AssemblyParsers = [SystemZAsmParser];
   let AssemblyParserVariants = [GNUAsmParserVariant, HLASMAsmParserVariant];
+  let AssemblyWriters = [GNUAsmWriter, HLASMAsmWriter];
   let AllowRegisterRenaming = 1;
 }
diff --git a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
index ed400e9eceb9ca..050a482c69d528 100644
--- a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
@@ -12,7 +12,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "SystemZAsmPrinter.h"
-#include "MCTargetDesc/SystemZInstPrinter.h"
+#include "MCTargetDesc/SystemZGNUInstPrinter.h"
+#include "MCTargetDesc/SystemZHLASMInstPrinter.h"
 #include "MCTargetDesc/SystemZMCExpr.h"
 #include "SystemZConstantPoolValue.h"
 #include "SystemZMCInstLower.h"
@@ -882,13 +883,16 @@ void SystemZAsmPrinter::emitMachineConstantPoolValue(
 
 static void printFormattedRegName(const MCAsmInfo *MAI, unsigned RegNo,
                                   raw_ostream &OS) {
-  const char *RegName = SystemZInstPrinter::getRegisterName(RegNo);
+  const char *RegName;
   if (MAI->getAssemblerDialect() == AD_HLASM) {
+    RegName = SystemZHLASMInstPrinter::getRegisterName(RegNo);
     // Skip register prefix so that only register number is left
     assert(isalpha(RegName[0]) && isdigit(RegName[1]));
     OS << (RegName + 1);
-  } else
+  } else {
+    RegName = SystemZGNUInstPrinter::getRegisterName(RegNo);
     OS << '%' << RegName;
+  }
 }
 
 static void printReg(unsigned Reg, const MCAsmInfo *MAI, raw_ostream &OS) {

>From 59ebdf44fbfd4b87c55fc3b4ee186f0a0c143fbd Mon Sep 17 00:00:00 2001
From: Tony Tao <tonytao at ca.ibm.com>
Date: Mon, 21 Oct 2024 15:27:16 -0400
Subject: [PATCH 2/3] fix typo and formatting

---
 .../lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h | 6 +++---
 .../Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp | 4 ++--
 .../Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.h   | 2 +-
 .../SystemZ/MCTargetDesc/SystemZInstPrinterCommon.cpp       | 2 +-
 .../Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.h  | 2 +-
 .../lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp | 2 +-
 6 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h
index a1c1a7cad7b72e..a7df82f7c16eab 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h
@@ -1,14 +1,14 @@
-//==- SystemZGNUInstPrinter.h - Convert SystemZ MCInst to assembly --*- C++ -*-==//
+//==- SystemZGNUInstPrinter.h - Convert SystemZ MCInst to assembly -*- C++ -*-==//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
-//===-------------------------------------------------------------------------===//
+//===------------------------------------------------------------------------===//
 //
 // This class prints a SystemZ MCInst to a .s file in GNU assembly format.
 //
-//===-------------------------------------------------------------------------===//
+//===------------------------------------------------------------------------===//
 
 #ifndef LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZGNUINSTPRINTER_H
 #define LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZGNUINSTPRINTER_H
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp
index 644e95ffad97cf..6d975295c17fff 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp
@@ -1,10 +1,10 @@
-//===- SystemZHLASMInstPrinter.cpp - Convert SystemZ MCInst to HLASM assembly -===//
+//===- SystemZHLASMInstPrinter.cpp - Convert SystemZ MCInst to HLASM assembly -==//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
-//===--------------------------------------------------------------------------===//
+//===--------------------------------------------------------------------------==//
 
 #include "SystemZHLASMInstPrinter.h"
 #include "llvm/MC/MCInst.h"
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.h b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.h
index 2d535a52dd583a..9a69e012c72942 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.h
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.h
@@ -1,4 +1,4 @@
-//- SystemZHLASMInstPrinter.h - Convert SystemZ MCInst to assembly --*- C++ -*-//
+//- SystemZHLASMInstPrinter.h - Convert SystemZ MCInst to assembly -*- C++ -*-//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.cpp
index ce04877fcbe4b5..00560ab1f4b18d 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.cpp
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.cpp
@@ -34,7 +34,7 @@ void SystemZInstPrinterCommon::printAddress(const MCAsmInfo *MAI,
       O << ',';
     }
     if (Base)
-      printRegName(O, Index);
+      printRegName(O, Base);
     else
       O << '0';
     O << ')';
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.h b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.h
index 0f09aba0121c92..9a972824f7ffb5 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.h
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.h
@@ -26,7 +26,7 @@ class SystemZInstPrinterCommon : public MCInstPrinter {
 public:
   SystemZInstPrinterCommon(const MCAsmInfo &MAI, const MCInstrInfo &MII,
                            const MCRegisterInfo &MRI)
-    : MCInstPrinter(MAI, MII, MRI) {}
+      : MCInstPrinter(MAI, MII, MRI) {}
 
   // Print an address with the given base, displacement and index.
   void printAddress(const MCAsmInfo *MAI, MCRegister Base,
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp
index 058318ab89c054..333221c46ebb8b 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.cpp
@@ -6,8 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "SystemZGNUInstPrinter.h"
 #include "SystemZMCTargetDesc.h"
+#include "SystemZGNUInstPrinter.h"
 #include "SystemZHLASMInstPrinter.h"
 #include "SystemZMCAsmInfo.h"
 #include "SystemZTargetStreamer.h"

>From 2f4a789225cfb843f185ce65e5e6f7f93809c327 Mon Sep 17 00:00:00 2001
From: Tony Tao <tonytao at ca.ibm.com>
Date: Mon, 21 Oct 2024 15:30:30 -0400
Subject: [PATCH 3/3] more format fixes

---
 .../lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h | 6 +++---
 .../Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h
index a7df82f7c16eab..8f62ae0e16c006 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZGNUInstPrinter.h
@@ -1,14 +1,14 @@
-//==- SystemZGNUInstPrinter.h - Convert SystemZ MCInst to assembly -*- C++ -*-==//
+//=- SystemZGNUInstPrinter.h - Convert SystemZ MCInst to assembly -*- C++ -*-=//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
-//===------------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
 //
 // This class prints a SystemZ MCInst to a .s file in GNU assembly format.
 //
-//===------------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
 
 #ifndef LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZGNUINSTPRINTER_H
 #define LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZGNUINSTPRINTER_H
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp
index 6d975295c17fff..ed7ff83a3c6df0 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp
@@ -1,10 +1,10 @@
-//===- SystemZHLASMInstPrinter.cpp - Convert SystemZ MCInst to HLASM assembly -==//
+//=- SystemZHLASMInstPrinter.cpp - Convert SystemZ MCInst to HLASM assembly -=//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
-//===--------------------------------------------------------------------------==//
+//===----------------------------------------------------------------------===//
 
 #include "SystemZHLASMInstPrinter.h"
 #include "llvm/MC/MCInst.h"



More information about the llvm-commits mailing list