[llvm] [LLVM][NVPTX] Add NVPTX codegen support for clusterlaunchcontrol instruction (PR #134568)
Durgadoss R via llvm-commits
llvm-commits at lists.llvm.org
Thu May 15 09:06:26 PDT 2025
================
@@ -2795,12 +2801,56 @@ static SDValue LowerIntrinsicVoid(SDValue Op, SelectionDAG &DAG) {
return Op;
}
+static SDValue LowerClusterLaunchControl(SDValue Op, SelectionDAG &DAG) {
+
+ SDNode *N = Op.getNode();
+ if (N->getOperand(1).getValueType() != MVT::i128) {
+ // return, if the operand is already lowered
+ return SDValue();
+ }
+
+ unsigned IID =
+ cast<ConstantSDNode>(N->getOperand(0).getNode())->getZExtValue();
+ auto Opcode = [&]() {
+ switch (IID) {
+ case Intrinsic::nvvm_clusterlaunchcontrol_query_cancel_is_canceled:
+ return NVPTXISD::CLUSTERLAUNCHCONTROL_QUERY_CANCEL_IS_CANCELED;
+ case Intrinsic::nvvm_clusterlaunchcontrol_query_cancel_get_first_ctaid_x:
+ return NVPTXISD::CLUSTERLAUNCHCONTROL_QUERY_CANCEL_GET_FIRST_CTAID_X;
+ case Intrinsic::nvvm_clusterlaunchcontrol_query_cancel_get_first_ctaid_y:
+ return NVPTXISD::CLUSTERLAUNCHCONTROL_QUERY_CANCEL_GET_FIRST_CTAID_Y;
+ case Intrinsic::nvvm_clusterlaunchcontrol_query_cancel_get_first_ctaid_z:
+ return NVPTXISD::CLUSTERLAUNCHCONTROL_QUERY_CANCEL_GET_FIRST_CTAID_Z;
+ default:
+ llvm_unreachable("unsupported/unhandled intrinsic");
+ }
+ }();
+
+ SDLoc DL(N);
+ SDValue TryCancelResponse = N->getOperand(1);
+ SDValue Cast = DAG.getNode(ISD::BITCAST, DL, MVT::v2i64, TryCancelResponse);
+ SDValue TryCancelResponse0 =
+ DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, MVT::i64, Cast,
+ DAG.getIntPtrConstant(0, DL));
+ SDValue TryCancelResponse1 =
+ DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, MVT::i64, Cast,
+ DAG.getIntPtrConstant(1, DL));
+
+ return DAG.getNode(Opcode, DL, N->getVTList(),
+ {TryCancelResponse0, TryCancelResponse1});
+}
+
static SDValue lowerIntrinsicWOChain(SDValue Op, SelectionDAG &DAG) {
switch (Op->getConstantOperandVal(0)) {
default:
return Op;
case Intrinsic::nvvm_internal_addrspace_wrap:
return Op.getOperand(1);
+ case Intrinsic::nvvm_clusterlaunchcontrol_query_cancel_is_canceled:
+ case Intrinsic::nvvm_clusterlaunchcontrol_query_cancel_get_first_ctaid_x:
+ case Intrinsic::nvvm_clusterlaunchcontrol_query_cancel_get_first_ctaid_y:
+ case Intrinsic::nvvm_clusterlaunchcontrol_query_cancel_get_first_ctaid_z:
+ return LowerClusterLaunchControl(Op, DAG);
----------------
durga4github wrote:
LowerClusterLaunchControlQuery(Op, DAG) ?
https://github.com/llvm/llvm-project/pull/134568
More information about the llvm-commits
mailing list