[llvm] 1bfdc53 - Revert "[SystemZ][z/OS] This patch adds support for the ADA (associated data area), doing the following:"

Yusra Syeda via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 28 08:18:37 PDT 2023


Author: Yusra Syeda
Date: 2023-06-28T11:18:12-04:00
New Revision: 1bfdc534aaae483b37dc3198214fe79459cea760

URL: https://github.com/llvm/llvm-project/commit/1bfdc534aaae483b37dc3198214fe79459cea760
DIFF: https://github.com/llvm/llvm-project/commit/1bfdc534aaae483b37dc3198214fe79459cea760.diff

LOG: Revert "[SystemZ][z/OS] This patch adds support for the ADA (associated data area), doing the following:"

This reverts commit 9df0f66af5462e23216eae31aedbd4d2f459cc3d.

Added: 
    

Modified: 
    llvm/include/llvm/MC/MCObjectFileInfo.h
    llvm/lib/MC/MCObjectFileInfo.cpp
    llvm/lib/Target/SystemZ/MCTargetDesc/CMakeLists.txt
    llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
    llvm/lib/Target/SystemZ/SystemZAsmPrinter.h
    llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
    llvm/lib/Target/SystemZ/SystemZISelLowering.h
    llvm/lib/Target/SystemZ/SystemZInstrInfo.h
    llvm/lib/Target/SystemZ/SystemZInstrInfo.td
    llvm/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
    llvm/lib/Target/SystemZ/SystemZOperators.td
    llvm/lib/Target/SystemZ/SystemZRegisterInfo.h
    llvm/lib/Target/SystemZ/SystemZSubtarget.cpp
    llvm/lib/Target/SystemZ/SystemZSubtarget.h
    llvm/test/CodeGen/SystemZ/call-zos-vararg.ll
    llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll

Removed: 
    llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCExpr.cpp
    llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCExpr.h
    llvm/test/CodeGen/SystemZ/zos-ada-relocations.ll
    llvm/test/CodeGen/SystemZ/zos-ada.ll


