[llvm] [NVPTX] Add support for stacksave, stackrestore intrinsics (PR #114484)
Alex MacLean via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 1 09:17:10 PDT 2024
================
@@ -2287,6 +2290,54 @@ SDValue NVPTXTargetLowering::LowerDYNAMIC_STACKALLOC(SDValue Op,
return DAG.getNode(NVPTXISD::DYNAMIC_STACKALLOC, DL, RetTypes, AllocOps);
}
+SDValue NVPTXTargetLowering::LowerSTACKRESTORE(SDValue Op,
+ SelectionDAG &DAG) const {
+ SDLoc DL(Op.getNode());
+ if (STI.getPTXVersion() < 73 || STI.getSmVersion() < 52) {
+ const Function &Fn = DAG.getMachineFunction().getFunction();
+
+ DiagnosticInfoUnsupported NoStackRestore(
+ Fn,
+ "Support for stackrestore introduced in PTX ISA version 7.3 and "
+ "requires target sm_52.",
+ DL.getDebugLoc());
+ DAG.getContext()->diagnose(NoStackRestore);
+ return Op.getOperand(0);
+ }
+
+ const MVT LocalVT = getPointerTy(DAG.getDataLayout(), ADDRESS_SPACE_LOCAL);
+ SDValue Chain = Op.getOperand(0);
+ SDValue Ptr = Op.getOperand(1);
+ SDValue ASC = DAG.getAddrSpaceCast(DL, LocalVT, Ptr, ADDRESS_SPACE_GENERIC,
+ ADDRESS_SPACE_LOCAL);
+ return DAG.getNode(NVPTXISD::STACKRESTORE, DL, MVT::Other, {Chain, ASC});
+}
+
+SDValue NVPTXTargetLowering::LowerSTACKSAVE(SDValue Op,
+ SelectionDAG &DAG) const {
+ SDLoc DL(Op.getNode());
+ if (STI.getPTXVersion() < 73 || STI.getSmVersion() < 52) {
+ const Function &Fn = DAG.getMachineFunction().getFunction();
+
+ DiagnosticInfoUnsupported NoStackSave(
+ Fn,
+ "Support for stacksave introduced in PTX ISA version 7.3 and "
+ "requires target sm_52.",
----------------
AlexMaclean wrote:
Updated this one as well.
https://github.com/llvm/llvm-project/pull/114484
More information about the llvm-commits
mailing list