[clang] 8787bc7 - Revert "[SystemZ] Add support for __builtin_setjmp and __builtin_longjmp (#116642)"
Ulrich Weigand via cfe-commits
cfe-commits at lists.llvm.org
Fri Dec 6 15:56:26 PST 2024
Author: Ulrich Weigand
Date: 2024-12-07T00:55:54+01:00
New Revision: 8787bc72a61aa43a6e937647b6797ddb2ff287d2
URL: https://github.com/llvm/llvm-project/commit/8787bc72a61aa43a6e937647b6797ddb2ff287d2
DIFF: https://github.com/llvm/llvm-project/commit/8787bc72a61aa43a6e937647b6797ddb2ff287d2.diff
LOG: Revert "[SystemZ] Add support for __builtin_setjmp and __builtin_longjmp (#116642)"
This reverts commit 030bbc92a705758f1131fb29cab5be6d6a27dd1f.
Added:
Modified:
clang/lib/Basic/Targets/SystemZ.h
clang/lib/CodeGen/CGBuiltin.cpp
llvm/docs/ExceptionHandling.rst
llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
llvm/lib/Target/SystemZ/SystemZISelLowering.h
llvm/lib/Target/SystemZ/SystemZInstrInfo.td
llvm/lib/Target/SystemZ/SystemZLongBranch.cpp
llvm/lib/Target/SystemZ/SystemZOperators.td
llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp
llvm/lib/Target/SystemZ/SystemZRegisterInfo.h
Removed:
clang/test/CodeGen/SystemZ/builtin-setjmp-logjmp.c
llvm/test/CodeGen/SystemZ/builtin-longjmp.ll
llvm/test/CodeGen/SystemZ/builtin-setjmp-alloca.ll
llvm/test/CodeGen/SystemZ/builtin-setjmp-spills.ll
llvm/test/CodeGen/SystemZ/builtin-setjmp.ll
################################################################################
diff --git a/clang/lib/Basic/Targets/SystemZ.h b/clang/lib/Basic/Targets/SystemZ.h
index e6405f174f660f..ef9a07033a6e4f 100644
--- a/clang/lib/Basic/Targets/SystemZ.h
+++ b/clang/lib/Basic/Targets/SystemZ.h
@@ -247,8 +247,6 @@ class LLVM_LIBRARY_VISIBILITY SystemZTargetInfo : public TargetInfo {
return RegNo < 4 ? 6 + RegNo : -1;
}
- bool hasSjLjLowering() const override { return true; }
-
std::pair<unsigned, unsigned> hardwareInterferenceSizes() const override {
return std::make_pair(256, 256);
}
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 656e6748e1e103..41c632ead6aa3c 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -4860,14 +4860,6 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
// Buffer is a void**.
Address Buf = EmitPointerWithAlignment(E->getArg(0));
- if (getTarget().getTriple().getArch() == llvm::Triple::systemz) {
- // On this target, the back end fills in the context buffer completely.
- // It doesn't really matter if the frontend stores to the buffer before
- // calling setjmp, the back-end is going to overwrite them anyway.
- Function *F = CGM.getIntrinsic(Intrinsic::eh_sjlj_setjmp);
- return RValue::get(Builder.CreateCall(F, Buf.emitRawPointer(*this)));
- }
-
// Store the frame pointer to the setjmp buffer.
Value *FrameAddr = Builder.CreateCall(
CGM.getIntrinsic(Intrinsic::frameaddress, AllocaInt8PtrTy),
diff --git a/clang/test/CodeGen/SystemZ/builtin-setjmp-logjmp.c b/clang/test/CodeGen/SystemZ/builtin-setjmp-logjmp.c
deleted file mode 100644
index f2d1659eb87692..00000000000000
--- a/clang/test/CodeGen/SystemZ/builtin-setjmp-logjmp.c
+++ /dev/null
@@ -1,25 +0,0 @@
-// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
-// RUN: %clang --target=s390x-linux -S -emit-llvm -o - %s | FileCheck %s
-
-void *buf[20];
-// CHECK-LABEL: define dso_local void @foo(
-// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
-// CHECK-NEXT: [[ENTRY:.*:]]
-// CHECK-NEXT: [[TMP0:%.*]] = call i32 @llvm.eh.sjlj.setjmp(ptr @buf)
-// CHECK-NEXT: ret void
-//
-void foo()
-{
- __builtin_setjmp (buf);
-}
-
-// CHECK-LABEL: define dso_local void @foo1(
-// CHECK-SAME: ) #[[ATTR0]] {
-// CHECK-NEXT: [[ENTRY:.*:]]
-// CHECK-NEXT: call void @llvm.eh.sjlj.longjmp(ptr @buf)
-// CHECK-NEXT: unreachable
-//
-void foo1()
-{
- __builtin_longjmp (buf, 1);
-}
diff --git a/llvm/docs/ExceptionHandling.rst b/llvm/docs/ExceptionHandling.rst
index 52cc512cc13abc..c2afb25c6ccd47 100644
--- a/llvm/docs/ExceptionHandling.rst
+++ b/llvm/docs/ExceptionHandling.rst
@@ -374,11 +374,10 @@ overall functioning of this intrinsic is compatible with the GCC
to interoperate.
The single parameter is a pointer to a five word buffer in which the calling
-context is saved. The format and contents of the buffer are target-specific.
-On certain targets (ARM, PowerPC, VE, X86), the front end places the
-frame pointer in the first word and the stack pointer in the third word,
-while the target implementation of this intrinsic fills in the remaining
-words. On other targets (SystemZ), saving the calling context to the buffer is left completely to the target implementation.
+context is saved. The front end places the frame pointer in the first word, and
+the target implementation of this intrinsic should place the destination address
+for a `llvm.eh.sjlj.longjmp`_ in the second word. The following three words are
+available for use in a target-specific manner.
.. _llvm.eh.sjlj.longjmp:
diff --git a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
index d307c73a87fc90..59154431877a88 100644
--- a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
@@ -705,11 +705,6 @@ void SystemZAsmPrinter::emitInstruction(const MachineInstr *MI) {
return;
}
- // EH_SjLj_Setup is a dummy terminator instruction of size 0.
- // It is used to handle the clobber register for builtin setjmp.
- case SystemZ::EH_SjLj_Setup:
- return;
-
default:
Lower.lower(MI, LoweredMI);
break;
diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
index 67abc714287e2c..975a0f5050d166 100644
--- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
@@ -751,11 +751,6 @@ SystemZTargetLowering::SystemZTargetLowering(const TargetMachine &TM,
setOperationAction(ISD::INTRINSIC_W_CHAIN, MVT::Other, Custom);
setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::Other, Custom);
- // We're not using SJLJ for exception handling, but they're implemented
- // solely to support use of __builtin_setjmp / __builtin_longjmp.
- setOperationAction(ISD::EH_SJLJ_SETJMP, MVT::i32, Custom);
- setOperationAction(ISD::EH_SJLJ_LONGJMP, MVT::Other, Custom);
-
// We want to use MVC in preference to even a single load/store pair.
MaxStoresPerMemcpy = Subtarget.hasVector() ? 2 : 0;
MaxStoresPerMemcpyOptSize = 0;
@@ -945,240 +940,6 @@ bool SystemZTargetLowering::isFPImmLegal(const APFloat &Imm, EVT VT,
return SystemZVectorConstantInfo(Imm).isVectorConstantLegal(Subtarget);
}
-MachineBasicBlock *
-SystemZTargetLowering::emitEHSjLjSetJmp(MachineInstr &MI,
- MachineBasicBlock *MBB) const {
- DebugLoc DL = MI.getDebugLoc();
- const TargetInstrInfo *TII = Subtarget.getInstrInfo();
- const SystemZRegisterInfo *TRI = Subtarget.getRegisterInfo();
-
- MachineFunction *MF = MBB->getParent();
- MachineRegisterInfo &MRI = MF->getRegInfo();
-
- const BasicBlock *BB = MBB->getBasicBlock();
- MachineFunction::iterator I = ++MBB->getIterator();
-
- Register DstReg = MI.getOperand(0).getReg();
- const TargetRegisterClass *RC = MRI.getRegClass(DstReg);
- assert(TRI->isTypeLegalForClass(*RC, MVT::i32) && "Invalid destination!");
- Register mainDstReg = MRI.createVirtualRegister(RC);
- Register restoreDstReg = MRI.createVirtualRegister(RC);
-
- MVT PVT = getPointerTy(MF->getDataLayout());
- assert((PVT == MVT::i64 || PVT == MVT::i32) && "Invalid Pointer Size!");
- // For v = setjmp(buf), we generate.
- // Algorithm:
- //
- // ---------
- // | thisMBB |
- // ---------
- // |
- // ------------------------
- // | |
- // ---------- ---------------
- // | mainMBB | | restoreMBB |
- // | v = 0 | | v = 1 |
- // ---------- ---------------
- // | |
- // -------------------------
- // |
- // -----------------------------
- // | sinkMBB |
- // | phi(v_mainMBB,v_restoreMBB) |
- // -----------------------------
- // thisMBB:
- // buf[FPOffset] = Frame Pointer if hasFP.
- // buf[LabelOffset] = restoreMBB <-- takes address of restoreMBB.
- // buf[BCOffset] = Backchain value if building with -mbackchain.
- // buf[SPOffset] = Stack Pointer.
- // buf[LPOffset] = We never write this slot with R13, gcc stores R13 always.
- // SjLjSetup restoreMBB
- // mainMBB:
- // v_main = 0
- // sinkMBB:
- // v = phi(v_main, v_restore)
- // restoreMBB:
- // v_restore = 1
-
- MachineBasicBlock *thisMBB = MBB;
- MachineBasicBlock *mainMBB = MF->CreateMachineBasicBlock(BB);
- MachineBasicBlock *sinkMBB = MF->CreateMachineBasicBlock(BB);
- MachineBasicBlock *restoreMBB = MF->CreateMachineBasicBlock(BB);
-
- MF->insert(I, mainMBB);
- MF->insert(I, sinkMBB);
- MF->push_back(restoreMBB);
- restoreMBB->setMachineBlockAddressTaken();
-
- MachineInstrBuilder MIB;
-
- // Transfer the remainder of BB and its successor edges to sinkMBB.
- sinkMBB->splice(sinkMBB->begin(), MBB,
- std::next(MachineBasicBlock::iterator(MI)), MBB->end());
- sinkMBB->transferSuccessorsAndUpdatePHIs(MBB);
-
- // thisMBB:
- const int64_t FPOffset = 0; // Slot 1.
- const int64_t LabelOffset = 1 * PVT.getStoreSize(); // Slot 2.
- const int64_t BCOffset = 2 * PVT.getStoreSize(); // Slot 3.
- const int64_t SPOffset = 3 * PVT.getStoreSize(); // Slot 4.
-
- // Buf address.
- Register BufReg = MI.getOperand(1).getReg();
-
- const TargetRegisterClass *PtrRC = getRegClassFor(PVT);
- unsigned LabelReg = MRI.createVirtualRegister(PtrRC);
-
- // Prepare IP for longjmp.
- BuildMI(*thisMBB, MI, DL, TII->get(SystemZ::LARL), LabelReg)
- .addMBB(restoreMBB);
- // Store IP for return from jmp, slot 2, offset = 1.
- BuildMI(*thisMBB, MI, DL, TII->get(SystemZ::STG))
- .addReg(LabelReg)
- .addReg(BufReg)
- .addImm(LabelOffset)
- .addReg(0);
-
- auto *SpecialRegs = Subtarget.getSpecialRegisters();
- bool HasFP = Subtarget.getFrameLowering()->hasFP(*MF);
- if (HasFP) {
- BuildMI(*thisMBB, MI, DL, TII->get(SystemZ::STG))
- .addReg(SpecialRegs->getFramePointerRegister())
- .addReg(BufReg)
- .addImm(FPOffset)
- .addReg(0);
- }
-
- // Store SP.
- BuildMI(*thisMBB, MI, DL, TII->get(SystemZ::STG))
- .addReg(SpecialRegs->getStackPointerRegister())
- .addReg(BufReg)
- .addImm(SPOffset)
- .addReg(0);
-
- // Slot 3(Offset = 2) Backchain value (if building with -mbackchain).
- bool BackChain = MF->getSubtarget<SystemZSubtarget>().hasBackChain();
- if (BackChain) {
- Register BCReg = MRI.createVirtualRegister(RC);
- auto *TFL = Subtarget.getFrameLowering<SystemZFrameLowering>();
- MIB = BuildMI(*thisMBB, MI, DL, TII->get(SystemZ::LG), BCReg)
- .addReg(SpecialRegs->getStackPointerRegister())
- .addImm(TFL->getBackchainOffset(*MF))
- .addReg(0);
-
- BuildMI(*thisMBB, MI, DL, TII->get(SystemZ::STG))
- .addReg(BCReg)
- .addReg(BufReg)
- .addImm(BCOffset)
- .addReg(0);
- }
-
- // Setup.
- MIB = BuildMI(*thisMBB, MI, DL, TII->get(SystemZ::EH_SjLj_Setup))
- .addMBB(restoreMBB);
-
- const SystemZRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
- MIB.addRegMask(RegInfo->getNoPreservedMask());
-
- thisMBB->addSuccessor(mainMBB);
- thisMBB->addSuccessor(restoreMBB);
-
- // mainMBB:
- BuildMI(mainMBB, DL, TII->get(SystemZ::LHI), mainDstReg).addImm(0);
- mainMBB->addSuccessor(sinkMBB);
-
- // sinkMBB:
- BuildMI(*sinkMBB, sinkMBB->begin(), DL, TII->get(SystemZ::PHI), DstReg)
- .addReg(mainDstReg)
- .addMBB(mainMBB)
- .addReg(restoreDstReg)
- .addMBB(restoreMBB);
-
- // restoreMBB.
- BuildMI(restoreMBB, DL, TII->get(SystemZ::LHI), restoreDstReg).addImm(1);
- BuildMI(restoreMBB, DL, TII->get(SystemZ::J)).addMBB(sinkMBB);
- restoreMBB->addSuccessor(sinkMBB);
-
- MI.eraseFromParent();
-
- return sinkMBB;
-}
-
-MachineBasicBlock *
-SystemZTargetLowering::emitEHSjLjLongJmp(MachineInstr &MI,
- MachineBasicBlock *MBB) const {
-
- DebugLoc DL = MI.getDebugLoc();
- const TargetInstrInfo *TII = Subtarget.getInstrInfo();
-
- MachineFunction *MF = MBB->getParent();
- MachineRegisterInfo &MRI = MF->getRegInfo();
-
- MVT PVT = getPointerTy(MF->getDataLayout());
- assert((PVT == MVT::i64 || PVT == MVT::i32) && "Invalid Pointer Size!");
- Register BufReg = MI.getOperand(0).getReg();
- const TargetRegisterClass *RC = MRI.getRegClass(BufReg);
- auto *SpecialRegs = Subtarget.getSpecialRegisters();
-
- Register Tmp = MRI.createVirtualRegister(RC);
- Register BCReg = MRI.createVirtualRegister(RC);
-
- MachineInstrBuilder MIB;
-
- const int64_t FPOffset = 0;
- const int64_t LabelOffset = 1 * PVT.getStoreSize();
- const int64_t BCOffset = 2 * PVT.getStoreSize();
- const int64_t SPOffset = 3 * PVT.getStoreSize();
- const int64_t LPOffset = 4 * PVT.getStoreSize();
-
- MIB = BuildMI(*MBB, MI, DL, TII->get(SystemZ::LG), Tmp)
- .addReg(BufReg)
- .addImm(LabelOffset)
- .addReg(0);
-
- MIB = BuildMI(*MBB, MI, DL, TII->get(SystemZ::LG),
- SpecialRegs->getFramePointerRegister())
- .addReg(BufReg)
- .addImm(FPOffset)
- .addReg(0);
-
- // We are restoring R13 even though we never stored in setjmp from llvm,
- // as gcc always stores R13 in builtin_setjmp. We could have mixed code
- // gcc setjmp and llvm longjmp.
- MIB = BuildMI(*MBB, MI, DL, TII->get(SystemZ::LG), SystemZ::R13D)
- .addReg(BufReg)
- .addImm(LPOffset)
- .addReg(0);
-
- bool BackChain = MF->getSubtarget<SystemZSubtarget>().hasBackChain();
- if (BackChain) {
- MIB = BuildMI(*MBB, MI, DL, TII->get(SystemZ::LG), BCReg)
- .addReg(BufReg)
- .addImm(BCOffset)
- .addReg(0);
- }
-
- MIB = BuildMI(*MBB, MI, DL, TII->get(SystemZ::LG),
- SpecialRegs->getStackPointerRegister())
- .addReg(BufReg)
- .addImm(SPOffset)
- .addReg(0);
-
- if (BackChain) {
- auto *TFL = Subtarget.getFrameLowering<SystemZFrameLowering>();
- BuildMI(*MBB, MI, DL, TII->get(SystemZ::STG))
- .addReg(BCReg)
- .addReg(SpecialRegs->getStackPointerRegister())
- .addImm(TFL->getBackchainOffset(*MF))
- .addReg(0);
- }
-
- MIB = BuildMI(*MBB, MI, DL, TII->get(SystemZ::BR)).addReg(Tmp);
-
- MI.eraseFromParent();
- return MBB;
-}
-
/// Returns true if stack probing through inline assembly is requested.
bool SystemZTargetLowering::hasInlineStackProbe(const MachineFunction &MF) const {
// If the function specifically requests inline stack probes, emit them.
@@ -6531,14 +6292,6 @@ SDValue SystemZTargetLowering::LowerOperation(SDValue Op,
return lowerGET_ROUNDING(Op, DAG);
case ISD::READCYCLECOUNTER:
return lowerREADCYCLECOUNTER(Op, DAG);
- case ISD::EH_SJLJ_SETJMP:
- case ISD::EH_SJLJ_LONGJMP:
- // These operations are legal on our platform, but we cannot actually
- // set the operation action to Legal as common code would treat this
- // as equivalent to Expand. Instead, we keep the operation action to
- // Custom and just leave them unchanged here.
- return Op;
-
default:
llvm_unreachable("Unexpected node to lower");
}
@@ -9980,10 +9733,6 @@ MachineBasicBlock *SystemZTargetLowering::EmitInstrWithCustomInserter(
case SystemZ::PROBED_ALLOCA:
return emitProbedAlloca(MI, MBB);
- case SystemZ::EH_SjLj_SetJmp:
- return emitEHSjLjSetJmp(MI, MBB);
- case SystemZ::EH_SjLj_LongJmp:
- return emitEHSjLjLongJmp(MI, MBB);
case TargetOpcode::STACKMAP:
case TargetOpcode::PATCHPOINT:
diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.h b/llvm/lib/Target/SystemZ/SystemZISelLowering.h
index 0a899e861c73bf..3c06c1fdf2b1bc 100644
--- a/llvm/lib/Target/SystemZ/SystemZISelLowering.h
+++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.h
@@ -476,12 +476,6 @@ class SystemZTargetLowering : public TargetLowering {
// LD, and having the full constant in memory enables reg/mem opcodes.
return VT != MVT::f64;
}
- MachineBasicBlock *emitEHSjLjSetJmp(MachineInstr &MI,
- MachineBasicBlock *MBB) const;
-
- MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr &MI,
- MachineBasicBlock *MBB) const;
-
bool hasInlineStackProbe(const MachineFunction &MF) const override;
AtomicExpansionKind shouldCastAtomicLoadInIR(LoadInst *LI) const override;
AtomicExpansionKind shouldCastAtomicStoreInIR(StoreInst *SI) const override;
diff --git a/llvm/lib/Target/SystemZ/SystemZInstrInfo.td b/llvm/lib/Target/SystemZ/SystemZInstrInfo.td
index d6cddeb8b6c303..5cbba0d9c5edd3 100644
--- a/llvm/lib/Target/SystemZ/SystemZInstrInfo.td
+++ b/llvm/lib/Target/SystemZ/SystemZInstrInfo.td
@@ -1862,23 +1862,6 @@ let mayLoad = 1, mayStore = 1, Defs = [CC] in {
}
}
-//--------------------------------------------------------------------------
-// Setjmp/Longjmp.
-//--------------------------------------------------------------------------
-let isBarrier = 1, hasNoSchedulingInfo = 1 in {
- let hasSideEffects = 1, usesCustomInserter = 1 in {
- def EH_SjLj_SetJmp : Pseudo<(outs GR32:$dst), (ins ADDR64:$R2),
- [(set GR32:$dst, (z_eh_sjlj_setjmp ADDR64:$R2))]>;
- let isTerminator = 1 in {
- def EH_SjLj_LongJmp : Pseudo<(outs), (ins ADDR64:$R2),
- [(z_eh_sjlj_longjmp ADDR64:$R2)]>;
- }
- }
- let isTerminator = 1, isCodeGenOnly = 1, Size = 0 in {
- def EH_SjLj_Setup : Pseudo<(outs), (ins brtarget32:$dst), []>;
- }
-}
-
//===----------------------------------------------------------------------===//
// Message-security assist
//===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/SystemZ/SystemZLongBranch.cpp b/llvm/lib/Target/SystemZ/SystemZLongBranch.cpp
index 36d76235398edd..632218cc61eefe 100644
--- a/llvm/lib/Target/SystemZ/SystemZLongBranch.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZLongBranch.cpp
@@ -220,10 +220,7 @@ static unsigned getInstSizeInBytes(const MachineInstr &MI,
MI.isImplicitDef() || MI.getOpcode() == TargetOpcode::MEMBARRIER ||
// These have a size that may be zero:
MI.isInlineAsm() || MI.getOpcode() == SystemZ::STACKMAP ||
- MI.getOpcode() == SystemZ::PATCHPOINT ||
- // EH_SjLj_Setup is a dummy terminator instruction of size 0,
- // It is used to handle the clobber register for builtin setjmp.
- MI.getOpcode() == SystemZ::EH_SjLj_Setup) &&
+ MI.getOpcode() == SystemZ::PATCHPOINT) &&
"Missing size value for instruction.");
return Size;
}
diff --git a/llvm/lib/Target/SystemZ/SystemZOperators.td b/llvm/lib/Target/SystemZ/SystemZOperators.td
index 90fb4e5f370dab..6cb89ccff85e68 100644
--- a/llvm/lib/Target/SystemZ/SystemZOperators.td
+++ b/llvm/lib/Target/SystemZ/SystemZOperators.td
@@ -238,12 +238,6 @@ def SDT_ZTest : SDTypeProfile<1, 2,
[SDTCisVT<0, i32>,
SDTCisVT<2, i64>]>;
-def SDT_ZSetJmp : SDTypeProfile<1, 1,
- [SDTCisInt<0>,
- SDTCisPtrTy<1>]>;
-def SDT_ZLongJmp : SDTypeProfile<0, 1, [SDTCisPtrTy<0>]>;
-
-
//===----------------------------------------------------------------------===//
// Node definitions
//===----------------------------------------------------------------------===//
@@ -320,12 +314,6 @@ def z_stckf : SDNode<"SystemZISD::STCKF", SDT_ZStoreInherent,
def z_tdc : SDNode<"SystemZISD::TDC", SDT_ZTest>;
-def z_eh_sjlj_setjmp : SDNode<"ISD::EH_SJLJ_SETJMP", SDT_ZSetJmp,
- [SDNPHasChain, SDNPSideEffect]>;
-def z_eh_sjlj_longjmp : SDNode<"ISD::EH_SJLJ_LONGJMP", SDT_ZLongJmp,
- [SDNPHasChain, SDNPSideEffect]>;
-
-
// Defined because the index is an i32 rather than a pointer.
def z_vector_insert : SDNode<"ISD::INSERT_VECTOR_ELT",
SDT_ZInsertVectorElt>;
diff --git a/llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp b/llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp
index 0df2a15753cf3e..d246d3f3c5bd11 100644
--- a/llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp
@@ -254,10 +254,6 @@ SystemZRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
return Regs->getCallPreservedMask(MF, CC);
}
-const uint32_t *SystemZRegisterInfo::getNoPreservedMask() const {
- return CSR_SystemZ_NoRegs_RegMask;
-}
-
BitVector
SystemZRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
BitVector Reserved(getNumRegs());
diff --git a/llvm/lib/Target/SystemZ/SystemZRegisterInfo.h b/llvm/lib/Target/SystemZ/SystemZRegisterInfo.h
index 4f497f8d23d29a..cbc02c73f1ac70 100644
--- a/llvm/lib/Target/SystemZ/SystemZRegisterInfo.h
+++ b/llvm/lib/Target/SystemZ/SystemZRegisterInfo.h
@@ -161,7 +161,6 @@ struct SystemZRegisterInfo : public SystemZGenRegisterInfo {
const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
const uint32_t *getCallPreservedMask(const MachineFunction &MF,
CallingConv::ID CC) const override;
- const uint32_t *getNoPreservedMask() const override;
BitVector getReservedRegs(const MachineFunction &MF) const override;
bool eliminateFrameIndex(MachineBasicBlock::iterator MI,
int SPAdj, unsigned FIOperandNum,
diff --git a/llvm/test/CodeGen/SystemZ/builtin-longjmp.ll b/llvm/test/CodeGen/SystemZ/builtin-longjmp.ll
deleted file mode 100644
index e10f8f82064b44..00000000000000
--- a/llvm/test/CodeGen/SystemZ/builtin-longjmp.ll
+++ /dev/null
@@ -1,49 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
-; Test longjmp load from jmp_buf.
-; Frame pointer from Slot 1.
-; Jump address from Slot 2.
-; Backchain Value from Slot 3.
-; Stack Pointer from Slot 4.
-; Literal Pool Pointer from Slot 5.
-
-; RUN: llc < %s -mtriple=s390x-linux-gnu -O2 | FileCheck %s
-
- at buf = global [20 x ptr] zeroinitializer, align 8
-
-define void @foo() {
-; CHECK-LABEL: foo:
-; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: stmg %r11, %r15, 88(%r15)
-; CHECK-NEXT: .cfi_offset %r11, -72
-; CHECK-NEXT: .cfi_offset %r13, -56
-; CHECK-NEXT: .cfi_offset %r15, -40
-; CHECK-NEXT: lgrl %r1, buf at GOT
-; CHECK-NEXT: lg %r2, 8(%r1)
-; CHECK-NEXT: lg %r11, 0(%r1)
-; CHECK-NEXT: lg %r13, 32(%r1)
-; CHECK-NEXT: lg %r15, 24(%r1)
-; CHECK-NEXT: br %r2
-entry:
- tail call void @llvm.eh.sjlj.longjmp(ptr nonnull @buf)
- unreachable
-}
-
-define void @bar() "backchain" {
-; CHECK-LABEL: bar:
-; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: stmg %r11, %r15, 88(%r15)
-; CHECK-NEXT: .cfi_offset %r11, -72
-; CHECK-NEXT: .cfi_offset %r13, -56
-; CHECK-NEXT: .cfi_offset %r15, -40
-; CHECK-NEXT: lgrl %r1, buf at GOT
-; CHECK-NEXT: lg %r2, 8(%r1)
-; CHECK-NEXT: lg %r11, 0(%r1)
-; CHECK-NEXT: lg %r13, 32(%r1)
-; CHECK-NEXT: lg %r3, 16(%r1)
-; CHECK-NEXT: lg %r15, 24(%r1)
-; CHECK-NEXT: stg %r3, 0(%r15)
-; CHECK-NEXT: br %r2
-entry:
- tail call void @llvm.eh.sjlj.longjmp(ptr nonnull @buf)
- unreachable
-}
diff --git a/llvm/test/CodeGen/SystemZ/builtin-setjmp-alloca.ll b/llvm/test/CodeGen/SystemZ/builtin-setjmp-alloca.ll
deleted file mode 100644
index cc7d9c33c02c5b..00000000000000
--- a/llvm/test/CodeGen/SystemZ/builtin-setjmp-alloca.ll
+++ /dev/null
@@ -1,156 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
-; Test setjmp store to jmp_buf when frame pointer is used and saved
-; because of variable size alloca.
-; Frame Pointer is stored in slot 1.
-; Return address in slot 2.
-; Backchain value is stored in slot 3 for -mbackchain option.
-; Stack Pointer in slot 4.
-; Clobber %r6-%r15, %f8-%f15.
-
-; RUN: llc < %s -mtriple=s390x-linux-gnu -O2 | FileCheck %s
-
-declare i32 @llvm.eh.sjlj.setjmp(ptr)
- at buf = global [20 x ptr] zeroinitializer, align 8
-
-define signext i32 @foo() "frame-pointer"="all" {
-; CHECK-LABEL: foo:
-; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: stmg %r6, %r15, 48(%r15)
-; CHECK-NEXT: .cfi_offset %r6, -112
-; CHECK-NEXT: .cfi_offset %r7, -104
-; CHECK-NEXT: .cfi_offset %r8, -96
-; CHECK-NEXT: .cfi_offset %r9, -88
-; CHECK-NEXT: .cfi_offset %r10, -80
-; CHECK-NEXT: .cfi_offset %r11, -72
-; CHECK-NEXT: .cfi_offset %r12, -64
-; CHECK-NEXT: .cfi_offset %r13, -56
-; CHECK-NEXT: .cfi_offset %r14, -48
-; CHECK-NEXT: .cfi_offset %r15, -40
-; CHECK-NEXT: aghi %r15, -240
-; CHECK-NEXT: .cfi_def_cfa_offset 400
-; CHECK-NEXT: lgr %r11, %r15
-; CHECK-NEXT: .cfi_def_cfa_register %r11
-; CHECK-NEXT: std %f8, 232(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f9, 224(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f10, 216(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f11, 208(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f12, 200(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f13, 192(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f14, 184(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f15, 176(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: .cfi_offset %f8, -168
-; CHECK-NEXT: .cfi_offset %f9, -176
-; CHECK-NEXT: .cfi_offset %f10, -184
-; CHECK-NEXT: .cfi_offset %f11, -192
-; CHECK-NEXT: .cfi_offset %f12, -200
-; CHECK-NEXT: .cfi_offset %f13, -208
-; CHECK-NEXT: .cfi_offset %f14, -216
-; CHECK-NEXT: .cfi_offset %f15, -224
-; CHECK-NEXT: la %r0, 160(%r11)
-; CHECK-NEXT: lgrl %r1, buf at GOT
-; CHECK-NEXT: stg %r0, 168(%r11)
-; CHECK-NEXT: mvhi 160(%r11), 10
-; CHECK-NEXT: larl %r0, .LBB0_1
-; CHECK-NEXT: stg %r0, 8(%r1)
-; CHECK-NEXT: stg %r11, 0(%r1)
-; CHECK-NEXT: stg %r15, 24(%r1)
-; CHECK-NEXT: .LBB0_1: # Block address taken
-; CHECK-NEXT: # %entry
-; CHECK-NEXT: .LBB0_2: # %entry
-; CHECK-NEXT: lg %r1, 168(%r11)
-; CHECK-NEXT: lgf %r2, 0(%r1)
-; CHECK-NEXT: ld %f8, 232(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f9, 224(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f10, 216(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f11, 208(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f12, 200(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f13, 192(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f14, 184(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f15, 176(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: lmg %r6, %r15, 288(%r11)
-; CHECK-NEXT: br %r14
-entry:
- %val = alloca ptr, align 8
- %0 = alloca i8, i64 4, align 8
- store ptr %0, ptr %val, align 8
- %1 = load ptr, ptr %val, align 8
- store volatile i32 10, ptr %1, align 4
- %2 = call i32 @llvm.eh.sjlj.setjmp(ptr @buf)
- %3 = load ptr, ptr %val, align 8
- %4 = load volatile i32, ptr %3, align 4
- ret i32 %4
-}
-
-define signext i32 @foo1() "backchain" "frame-pointer"="all" {
-; CHECK-LABEL: foo1:
-; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: stmg %r6, %r15, 48(%r15)
-; CHECK-NEXT: .cfi_offset %r6, -112
-; CHECK-NEXT: .cfi_offset %r7, -104
-; CHECK-NEXT: .cfi_offset %r8, -96
-; CHECK-NEXT: .cfi_offset %r9, -88
-; CHECK-NEXT: .cfi_offset %r10, -80
-; CHECK-NEXT: .cfi_offset %r11, -72
-; CHECK-NEXT: .cfi_offset %r12, -64
-; CHECK-NEXT: .cfi_offset %r13, -56
-; CHECK-NEXT: .cfi_offset %r14, -48
-; CHECK-NEXT: .cfi_offset %r15, -40
-; CHECK-NEXT: lgr %r1, %r15
-; CHECK-NEXT: aghi %r15, -240
-; CHECK-NEXT: .cfi_def_cfa_offset 400
-; CHECK-NEXT: stg %r1, 0(%r15)
-; CHECK-NEXT: lgr %r11, %r15
-; CHECK-NEXT: .cfi_def_cfa_register %r11
-; CHECK-NEXT: std %f8, 232(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f9, 224(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f10, 216(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f11, 208(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f12, 200(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f13, 192(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f14, 184(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: std %f15, 176(%r11) # 8-byte Folded Spill
-; CHECK-NEXT: .cfi_offset %f8, -168
-; CHECK-NEXT: .cfi_offset %f9, -176
-; CHECK-NEXT: .cfi_offset %f10, -184
-; CHECK-NEXT: .cfi_offset %f11, -192
-; CHECK-NEXT: .cfi_offset %f12, -200
-; CHECK-NEXT: .cfi_offset %f13, -208
-; CHECK-NEXT: .cfi_offset %f14, -216
-; CHECK-NEXT: .cfi_offset %f15, -224
-; CHECK-NEXT: la %r0, 160(%r11)
-; CHECK-NEXT: lgrl %r1, buf at GOT
-; CHECK-NEXT: stg %r0, 168(%r11)
-; CHECK-NEXT: mvhi 160(%r11), 10
-; CHECK-NEXT: larl %r0, .LBB1_1
-; CHECK-NEXT: stg %r0, 8(%r1)
-; CHECK-NEXT: stg %r11, 0(%r1)
-; CHECK-NEXT: stg %r15, 24(%r1)
-; CHECK-NEXT: lg %r0, 0(%r15)
-; CHECK-NEXT: stg %r0, 16(%r1)
-; CHECK-NEXT: .LBB1_1: # Block address taken
-; CHECK-NEXT: # %entry
-; CHECK-NEXT: .LBB1_2: # %entry
-; CHECK-NEXT: lg %r1, 168(%r11)
-; CHECK-NEXT: lgf %r2, 0(%r1)
-; CHECK-NEXT: ld %f8, 232(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f9, 224(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f10, 216(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f11, 208(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f12, 200(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f13, 192(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f14, 184(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f15, 176(%r11) # 8-byte Folded Reload
-; CHECK-NEXT: lmg %r6, %r15, 288(%r11)
-; CHECK-NEXT: br %r14
-entry:
- %val = alloca ptr, align 8
- %0 = alloca i8, i64 4, align 8
- store ptr %0, ptr %val, align 8
- %1 = load ptr, ptr %val, align 8
- store volatile i32 10, ptr %1, align 4
- %2 = call i32 @llvm.eh.sjlj.setjmp(ptr @buf)
- %3 = load ptr, ptr %val, align 8
- %4 = load volatile i32, ptr %3, align 4
- ret i32 %4
-}
-
diff --git a/llvm/test/CodeGen/SystemZ/builtin-setjmp-spills.ll b/llvm/test/CodeGen/SystemZ/builtin-setjmp-spills.ll
deleted file mode 100644
index 08871b342a3bd0..00000000000000
--- a/llvm/test/CodeGen/SystemZ/builtin-setjmp-spills.ll
+++ /dev/null
@@ -1,254 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
-; Simulate register pressure around setjmp call and check all virtual registers
-; are saved to stack before setjmp call and restored from stack after the call.
-; And these registers are not live across the setjmp call.
-; setjmp storing to jmp_buf.
-; Return address in slot 2.
-; Stack Pointer in slot 4.
-; Clobber %r6-%r15, %f8-%f15.
-
-; RUN: llc < %s -mtriple=s390x-linux-gnu -O3 | FileCheck %s
-
-declare i32 @llvm.eh.sjlj.setjmp(ptr)
-
- at t = global i32 0, align 4
- at s = global i32 0, align 4
- at r = global i32 0, align 4
- at q = global i32 0, align 4
- at p = global i32 0, align 4
- at o = global i32 0, align 4
- at n = global i32 0, align 4
- at m = global i32 0, align 4
- at l = global i32 0, align 4
- at k = global i32 0, align 4
- at j = global i32 0, align 4
- at i = global i32 0, align 4
- at h = global i32 0, align 4
- at g = global i32 0, align 4
- at f = global i32 0, align 4
- at e = global i32 0, align 4
- at d = global i32 0, align 4
- at c = global i32 0, align 4
- at b = global i32 0, align 4
- at a = global i32 0, align 4
- at buf = global [10 x ptr] zeroinitializer, align 8
-
-define signext i32 @func() {
-; CHECK-LABEL: func:
-; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: stmg %r6, %r15, 48(%r15)
-; CHECK-NEXT: .cfi_offset %r6, -112
-; CHECK-NEXT: .cfi_offset %r7, -104
-; CHECK-NEXT: .cfi_offset %r8, -96
-; CHECK-NEXT: .cfi_offset %r9, -88
-; CHECK-NEXT: .cfi_offset %r10, -80
-; CHECK-NEXT: .cfi_offset %r11, -72
-; CHECK-NEXT: .cfi_offset %r12, -64
-; CHECK-NEXT: .cfi_offset %r13, -56
-; CHECK-NEXT: .cfi_offset %r14, -48
-; CHECK-NEXT: .cfi_offset %r15, -40
-; CHECK-NEXT: aghi %r15, -384
-; CHECK-NEXT: .cfi_def_cfa_offset 544
-; CHECK-NEXT: std %f8, 376(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f9, 368(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f10, 360(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f11, 352(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f12, 344(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f13, 336(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f14, 328(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f15, 320(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: .cfi_offset %f8, -168
-; CHECK-NEXT: .cfi_offset %f9, -176
-; CHECK-NEXT: .cfi_offset %f10, -184
-; CHECK-NEXT: .cfi_offset %f11, -192
-; CHECK-NEXT: .cfi_offset %f12, -200
-; CHECK-NEXT: .cfi_offset %f13, -208
-; CHECK-NEXT: .cfi_offset %f14, -216
-; CHECK-NEXT: .cfi_offset %f15, -224
-; CHECK-NEXT: lgrl %r1, t at GOT
-; CHECK-NEXT: lgrl %r2, s at GOT
-; CHECK-NEXT: stg %r1, 312(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r1), 1
-; CHECK-NEXT: lgrl %r1, r at GOT
-; CHECK-NEXT: lgrl %r3, q at GOT
-; CHECK-NEXT: stg %r2, 304(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r2), 1
-; CHECK-NEXT: lgrl %r2, p at GOT
-; CHECK-NEXT: stg %r1, 296(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r1), 1
-; CHECK-NEXT: stg %r3, 288(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r3), 1
-; CHECK-NEXT: lgrl %r1, o at GOT
-; CHECK-NEXT: stg %r2, 280(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r2), 1
-; CHECK-NEXT: lgrl %r2, n at GOT
-; CHECK-NEXT: lgrl %r3, m at GOT
-; CHECK-NEXT: stg %r1, 272(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r1), 1
-; CHECK-NEXT: lgrl %r1, l at GOT
-; CHECK-NEXT: stg %r2, 264(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r2), 1
-; CHECK-NEXT: stg %r3, 256(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r3), 1
-; CHECK-NEXT: lgrl %r2, k at GOT
-; CHECK-NEXT: stg %r1, 248(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r1), 1
-; CHECK-NEXT: lgrl %r1, j at GOT
-; CHECK-NEXT: lgrl %r3, i at GOT
-; CHECK-NEXT: stg %r2, 240(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r2), 1
-; CHECK-NEXT: lgrl %r2, h at GOT
-; CHECK-NEXT: stg %r1, 232(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r1), 1
-; CHECK-NEXT: stg %r3, 224(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r3), 1
-; CHECK-NEXT: lgrl %r1, g at GOT
-; CHECK-NEXT: stg %r2, 216(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r2), 1
-; CHECK-NEXT: lgrl %r2, f at GOT
-; CHECK-NEXT: lgrl %r3, e at GOT
-; CHECK-NEXT: stg %r1, 208(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r1), 1
-; CHECK-NEXT: lgrl %r1, d at GOT
-; CHECK-NEXT: stg %r2, 200(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r2), 1
-; CHECK-NEXT: stg %r3, 192(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r3), 1
-; CHECK-NEXT: lgrl %r2, c at GOT
-; CHECK-NEXT: stg %r1, 184(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r1), 1
-; CHECK-NEXT: lgrl %r3, b at GOT
-; CHECK-NEXT: lgrl %r4, a at GOT
-; CHECK-NEXT: stg %r2, 176(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r2), 1
-; CHECK-NEXT: lgrl %r1, buf at GOT
-; CHECK-NEXT: stg %r3, 168(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r3), 1
-; CHECK-NEXT: stg %r4, 160(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: mvhi 0(%r4), 1
-; CHECK-NEXT: larl %r0, .LBB0_2
-; CHECK-NEXT: stg %r0, 8(%r1)
-; CHECK-NEXT: stg %r15, 24(%r1)
-; CHECK-NEXT: .LBB0_1: # %entry
-; CHECK-NEXT: lhi %r0, 0
-; CHECK-NEXT: j .LBB0_3
-; CHECK-NEXT: .LBB0_2: # Block address taken
-; CHECK-NEXT: # %entry
-; CHECK-NEXT: lhi %r0, 1
-; CHECK-NEXT: .LBB0_3: # %entry
-; CHECK-NEXT: lg %r1, 160(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 168(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 176(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 184(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 192(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 200(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 208(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 216(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 224(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 232(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 240(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 248(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 256(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 264(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 272(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 280(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 288(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 296(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 304(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lg %r1, 312(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: a %r0, 0(%r1)
-; CHECK-NEXT: lgfr %r2, %r0
-; CHECK-NEXT: ld %f8, 376(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f9, 368(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f10, 360(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f11, 352(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f12, 344(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f13, 336(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f14, 328(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f15, 320(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: lmg %r6, %r15, 432(%r15)
-; CHECK-NEXT: br %r14
-entry:
- store i32 1, ptr @t, align 4
- store i32 1, ptr @s, align 4
- store i32 1, ptr @r, align 4
- store i32 1, ptr @q, align 4
- store i32 1, ptr @p, align 4
- store i32 1, ptr @o, align 4
- store i32 1, ptr @n, align 4
- store i32 1, ptr @m, align 4
- store i32 1, ptr @l, align 4
- store i32 1, ptr @k, align 4
- store i32 1, ptr @j, align 4
- store i32 1, ptr @i, align 4
- store i32 1, ptr @h, align 4
- store i32 1, ptr @g, align 4
- store i32 1, ptr @f, align 4
- store i32 1, ptr @e, align 4
- store i32 1, ptr @d, align 4
- store i32 1, ptr @c, align 4
- store i32 1, ptr @b, align 4
- store i32 1, ptr @a, align 4
- %0 = tail call i32 @llvm.eh.sjlj.setjmp(ptr nonnull @buf)
- %1 = load i32, ptr @a, align 4
- %2 = load i32, ptr @b, align 4
- %3 = load i32, ptr @c, align 4
- %4 = load i32, ptr @d, align 4
- %5 = load i32, ptr @e, align 4
- %6 = load i32, ptr @f, align 4
- %7 = load i32, ptr @g, align 4
- %8 = load i32, ptr @h, align 4
- %9 = load i32, ptr @i, align 4
- %10 = load i32, ptr @j, align 4
- %11 = load i32, ptr @k, align 4
- %12 = load i32, ptr @l, align 4
- %13 = load i32, ptr @m, align 4
- %14 = load i32, ptr @n, align 4
- %15 = load i32, ptr @o, align 4
- %16 = load i32, ptr @p, align 4
- %17 = load i32, ptr @q, align 4
- %18 = load i32, ptr @r, align 4
- %19 = load i32, ptr @s, align 4
- %20 = load i32, ptr @t, align 4
- %add = add i32 %1, %0
- %add1 = add i32 %add, %2
- %add2 = add i32 %add1, %3
- %add3 = add i32 %add2, %4
- %add4 = add i32 %add3, %5
- %add5 = add i32 %add4, %6
- %add6 = add i32 %add5, %7
- %add7 = add i32 %add6, %8
- %add8 = add i32 %add7, %9
- %add9 = add i32 %add8, %10
- %add10 = add i32 %add9, %11
- %add11 = add i32 %add10, %12
- %add12 = add i32 %add11, %13
- %add13 = add i32 %add12, %14
- %add14 = add i32 %add13, %15
- %add15 = add i32 %add14, %16
- %add16 = add i32 %add15, %17
- %add17 = add i32 %add16, %18
- %add18 = add i32 %add17, %19
- %add19 = add i32 %add18, %20
- ret i32 %add19
-}
-
diff --git a/llvm/test/CodeGen/SystemZ/builtin-setjmp.ll b/llvm/test/CodeGen/SystemZ/builtin-setjmp.ll
deleted file mode 100644
index f381b875ae3a98..00000000000000
--- a/llvm/test/CodeGen/SystemZ/builtin-setjmp.ll
+++ /dev/null
@@ -1,124 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
-; Test setjmp store jmp_buf
-; Return address in slot 2.
-; Backchain value is stored in slot 3 for -mbackchain option.
-; Stack Pointer in slot 4.
-; Clobber %r6-%r15, %f8-%f15.
-
-; RUN: llc < %s -mtriple=s390x-linux-gnu -O2 | FileCheck %s
-
-declare i32 @llvm.eh.sjlj.setjmp(ptr)
- at buf = global [20 x ptr] zeroinitializer, align 8
-
-define void @foo() {
-; CHECK-LABEL: foo:
-; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: stmg %r6, %r15, 48(%r15)
-; CHECK-NEXT: .cfi_offset %r6, -112
-; CHECK-NEXT: .cfi_offset %r7, -104
-; CHECK-NEXT: .cfi_offset %r8, -96
-; CHECK-NEXT: .cfi_offset %r9, -88
-; CHECK-NEXT: .cfi_offset %r10, -80
-; CHECK-NEXT: .cfi_offset %r11, -72
-; CHECK-NEXT: .cfi_offset %r12, -64
-; CHECK-NEXT: .cfi_offset %r13, -56
-; CHECK-NEXT: .cfi_offset %r14, -48
-; CHECK-NEXT: .cfi_offset %r15, -40
-; CHECK-NEXT: aghi %r15, -64
-; CHECK-NEXT: .cfi_def_cfa_offset 224
-; CHECK-NEXT: std %f8, 56(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f9, 48(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f10, 40(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f11, 32(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f12, 24(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f13, 16(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f14, 8(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f15, 0(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: .cfi_offset %f8, -168
-; CHECK-NEXT: .cfi_offset %f9, -176
-; CHECK-NEXT: .cfi_offset %f10, -184
-; CHECK-NEXT: .cfi_offset %f11, -192
-; CHECK-NEXT: .cfi_offset %f12, -200
-; CHECK-NEXT: .cfi_offset %f13, -208
-; CHECK-NEXT: .cfi_offset %f14, -216
-; CHECK-NEXT: .cfi_offset %f15, -224
-; CHECK-NEXT: lgrl %r1, buf at GOT
-; CHECK-NEXT: larl %r0, .LBB0_1
-; CHECK-NEXT: stg %r0, 8(%r1)
-; CHECK-NEXT: stg %r15, 24(%r1)
-; CHECK-NEXT: .LBB0_1: # Block address taken
-; CHECK-NEXT: # %entry
-; CHECK-NEXT: .LBB0_2: # %entry
-; CHECK-NEXT: ld %f8, 56(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f9, 48(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f10, 40(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f11, 32(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f12, 24(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f13, 16(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f14, 8(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f15, 0(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: lmg %r6, %r15, 112(%r15)
-; CHECK-NEXT: br %r14
-entry:
- %0 = tail call i32 @llvm.eh.sjlj.setjmp(ptr nonnull @buf)
- ret void
-}
-
-define void @foo1() "backchain" {
-; CHECK-LABEL: foo1:
-; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: stmg %r6, %r15, 48(%r15)
-; CHECK-NEXT: .cfi_offset %r6, -112
-; CHECK-NEXT: .cfi_offset %r7, -104
-; CHECK-NEXT: .cfi_offset %r8, -96
-; CHECK-NEXT: .cfi_offset %r9, -88
-; CHECK-NEXT: .cfi_offset %r10, -80
-; CHECK-NEXT: .cfi_offset %r11, -72
-; CHECK-NEXT: .cfi_offset %r12, -64
-; CHECK-NEXT: .cfi_offset %r13, -56
-; CHECK-NEXT: .cfi_offset %r14, -48
-; CHECK-NEXT: .cfi_offset %r15, -40
-; CHECK-NEXT: lgr %r1, %r15
-; CHECK-NEXT: aghi %r15, -64
-; CHECK-NEXT: .cfi_def_cfa_offset 224
-; CHECK-NEXT: stg %r1, 0(%r15)
-; CHECK-NEXT: std %f8, 56(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f9, 48(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f10, 40(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f11, 32(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f12, 24(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f13, 16(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f14, 8(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: std %f15, 0(%r15) # 8-byte Folded Spill
-; CHECK-NEXT: .cfi_offset %f8, -168
-; CHECK-NEXT: .cfi_offset %f9, -176
-; CHECK-NEXT: .cfi_offset %f10, -184
-; CHECK-NEXT: .cfi_offset %f11, -192
-; CHECK-NEXT: .cfi_offset %f12, -200
-; CHECK-NEXT: .cfi_offset %f13, -208
-; CHECK-NEXT: .cfi_offset %f14, -216
-; CHECK-NEXT: .cfi_offset %f15, -224
-; CHECK-NEXT: lgrl %r1, buf at GOT
-; CHECK-NEXT: larl %r0, .LBB1_1
-; CHECK-NEXT: stg %r0, 8(%r1)
-; CHECK-NEXT: stg %r15, 24(%r1)
-; CHECK-NEXT: lg %r0, 0(%r15)
-; CHECK-NEXT: stg %r0, 16(%r1)
-; CHECK-NEXT: .LBB1_1: # Block address taken
-; CHECK-NEXT: # %entry
-; CHECK-NEXT: .LBB1_2: # %entry
-; CHECK-NEXT: ld %f8, 56(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f9, 48(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f10, 40(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f11, 32(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f12, 24(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f13, 16(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f14, 8(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: ld %f15, 0(%r15) # 8-byte Folded Reload
-; CHECK-NEXT: lmg %r6, %r15, 112(%r15)
-; CHECK-NEXT: br %r14
-entry:
- %0 = tail call i32 @llvm.eh.sjlj.setjmp(ptr nonnull @buf)
- ret void
-}
-
More information about the cfe-commits
mailing list