################################################################################
diff  --git a/llvm/include/llvm/MC/MCObjectFileInfo.h b/llvm/include/llvm/MC/MCObjectFileInfo.h
index 54f696cb795fb..43ab85fbc3274 100644
--- a/llvm/include/llvm/MC/MCObjectFileInfo.h
+++ b/llvm/include/llvm/MC/MCObjectFileInfo.h
@@ -227,7 +227,6 @@ class MCObjectFileInfo {
 
   // GOFF specific sections.
   MCSection *PPA1Section = nullptr;
-  MCSection *ADASection = nullptr;
 
   // XCOFF specific sections
   MCSection *TOCBaseSection = nullptr;
@@ -431,7 +430,6 @@ class MCObjectFileInfo {
 
   // GOFF specific sections.
   MCSection *getPPA1Section() const { return PPA1Section; }
-  MCSection *getADASection() const { return ADASection; }
 
   // XCOFF specific sections
   MCSection *getTOCBaseSection() const { return TOCBaseSection; }

diff  --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp
index df2085e28cbc2..9fceaa20ca68c 100644
--- a/llvm/lib/MC/MCObjectFileInfo.cpp
+++ b/llvm/lib/MC/MCObjectFileInfo.cpp
@@ -542,8 +542,6 @@ void MCObjectFileInfo::initGOFFMCObjectFileInfo(const Triple &T) {
   PPA1Section =
       Ctx->getGOFFSection(".ppa1", SectionKind::getMetadata(), TextSection,
                           MCConstantExpr::create(GOFF::SK_PPA1, *Ctx));
-  ADASection =
-      Ctx->getGOFFSection(".ada", SectionKind::getData(), nullptr, nullptr);
 }
 
 void MCObjectFileInfo::initCOFFMCObjectFileInfo(const Triple &T) {

diff  --git a/llvm/lib/Target/SystemZ/MCTargetDesc/CMakeLists.txt b/llvm/lib/Target/SystemZ/MCTargetDesc/CMakeLists.txt
index 91aac7dd6603c..055482ee31b05 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/CMakeLists.txt
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/CMakeLists.txt
@@ -3,7 +3,6 @@ add_llvm_component_library(LLVMSystemZDesc
   SystemZMCAsmBackend.cpp
   SystemZMCAsmInfo.cpp
   SystemZMCCodeEmitter.cpp
-  SystemZMCExpr.cpp
   SystemZMCObjectWriter.cpp
   SystemZMCTargetDesc.cpp
 

diff  --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCExpr.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCExpr.cpp
deleted file mode 100644
index 647cf765c6a3e..0000000000000
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCExpr.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-//===-- SystemZMCExpr.cpp - SystemZ specific MC expression classes --------===//
-//
-// 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 "SystemZMCExpr.h"
-#include "llvm/MC/MCContext.h"
-using namespace llvm;
-
-#define DEBUG_TYPE "systemzmcexpr"
-
-const SystemZMCExpr *SystemZMCExpr::create(VariantKind Kind, const MCExpr *Expr,
-                                           MCContext &Ctx) {
-  return new (Ctx) SystemZMCExpr(Kind, Expr);
-}
-
-StringRef SystemZMCExpr::getVariantKindName() const {
-  switch (static_cast<uint32_t>(getKind())) {
-  case VK_SystemZ_None:
-    return "A";
-  case VK_SystemZ_RCon:
-    return "R";
-  case VK_SystemZ_VCon:
-    return "V";
-  default:
-    llvm_unreachable("Invalid kind");
-  }
-}
-
-void SystemZMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
-  OS << getVariantKindName() << '(';
-  Expr->print(OS, MAI);
-  OS << ')';
-}
-
-bool SystemZMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
-                                              const MCAsmLayout *Layout,
-                                              const MCFixup *Fixup) const {
-  if (!getSubExpr()->evaluateAsRelocatable(Res, Layout, Fixup))
-    return false;
-
-  Res =
-      MCValue::get(Res.getSymA(), Res.getSymB(), Res.getConstant(), getKind());
-
-  return true;
-}

diff  --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCExpr.h b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCExpr.h
deleted file mode 100644
index f548b34baa424..0000000000000
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCExpr.h
+++ /dev/null
@@ -1,66 +0,0 @@
-//===-- SystemZMCExpr.h - SystemZ specific MC expression classes -*- 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
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIB_TARGET_SystemZ_MCTARGETDESC_SystemZMCEXPR_H
-#define LLVM_LIB_TARGET_SystemZ_MCTARGETDESC_SystemZMCEXPR_H
-
-#include "llvm/MC/MCExpr.h"
-#include "llvm/MC/MCStreamer.h"
-#include "llvm/MC/MCValue.h"
-
-namespace llvm {
-
-class SystemZMCExpr : public MCTargetExpr {
-public:
-// HLASM docs for address constants:
-// https://www.ibm.com/docs/en/hla-and-tf/1.6?topic=value-address-constants
-  enum VariantKind {
-    VK_SystemZ_None,
-    VK_SystemZ_RCon,            // Address of ADA of symbol.
-    VK_SystemZ_VCon,            // Address of external function symbol.
-  };
-
-private:
-  const VariantKind Kind;
-  const MCExpr *Expr;
-
-  explicit SystemZMCExpr(VariantKind Kind, const MCExpr *Expr)
-      : Kind(Kind), Expr(Expr) {}
-
-public:
-  static const SystemZMCExpr *create(VariantKind Kind, const MCExpr *Expr,
-                                     MCContext &Ctx);
-
-  /// getOpcode - Get the kind of this expression.
-  VariantKind getKind() const { return Kind; }
-
-  /// getSubExpr - Get the child of this expression.
-  const MCExpr *getSubExpr() const { return Expr; }
-
-  StringRef getVariantKindName() const;
-
-  void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
-  bool evaluateAsRelocatableImpl(MCValue &Res, const MCAsmLayout *Layout,
-                                 const MCFixup *Fixup) const override;
-  void visitUsedExpr(MCStreamer &Streamer) const override {
-    Streamer.visitUsedExpr(*getSubExpr());
-  }
-  MCFragment *findAssociatedFragment() const override {
-    return getSubExpr()->findAssociatedFragment();
-  }
-
-  // There are no TLS SystemZMCExprs at the moment.
-  void fixELFSymbolsInTLSFixups(MCAssembler &Asm) const override {}
-
-  static bool classof(const MCExpr *E) {
-    return E->getKind() == MCExpr::Target;
-  }
-};
-} // end namespace llvm
-
-#endif

diff  --git a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
index 19e253898aa2e..f84af452a0159 100644
--- a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
@@ -13,7 +13,6 @@
 
 #include "SystemZAsmPrinter.h"
 #include "MCTargetDesc/SystemZInstPrinter.h"
-#include "MCTargetDesc/SystemZMCExpr.h"
 #include "SystemZConstantPoolValue.h"
 #include "SystemZMCInstLower.h"
 #include "TargetInfo/SystemZTargetInfo.h"
@@ -144,50 +143,6 @@ void SystemZAsmPrinter::emitCallInformation(CallType CT) {
                      .addReg(SystemZMC::GR64Regs[static_cast<unsigned>(CT)]));
 }
 
-uint32_t SystemZAsmPrinter::AssociatedDataAreaTable::insert(const MCSymbol *Sym,
-                                                            unsigned SlotKind) {
-  auto Key = std::make_pair(Sym, SlotKind);
-  auto It = Displacements.find(Key);
-
-  if (It != Displacements.end())
-    return (*It).second;
-
-  // Determine length of descriptor.
-  uint32_t Length;
-  switch (SlotKind) {
-  case SystemZII::MO_ADA_DIRECT_FUNC_DESC:
-    Length = 2 * PointerSize;
-    break;
-  default:
-    Length = PointerSize;
-    break;
-  }
-
-  uint32_t Displacement = NextDisplacement;
-  Displacements[std::make_pair(Sym, SlotKind)] = NextDisplacement;
-  NextDisplacement += Length;
-
-  return Displacement;
-}
-
-uint32_t
-SystemZAsmPrinter::AssociatedDataAreaTable::insert(const MachineOperand MO) {
-  MCSymbol *Sym;
-  if (MO.getType() == MachineOperand::MO_GlobalAddress) {
-    const GlobalValue *GV = MO.getGlobal();
-    Sym = MO.getParent()->getMF()->getTarget().getSymbol(GV);
-    assert(Sym && "No symbol");
-  } else if (MO.getType() == MachineOperand::MO_ExternalSymbol) {
-    const char *SymName = MO.getSymbolName();
-    Sym = MO.getParent()->getMF()->getContext().getOrCreateSymbol(SymName);
-    assert(Sym && "No symbol");
-  } else
-    llvm_unreachable("Unexpected operand type");
-
-  unsigned ADAslotType = MO.getTargetFlags();
-  return insert(Sym, ADAslotType);
-}
-
 void SystemZAsmPrinter::emitInstruction(const MachineInstr *MI) {
   SystemZ_MC::verifyInstructionPredicates(MI->getOpcode(),
                                           getSubtargetInfo().getFeatureBits());
@@ -318,43 +273,6 @@ void SystemZAsmPrinter::emitInstruction(const MachineInstr *MI) {
     emitCallInformation(CallType::BASR33);
     return;
 
-  case SystemZ::ADA_ENTRY_VALUE:
-  case SystemZ::ADA_ENTRY: {
-    const SystemZSubtarget &Subtarget = MF->getSubtarget<SystemZSubtarget>();
-    const SystemZInstrInfo *TII = Subtarget.getInstrInfo();
-    uint32_t Disp = ADATable.insert(MI->getOperand(1));
-    Register TargetReg = MI->getOperand(0).getReg();
-
-    Register ADAReg = MI->getOperand(2).getReg();
-    Disp += MI->getOperand(3).getImm();
-    bool LoadAddr = MI->getOpcode() == SystemZ::ADA_ENTRY;
-
-    unsigned Op0 = LoadAddr ? SystemZ::LA : SystemZ::LG;
-    unsigned Op = TII->getOpcodeForOffset(Op0, Disp);
-
-    Register IndexReg = 0;
-    if (!Op) {
-      if (TargetReg != ADAReg) {
-        IndexReg = TargetReg;
-        // Use TargetReg to store displacement.
-        EmitToStreamer(
-            *OutStreamer,
-            MCInstBuilder(SystemZ::LLILF).addReg(TargetReg).addImm(Disp));
-      } else
-        EmitToStreamer(
-            *OutStreamer,
-            MCInstBuilder(SystemZ::ALGFI).addReg(TargetReg).addImm(Disp));
-      Disp = 0;
-      Op = Op0;
-    }
-    EmitToStreamer(*OutStreamer, MCInstBuilder(Op)
-                                     .addReg(TargetReg)
-                                     .addReg(IndexReg)
-                                     .addImm(Disp)
-                                     .addReg(ADAReg));
-
-    return;
-  }
   case SystemZ::CallBRASL:
     LoweredMI = MCInstBuilder(SystemZ::BRASL)
       .addReg(SystemZ::R14D)
@@ -949,81 +867,9 @@ bool SystemZAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
 }
 
 void SystemZAsmPrinter::emitEndOfAsmFile(Module &M) {
-  auto TT = OutContext.getTargetTriple();
-  if (TT.isOSzOS()) {
-    emitADASection();
-  }
   emitAttributes(M);
 }
 
-void SystemZAsmPrinter::emitADASection() {
-  OutStreamer->pushSection();
-
-  const unsigned PointerSize = getDataLayout().getPointerSize();
-  OutStreamer->switchSection(getObjFileLowering().getADASection());
-
-  unsigned EmittedBytes = 0;
-  for (auto &Entry : ADATable.getTable()) {
-    const MCSymbol *Sym;
-    unsigned SlotKind;
-    std::tie(Sym, SlotKind) = Entry.first;
-    unsigned Offset = Entry.second;
-    assert(Offset == EmittedBytes && "Offset not as expected");
-#define EMIT_COMMENT(Str)                                                      \
-  OutStreamer->AddComment(Twine("Offset ")                                     \
-                              .concat(utostr(Offset))                          \
-                              .concat(" " Str " ")                             \
-                              .concat(Sym->getName()));
-    switch (SlotKind) {
-    case SystemZII::MO_ADA_DIRECT_FUNC_DESC:
-      // Language Environment DLL logic requires function descriptors, for
-      // imported functions, that are placed in the ADA to be 8 byte aligned.
-      EMIT_COMMENT("function descriptor of");
-      OutStreamer->emitValue(
-          SystemZMCExpr::create(SystemZMCExpr::VK_SystemZ_RCon,
-                                MCSymbolRefExpr::create(Sym, OutContext),
-                                OutContext),
-          PointerSize);
-      OutStreamer->emitValue(
-          SystemZMCExpr::create(SystemZMCExpr::VK_SystemZ_VCon,
-                                MCSymbolRefExpr::create(Sym, OutContext),
-                                OutContext),
-          PointerSize);
-      EmittedBytes += PointerSize * 2;
-      break;
-    case SystemZII::MO_ADA_DATA_SYMBOL_ADDR:
-      EMIT_COMMENT("pointer to data symbol");
-      OutStreamer->emitValue(
-          SystemZMCExpr::create(SystemZMCExpr::VK_SystemZ_None,
-                                MCSymbolRefExpr::create(Sym, OutContext),
-                                OutContext),
-          PointerSize);
-      EmittedBytes += PointerSize;
-      break;
-    case SystemZII::MO_ADA_INDIRECT_FUNC_DESC: {
-      MCSymbol *Alias = OutContext.createTempSymbol(
-          Twine(Sym->getName()).concat("@indirect"));
-      OutStreamer->emitAssignment(Alias,
-                                  MCSymbolRefExpr::create(Sym, OutContext));
-      OutStreamer->emitSymbolAttribute(Alias, MCSA_IndirectSymbol);
-
-      EMIT_COMMENT("pointer to function descriptor");
-      OutStreamer->emitValue(
-          SystemZMCExpr::create(SystemZMCExpr::VK_SystemZ_VCon,
-                                MCSymbolRefExpr::create(Alias, OutContext),
-                                OutContext),
-          PointerSize);
-      EmittedBytes += PointerSize;
-      break;
-    }
-    default:
-      llvm_unreachable("Unexpected slot kind");
-    }
-#undef EMIT_COMMENT
-  }
-  OutStreamer->popSection();
-}
-
 void SystemZAsmPrinter::emitFunctionBodyEnd() {
   if (TM.getTargetTriple().isOSzOS()) {
     // Emit symbol for the end of function if the z/OS target streamer

diff  --git a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.h b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.h
index c9dbbfd0b4c43..c99fcda6dcc52 100644
--- a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.h
+++ b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.h
@@ -46,56 +46,12 @@ class LLVM_LIBRARY_VISIBILITY SystemZAsmPrinter : public AsmPrinter {
     BASR33 = 7,   // b'x111' == BASR  r3,r3
   };
 
-  // The Associated Data Area (ADA) contains descriptors which help locating
-  // external symbols. For each symbol and type, the displacement into the ADA
-  // is stored.
-  class AssociatedDataAreaTable {
-  public:
-    using DisplacementTable =
-        MapVector<std::pair<const MCSymbol *, unsigned>, uint32_t>;
-
-  private:
-    const uint64_t PointerSize;
-
-    /// The mapping of name/slot type pairs to displacements.
-    DisplacementTable Displacements;
-
-    /// The next available displacement value. Incremented when new entries into
-    /// the ADA are created.
-    uint32_t NextDisplacement = 0;
-
-  public:
-    AssociatedDataAreaTable(uint64_t PointerSize) : PointerSize(PointerSize) {}
-
-    /// @brief Add a function descriptor to the ADA.
-    /// @param MI Pointer to an ADA_ENTRY instruction.
-    /// @return The displacement of the descriptor into the ADA.
-    uint32_t insert(const MachineOperand MO);
-
-    /// @brief Get the displacement into associated data area (ADA) for a name.
-    /// If no  displacement is already associated with the name, assign one and
-    /// return it.
-    /// @param Sym The symbol for which the displacement should be returned.
-    /// @param SlotKind The ADA type.
-    /// @return The displacement of the descriptor into the ADA.
-    uint32_t insert(const MCSymbol *Sym, unsigned SlotKind);
-
-    /// Get the table of GOFF displacements.  This is 'const' since it should
-    /// never be modified by anything except the APIs on this class.
-    const DisplacementTable &getTable() const { return Displacements; }
-
-    uint32_t getNextDisplacement() const { return NextDisplacement; }
-  };
-
-  AssociatedDataAreaTable ADATable;
-
   void emitPPA1(MCSymbol *FnEndSym);
-  void emitADASection();
 
 public:
   SystemZAsmPrinter(TargetMachine &TM, std::unique_ptr<MCStreamer> Streamer)
       : AsmPrinter(TM, std::move(Streamer)), CurrentFnPPA1Sym(nullptr),
-        CurrentFnEPMarkerSym(nullptr), ADATable(TM.getPointerSize(0)) {}
+        CurrentFnEPMarkerSym(nullptr) {}
 
   // Override AsmPrinter.
   StringRef getPassName() const override { return "SystemZ Assembly Printer"; }

diff  --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
index 785a08a763eb7..c50e9398a8b16 100644
--- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
@@ -1642,15 +1642,8 @@ SDValue SystemZTargetLowering::LowerFormalArguments(
     }
   }
 
-  if (Subtarget.isTargetXPLINK64()) {
-    // Create virual register  for handling incoming "ADA" special register (R5)
-    const TargetRegisterClass *RC = &SystemZ::ADDR64BitRegClass;
-    Register ADAvReg = MRI.createVirtualRegister(RC);
-    auto *Regs = static_cast<SystemZXPLINK64Registers *>(
-        Subtarget.getSpecialRegisters());
-    MRI.addLiveIn(Regs->getADARegister(), ADAvReg);
-    FuncInfo->setADAVirtualRegister(ADAvReg);
-  }
+  // FIXME: For XPLINK64, Add in support for handling incoming "ADA" special
+  // register (R5)
   return Chain;
 }
 
@@ -1675,94 +1668,6 @@ static bool canUseSiblingCall(const CCState &ArgCCInfo,
   return true;
 }
 
-static SDValue getADAEntry(SelectionDAG &DAG, SDValue Val, SDLoc DL,
-                           unsigned Offset, bool LoadAdr = false) {
-  MachineFunction &MF = DAG.getMachineFunction();
-  SystemZMachineFunctionInfo *MFI = MF.getInfo<SystemZMachineFunctionInfo>();
-  unsigned ADAvReg = MFI->getADAVirtualRegister();
-  EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
-
-  SDValue Reg = DAG.getRegister(ADAvReg, PtrVT);
-  SDValue Ofs = DAG.getTargetConstant(Offset, DL, PtrVT);
-
-  SDValue Result = DAG.getNode(SystemZISD::ADA_ENTRY, DL, PtrVT, Val, Reg, Ofs);
-  if (!LoadAdr)
-    Result = DAG.getLoad(
-        PtrVT, DL, DAG.getEntryNode(), Result, MachinePointerInfo(), Align(8),
-        MachineMemOperand::MODereferenceable | MachineMemOperand::MOInvariant);
-
-  return Result;
-}
-
-// ADA access using Global value
-// Note: for functions, address of descriptor is returned
-static SDValue getADAEntry(SelectionDAG &DAG, const GlobalValue *GV, SDLoc DL,
-                           EVT PtrVT) {
-  unsigned ADAtype;
-  bool LoadAddr = false;
-  const GlobalAlias *GA = dyn_cast<GlobalAlias>(GV);
-  bool IsFunction =
-      (isa<Function>(GV)) || (GA && isa<Function>(GA->getAliaseeObject()));
-  bool IsInternal = (GV->hasInternalLinkage() || GV->hasPrivateLinkage());
-
-  if (IsFunction) {
-    if (IsInternal) {
-      ADAtype = SystemZII::MO_ADA_DIRECT_FUNC_DESC;
-      LoadAddr = true;
-    } else
-      ADAtype = SystemZII::MO_ADA_INDIRECT_FUNC_DESC;
-  } else {
-    ADAtype = SystemZII::MO_ADA_DATA_SYMBOL_ADDR;
-  }
-  SDValue Val = DAG.getTargetGlobalAddress(GV, DL, PtrVT, 0, ADAtype);
-
-  return getADAEntry(DAG, Val, DL, 0, LoadAddr);
-}
-
-static bool getzOSCalleeAndADA(SelectionDAG &DAG, SDValue &Callee, SDValue &ADA,
-                               SDLoc &DL, SDValue &Chain) {
-  unsigned ADADelta = 0; // ADA offset in desc.
-  unsigned EPADelta = 8; // EPA offset in desc.
-  MachineFunction &MF = DAG.getMachineFunction();
-  EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
-
-  // XPLink calling convention.
-  if (auto *G = dyn_cast<GlobalAddressSDNode>(Callee)) {
-    bool IsInternal = (G->getGlobal()->hasInternalLinkage() ||
-                       G->getGlobal()->hasPrivateLinkage());
-    if (IsInternal) {
-      SystemZMachineFunctionInfo *MFI =
-          MF.getInfo<SystemZMachineFunctionInfo>();
-      unsigned ADAvReg = MFI->getADAVirtualRegister();
-      ADA = DAG.getCopyFromReg(Chain, DL, ADAvReg, PtrVT);
-      Callee = DAG.getTargetGlobalAddress(G->getGlobal(), DL, PtrVT);
-      Callee = DAG.getNode(SystemZISD::PCREL_WRAPPER, DL, PtrVT, Callee);
-      return true;
-    } else {
-      SDValue GA = DAG.getTargetGlobalAddress(
-          G->getGlobal(), DL, PtrVT, 0, SystemZII::MO_ADA_DIRECT_FUNC_DESC);
-      ADA = getADAEntry(DAG, GA, DL, ADADelta);
-      Callee = getADAEntry(DAG, GA, DL, EPADelta);
-    }
-  } else if (auto *E = dyn_cast<ExternalSymbolSDNode>(Callee)) {
-    SDValue ES = DAG.getTargetExternalSymbol(
-        E->getSymbol(), PtrVT, SystemZII::MO_ADA_DIRECT_FUNC_DESC);
-    ADA = getADAEntry(DAG, ES, DL, ADADelta);
-    Callee = getADAEntry(DAG, ES, DL, EPADelta);
-  } else {
-    // Function pointer case
-    ADA = DAG.getNode(ISD::ADD, DL, PtrVT, Callee,
-                      DAG.getConstant(ADADelta, DL, PtrVT));
-    ADA = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), ADA,
-                      MachinePointerInfo::getGOT(DAG.getMachineFunction()));
-    Callee = DAG.getNode(ISD::ADD, DL, PtrVT, Callee,
-                         DAG.getConstant(EPADelta, DL, PtrVT));
-    Callee = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Callee,
-                         MachinePointerInfo::getGOT(DAG.getMachineFunction()));
-  }
-  return false;
-}
-
 SDValue
 SystemZTargetLowering::LowerCall(CallLoweringInfo &CLI,
                                  SmallVectorImpl<SDValue> &InVals) const {
@@ -1909,31 +1814,17 @@ SystemZTargetLowering::LowerCall(CallLoweringInfo &CLI,
   // associated Target* opcodes.  Force %r1 to be used for indirect
   // tail calls.
   SDValue Glue;
-
-  if (Subtarget.isTargetXPLINK64()) {
-    SDValue ADA;
-    bool IsBRASL = getzOSCalleeAndADA(DAG, Callee, ADA, DL, Chain);
-    if (!IsBRASL) {
-      unsigned CalleeReg = static_cast<SystemZXPLINK64Registers *>(Regs)
-                               ->getAddressOfCalleeRegister();
-      Chain = DAG.getCopyToReg(Chain, DL, CalleeReg, Callee, Glue);
-      Glue = Chain.getValue(1);
-      Callee = DAG.getRegister(CalleeReg, Callee.getValueType());
-    }
-    RegsToPass.push_back(std::make_pair(
-        static_cast<SystemZXPLINK64Registers *>(Regs)->getADARegister(), ADA));
-  } else {
-    if (auto *G = dyn_cast<GlobalAddressSDNode>(Callee)) {
-      Callee = DAG.getTargetGlobalAddress(G->getGlobal(), DL, PtrVT);
-      Callee = DAG.getNode(SystemZISD::PCREL_WRAPPER, DL, PtrVT, Callee);
-    } else if (auto *E = dyn_cast<ExternalSymbolSDNode>(Callee)) {
-      Callee = DAG.getTargetExternalSymbol(E->getSymbol(), PtrVT);
-      Callee = DAG.getNode(SystemZISD::PCREL_WRAPPER, DL, PtrVT, Callee);
-    } else if (IsTailCall) {
-      Chain = DAG.getCopyToReg(Chain, DL, SystemZ::R1D, Callee, Glue);
-      Glue = Chain.getValue(1);
-      Callee = DAG.getRegister(SystemZ::R1D, Callee.getValueType());
-    }
+  // FIXME: Add support for XPLINK using the ADA register.
+  if (auto *G = dyn_cast<GlobalAddressSDNode>(Callee)) {
+    Callee = DAG.getTargetGlobalAddress(G->getGlobal(), DL, PtrVT);
+    Callee = DAG.getNode(SystemZISD::PCREL_WRAPPER, DL, PtrVT, Callee);
+  } else if (auto *E = dyn_cast<ExternalSymbolSDNode>(Callee)) {
+    Callee = DAG.getTargetExternalSymbol(E->getSymbol(), PtrVT);
+    Callee = DAG.getNode(SystemZISD::PCREL_WRAPPER, DL, PtrVT, Callee);
+  } else if (IsTailCall) {
+    Chain = DAG.getCopyToReg(Chain, DL, SystemZ::R1D, Callee, Glue);
+    Glue = Chain.getValue(1);
+    Callee = DAG.getRegister(SystemZ::R1D, Callee.getValueType());
   }
 
   // Build a sequence of copy-to-reg nodes, chained and glued together.
@@ -3360,15 +3251,12 @@ SDValue SystemZTargetLowering::lowerGlobalAddress(GlobalAddressSDNode *Node,
       Result = DAG.getTargetGlobalAddress(GV, DL, PtrVT);
       Result = DAG.getNode(SystemZISD::PCREL_WRAPPER, DL, PtrVT, Result);
     }
-  } else if (Subtarget.isTargetELF()) {
+  } else {
     Result = DAG.getTargetGlobalAddress(GV, DL, PtrVT, 0, SystemZII::MO_GOT);
     Result = DAG.getNode(SystemZISD::PCREL_WRAPPER, DL, PtrVT, Result);
     Result = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Result,
                          MachinePointerInfo::getGOT(DAG.getMachineFunction()));
-  } else if (Subtarget.isTargetzOS()) {
-    Result = getADAEntry(DAG, GV, DL, PtrVT);
-  } else
-    llvm_unreachable("Unexpected Subtarget");
+  }
 
   // If there was a non-zero offset that we didn't fold, create an explicit
   // addition for it.
@@ -6154,7 +6042,6 @@ const char *SystemZTargetLowering::getTargetNodeName(unsigned Opcode) const {
     OPCODE(VLER);
     OPCODE(VSTER);
     OPCODE(PREFETCH);
-    OPCODE(ADA_ENTRY);
   }
   return nullptr;
 #undef OPCODE

diff  --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.h b/llvm/lib/Target/SystemZ/SystemZISelLowering.h
index 47fa1831c3ee7..7f6e25ccf6f7a 100644
--- a/llvm/lib/Target/SystemZ/SystemZISelLowering.h
+++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.h
@@ -1,3 +1,4 @@
+
 //===-- SystemZISelLowering.h - SystemZ DAG lowering interface --*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
@@ -283,16 +284,6 @@ enum NodeType : unsigned {
   // Operand 1: the bit mask
   TDC,
 
-  // z/OS XPLINK ADA Entry
-  // Wraps a TargetGlobalAddress that should be loaded from a function's
-  // AssociatedData Area (ADA). Tha ADA is passed to the function by the
-  // caller in the XPLink ABI defined register R5.
-  // Operand 0: the GlobalValue/External Symbol
-  // Operand 1: the ADA register
-  // Operand 2: the offset (0 for the first and 8 for the second element in the
-  // function descriptor)
-  ADA_ENTRY,
-
   // Strict variants of scalar floating-point comparisons.
   // Quiet and signaling versions.
   STRICT_FCMP = ISD::FIRST_TARGET_STRICTFP_OPCODE,

diff  --git a/llvm/lib/Target/SystemZ/SystemZInstrInfo.h b/llvm/lib/Target/SystemZ/SystemZInstrInfo.h
index bb883ea464d37..9ce75db6c177c 100644
--- a/llvm/lib/Target/SystemZ/SystemZInstrInfo.h
+++ b/llvm/lib/Target/SystemZ/SystemZInstrInfo.h
@@ -74,17 +74,6 @@ enum {
   MO_INDNTPOFF = (2 << 0)
 };
 
-// z/OS XPLink specific: classifies the types of
-// accesses to the ADA (Associated Data Area).
-// These enums contains values that overlap with the above MO_ enums,
-// but that's fine since the above enums are used with ELF,
-// while these values are used with z/OS.
-enum {
-  MO_ADA_DATA_SYMBOL_ADDR = 1,
-  MO_ADA_INDIRECT_FUNC_DESC,
-  MO_ADA_DIRECT_FUNC_DESC,
-};
-
 // Classifies a branch.
 enum BranchType {
   // An instruction that branches on the current value of CC.

diff  --git a/llvm/lib/Target/SystemZ/SystemZInstrInfo.td b/llvm/lib/Target/SystemZ/SystemZInstrInfo.td
index 6a82c36931a84..9d5ad81abf5e3 100644
--- a/llvm/lib/Target/SystemZ/SystemZInstrInfo.td
+++ b/llvm/lib/Target/SystemZ/SystemZInstrInfo.td
@@ -293,19 +293,6 @@ let Predicates = [IsTargetXPLINK64] in {
   let isCall = 1, Defs = [R3D, CC], Uses = [FPC] in {
     def CallBASR_STACKEXT  : Alias<4, (outs), (ins ADDR64:$R2), []>;
   }
-
-  let hasNoSchedulingInfo = 1, Defs = [CC] in {
-    def ADA_ENTRY : Alias<12, (outs GR64:$Reg), (ins ADDR64:$addr,
-                              ADDR64:$ADA, imm64:$Offset),
-                            [(set i64:$Reg, (z_ada_entry i64:$addr,
-                              i64:$ADA, i64:$Offset))]>;
-  }
-  let mayLoad = 1, AddedComplexity = 20, hasNoSchedulingInfo = 1, Defs = [CC] in {
-    def ADA_ENTRY_VALUE : Alias<12, (outs GR64:$Reg), (ins ADDR64:$addr,
-                              ADDR64:$ADA, imm64:$Offset),
-                            [(set i64:$Reg, (load (z_ada_entry
-                              iPTR:$addr, iPTR:$ADA, i64:$Offset)))]>;
- }
 }
 
 // Regular calls.

diff  --git a/llvm/lib/Target/SystemZ/SystemZMachineFunctionInfo.h b/llvm/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
index be7012a37a3d3..7a0802abb2765 100644
--- a/llvm/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
+++ b/llvm/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
@@ -38,8 +38,6 @@ class SystemZMachineFunctionInfo : public MachineFunctionInfo {
   unsigned RegSaveFrameIndex;
   int FramePointerSaveIndex;
   unsigned NumLocalDynamics;
-  /// z/OS XPLINK ABI: incoming ADA virtual register.
-  Register VRegADA;
 
 public:
   SystemZMachineFunctionInfo(const Function &F, const TargetSubtargetInfo *STI)
@@ -102,11 +100,6 @@ class SystemZMachineFunctionInfo : public MachineFunctionInfo {
   // Count number of local-dynamic TLS symbols used.
   unsigned getNumLocalDynamicTLSAccesses() const { return NumLocalDynamics; }
   void incNumLocalDynamicTLSAccesses() { ++NumLocalDynamics; }
-
-  // Get and set the function's incoming special XPLINK ABI defined ADA
-  // register.
-  Register getADAVirtualRegister() const { return VRegADA; }
-  void setADAVirtualRegister(Register Reg) { VRegADA = Reg; }
 };
 
 } // end namespace llvm

diff  --git a/llvm/lib/Target/SystemZ/SystemZOperators.td b/llvm/lib/Target/SystemZ/SystemZOperators.td
index 6713cac2a7807..b16f8f2a7ff35 100644
--- a/llvm/lib/Target/SystemZ/SystemZOperators.td
+++ b/llvm/lib/Target/SystemZ/SystemZOperators.td
@@ -127,11 +127,6 @@ def SDT_ZTBegin             : SDTypeProfile<1, 2,
                                             [SDTCisVT<0, i32>,
                                              SDTCisPtrTy<1>,
                                              SDTCisVT<2, i32>]>;
-def SDT_ZADAENTRY           : SDTypeProfile<1, 3,
-                                            [SDTCisPtrTy<0>,
-                                             SDTCisPtrTy<1>,
-                                             SDTCisPtrTy<2>,
-                                             SDTCisVT<3, i64>]>;
 def SDT_ZTEnd               : SDTypeProfile<1, 0,
                                             [SDTCisVT<0, i32>]>;
 def SDT_ZInsertVectorElt    : SDTypeProfile<1, 3,
@@ -438,9 +433,6 @@ def z_tbegin_nofloat    : SDNode<"SystemZISD::TBEGIN_NOFLOAT", SDT_ZTBegin,
 def z_tend              : SDNode<"SystemZISD::TEND", SDT_ZTEnd,
                                  [SDNPHasChain, SDNPSideEffect]>;
 
-def z_ada_entry         : SDNode<"SystemZISD::ADA_ENTRY",
-                                  SDT_ZADAENTRY>;
-
 def z_vshl              : SDNode<"ISD::SHL", SDT_ZVecBinary>;
 def z_vsra              : SDNode<"ISD::SRA", SDT_ZVecBinary>;
 def z_vsrl              : SDNode<"ISD::SRL", SDT_ZVecBinary>;

diff  --git a/llvm/lib/Target/SystemZ/SystemZRegisterInfo.h b/llvm/lib/Target/SystemZ/SystemZRegisterInfo.h
index cbc02c73f1ac7..78abeb720b43b 100644
--- a/llvm/lib/Target/SystemZ/SystemZRegisterInfo.h
+++ b/llvm/lib/Target/SystemZ/SystemZRegisterInfo.h
@@ -89,8 +89,6 @@ class SystemZXPLINK64Registers : public SystemZCallingConventionRegisters {
 
   int getAddressOfCalleeRegister() { return SystemZ::R6D; };
 
-  int getADARegister() { return SystemZ::R5D; }
-
   const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const final;
 
   const uint32_t *getCallPreservedMask(const MachineFunction &MF,

diff  --git a/llvm/lib/Target/SystemZ/SystemZSubtarget.cpp b/llvm/lib/Target/SystemZ/SystemZSubtarget.cpp
index bbcb1fd92d6e2..25b013ba1876b 100644
--- a/llvm/lib/Target/SystemZ/SystemZSubtarget.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZSubtarget.cpp
@@ -8,7 +8,6 @@
 
 #include "SystemZSubtarget.h"
 #include "MCTargetDesc/SystemZMCTargetDesc.h"
-#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
 #include "llvm/IR/GlobalValue.h"
 #include "llvm/Target/TargetMachine.h"
 
@@ -78,47 +77,12 @@ bool SystemZSubtarget::enableSubRegLiveness() const {
   return UseSubRegLiveness;
 }
 
-bool SystemZSubtarget::isAddressedViaADA(const GlobalValue *GV) const {
-  if (const auto *GO = dyn_cast<GlobalObject>(GV)) {
-    // A R/O variable is placed in code section. If the R/O variable has as
-    // least two byte alignment, then generated code can use relative
-    // instructions to address the variable. Otherwise, use the ADA to address
-    // the variable.
-    if (GO->getAlignment() & 0x1) {
-      return true;
-    }
-
-    // getKindForGlobal only works with definitions
-    if (GO->isDeclaration()) {
-      return true;
-    }
-
-    // check AvailableExternallyLinkage here as getKindForGlobal() asserts
-    if (GO->hasAvailableExternallyLinkage()) {
-      return true;
-    }
-
-    SectionKind GOKind = TargetLoweringObjectFile::getKindForGlobal(
-        GO, TLInfo.getTargetMachine());
-    if (!GOKind.isReadOnly()) {
-      return true;
-    }
-
-    return false; // R/O variable with multiple of 2 byte alignment
-  }
-  return true;
-}
-
 bool SystemZSubtarget::isPC32DBLSymbol(const GlobalValue *GV,
                                        CodeModel::Model CM) const {
   // PC32DBL accesses require the low bit to be clear.
   //
   // FIXME: Explicitly check for functions: the datalayout is currently
   // missing information about function pointers.
-
-  if (isTargetzOS())
-    return !isAddressedViaADA(GV);
-
   const DataLayout &DL = GV->getParent()->getDataLayout();
   if (GV->getPointerAlignment(DL) == 1 && !GV->getValueType()->isFunctionTy())
     return false;

diff  --git a/llvm/lib/Target/SystemZ/SystemZSubtarget.h b/llvm/lib/Target/SystemZ/SystemZSubtarget.h
index 5fa7c8f194ebf..8f766a4d87838 100644
--- a/llvm/lib/Target/SystemZ/SystemZSubtarget.h
+++ b/llvm/lib/Target/SystemZ/SystemZSubtarget.h
@@ -106,8 +106,6 @@ class SystemZSubtarget : public SystemZGenSubtargetInfo {
   bool GETTER() const { return ATTRIBUTE; }
 #include "SystemZGenSubtargetInfo.inc"
 
-  bool isAddressedViaADA(const GlobalValue *GV) const;
-
   // Return true if GV can be accessed using LARL for reloc model RM
   // and code model CM.
   bool isPC32DBLSymbol(const GlobalValue *GV, CodeModel::Model CM) const;

diff  --git a/llvm/test/CodeGen/SystemZ/call-zos-vararg.ll b/llvm/test/CodeGen/SystemZ/call-zos-vararg.ll
index ac157e5fa67f6..ff52e50373e1e 100644
--- a/llvm/test/CodeGen/SystemZ/call-zos-vararg.ll
+++ b/llvm/test/CodeGen/SystemZ/call-zos-vararg.ll
@@ -66,7 +66,7 @@ define i64 @call_vararg_both0(i64 %arg0, double %arg1) {
 ; CHECK:       larl  1, @CPI5_0
 ; CHECK-NEXT:  ld    0, 0(1)
 ; CHECK-NEXT:  ld    2, 8(1)
-; CHECK:       lgdr  3, 0
+; CHECK-NEXT:  lgdr  3, 0
 ; CHECK:       lghi  1, 1
 ; CHECK:       lghi  2, 2
 ; CHECK:       std   0, 2192(4)

diff  --git a/llvm/test/CodeGen/SystemZ/zos-ada-relocations.ll b/llvm/test/CodeGen/SystemZ/zos-ada-relocations.ll
deleted file mode 100644
index e25246917ec09..0000000000000
--- a/llvm/test/CodeGen/SystemZ/zos-ada-relocations.ll
+++ /dev/null
@@ -1,67 +0,0 @@
-; Test the ADA section in the assembly output for all cases.
-;
-; RUN: llc < %s -mtriple=s390x-ibm-zos | FileCheck %s
-
-; CHECK-LABEL: DoIt:
-; CHECK:    stmg    6, 7, 1840(4)
-; CHECK:    aghi    4, -224
-; CHECK:    lg  1, 0(5)
-; CHECK:    lg  6, 16(5)
-; CHECK:    lg  5, 8(5)
-; CHECK:    stg 1, 2264(4)
-; CHECK:    basr    7, 6
-; CHECK:    bcr 0, 0
-; CHECK:    lg  7, 2072(4)
-; CHECK:    aghi    4, 224
-; CHECK:    b   2(7)
-define hidden void @DoIt() {
-entry:
-  %F = alloca ptr, align 8
-  store ptr @DoFunc, ptr %F, align 8
-  %0 = load ptr, ptr %F, align 8
-  call void @Caller(ptr noundef %0)
-  ret void
-}
-declare void @DoFunc()
-declare void @Caller(ptr noundef)
-
-; CHECK-LABEL: get_i:
-; CHECK:    stmg    6, 8, 1872(4)
-; CHECK:    aghi    4, -192
-; CHECK:    lg  1, 24(5)
-; CHECK:    lg  2, 32(5)
-; CHECK:    lgf 1, 0(1)
-; CHECK:    lg  6, 48(5)
-; CHECK:    lg  5, 40(5)
-; CHECK:    l   8, 0(2)
-; CHECK:    basr    7, 6
-; CHECK:    bcr 0, 0
-; CHECK:    ar  3, 8
-; CHECK:    lgfr    3, 3
-; CHECK:    lmg 7, 8, 2072(4)
-; CHECK:    aghi    4, 192
-; CHECK:    b   2(7)
- at i = external global i32, align 4
- at i2 = external global i32, align 4
-
-define signext i32 @get_i() {
-entry:
-  %0 = load i32, ptr @i, align 4
-  %1 = load i32, ptr @i2, align 4
-  %call = call signext i32 @callout(i32 signext %1)
-  %add = add nsw i32 %0, %call
-  ret i32 %add
-}
-
-declare signext i32 @callout(i32 signext)
-
-; CHECK:     .section    ".ada"
-; CHECK:  .set @@DoFunc at indirect0, DoFunc
-; CHECK:      .indirect_symbol   @@DoFunc at indirect0
-; CHECK:  .quad V(@@DoFunc at indirect0)          * Offset 0 pointer to function descriptor DoFunc
-; CHECK:  .quad R(Caller)                      * Offset 8 function descriptor of Caller
-; CHECK:  .quad V(Caller)
-; CHECK:  .quad A(i2)                           * Offset 24 pointer to data symbol i2
-; CHECK:  .quad A(i)                            * Offset 32 pointer to data symbol i
-; CHECK:  .quad R(callout)                      * Offset 40 function descriptor of callout
-; CHECK:  .quad V(callout)

diff  --git a/llvm/test/CodeGen/SystemZ/zos-ada.ll b/llvm/test/CodeGen/SystemZ/zos-ada.ll
deleted file mode 100644
index 18ee9a2255d68..0000000000000
--- a/llvm/test/CodeGen/SystemZ/zos-ada.ll
+++ /dev/null
@@ -1,31 +0,0 @@
-; Test the setup of the environment area, or associated data area (ADA)
-;
-; RUN: llc < %s -mtriple=s390x-ibm-zos -mcpu=z10 | FileCheck %s
-
-; CHECK-LABEL: caller:
-; CHECK:         stmg 6, 8, 1872(4)
-; CHECK-NEXT:    aghi 4, -192
-; CHECK-NEXT:    lgr 8, 5
-; CHECK-NEXT:    brasl 7, callee_internal at PLT
-; CHECK-NEXT:    bcr 0, 3
-; CHECK-NEXT:    lg 6, 8(8)
-; CHECK-NEXT:    lg 5, 0(8)
-; CHECK-NEXT:    lgr 8, 3
-; CHECK-NEXT:    basr 7, 6
-; CHECK-NEXT:    bcr 0, 0
-; CHECK-NEXT:    la 3, 0(3,8)
-; CHECK-NEXT:    lmg 7, 8, 2072(4)
-; CHECK-NEXT:    aghi 4, 192
-; CHECK-NEXT:    b 2(7)
-define i64 @caller() {
-  %r1 = call i64 () @callee_internal()
-  %r2 = call i64 () @callee_external()
-  %r3 = add i64 %r1, %r2
-  ret i64 %r3
-}
-
-define internal i64 @callee_internal() {
-  ret i64 10
-}
-
-declare i64 @callee_external()

diff  --git a/llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll b/llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll
index 510b6188270ab..6b8c3bf53122d 100644
--- a/llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll
+++ b/llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll
@@ -286,14 +286,13 @@ define void @func3() {
 
 ; Requires the saving of r4 due to variable sized
 ; object in stack frame. (Eg: VLA) Sets up frame pointer in r8
-; CHECK64: stmg  4, 10, 1856(4)
+; CHECK64: stmg  4, 9, 1856(4)
 ; CHECK64: aghi  4, -192
-; CHECK64: lg  6, 40(5)
-; CHECK64: lg  5, 32(5)
 ; CHECK64: lgr     8, 4
-; CHECK64: basr   7, 6
-; CHECK64-NEXT: bcr     0, 0
-; CHECK64: lmg  4, 10, 2048(4)
+; TODO Will change to basr with ADA introduction.
+; CHECK64: brasl   7, @@ALCAXP
+; CHECK64-NEXT: bcr     0, 3
+; CHECK64: lmg	4, 9, 2048(4)
 define i64 @func4(i64 %n) {
   %vla = alloca i64, i64 %n, align 8
   %call = call i64 @fun2(i64 %n, ptr nonnull %vla, ptr nonnull %vla)
@@ -304,11 +303,12 @@ define i64 @func4(i64 %n) {
 ; to force use of agfi before stmg.
 ; CHECK64: lgr	0, 4
 ; CHECK64: agfi	4, -1040192
-; CHECK64: stmg  4, 10, 2048(4)
+; CHECK64: stmg  4, 9, 2048(4)
 ; CHECK64: lgr     8, 4
-; CHECK64: basr   7, 6
-; CHECK64-NEXT: bcr     0, 0
-; CHECK64: lmg 4, 10, 2048(4)
+; TODO Will change to basr with ADA introduction.
+; CHECK64: brasl   7, @@ALCAXP
+; CHECK64-NEXT: bcr     0, 3
+;; CHECK64: lmg 4, 9, 2048(4)
 define i64 @func5(i64 %n) {
   %vla = alloca i64, i64 %n, align 8
   %arr = alloca [130000 x i64], align 8
@@ -369,7 +369,7 @@ define void @large_stack1(i64 %n1, i64 %n2, i64 %n3) {
 ; CHECK64: @BB8_2:
 ; CHECK64: lgr 3, 0
 ; CHECK64: lg  3, 2192(3)
-; CHECK64: stmg  4, 12, 2048(4)
+; CHECK64: stmg  4, 11, 2048(4)
 ; CHECK64: lgr 8, 4
 define void @large_stack2(i64 %n1, i64 %n2, i64 %n3) {
   %arr0 = alloca [131072 x i64], align 8


        


More information about the llvm-commits mailing list