================ @@ -2174,23 +2129,40 @@ let mayStore = true in { []>; } -let isCall=1 in { - multiclass CALL<string OpcStr, SDNode OpNode> { - def PrintCallNoRetInst : NVPTXInst<(outs), (ins), - OpcStr # " ", [(OpNode 0)]>; - def PrintCallRetInst1 : NVPTXInst<(outs), (ins), - OpcStr # " (retval0), ", [(OpNode 1)]>; +/// CALL(Chain, IsConvergent, IsIndirectCall/IsUniform, NumReturns, +/// NumParams, Callee, Proto, InGlue) + +def CallOperand : Operand<i32> { let PrintMethod = "printCallOperand"; } + +foreach is_convergent = [0, 1] in { + defvar convergent_suffix = !if(is_convergent, "_conv", ""); + + let isCall = 1, isConvergent = is_convergent in { + def CALL # convergent_suffix : + NVPTXInst<(outs), (ins ADDR_base:$addr, CallOperand:$rets, CallOperand:$params, i32imm:$proto), + "call${rets:RetList} $addr, (${params:ParamList}), prototype_$proto;", []>; + + def CALL_UNI # convergent_suffix : + NVPTXInst<(outs), (ins ADDR_base:$addr, CallOperand:$rets, CallOperand:$params), + "call.uni${rets:RetList} $addr, (${params:ParamList});", []>; } -} -defm Call : CALL<"call", PrintCall>; -defm CallUni : CALL<"call.uni", PrintCallUni>; + defvar inst = !cast<NVPTXInst>("CALL" # convergent_suffix); + defvar inst_uni = !cast<NVPTXInst>("CALL_UNI" # convergent_suffix); ---------------- AlexMaclean wrote:
I've renamed these to `call_inst` and `call_uni_inst` https://github.com/llvm/llvm-project/pull/145581 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits