@@ -3233,35 +3233,15 @@ def NVVM_CpAsyncBulkGlobalToSharedClusterOp :
32333233 attr-dict `:` type($dstMem) `,` type($srcMem)
32343234 }];
32353235
3236+ let extraClassDeclaration = [{
3237+ static mlir::NVVM::IDArgPair
3238+ getIntrinsicIDAndArgs(Operation &op, LLVM::ModuleTranslation &mt,
3239+ llvm::IRBuilderBase& builder);
3240+ }];
32363241 string llvmBuilder = [{
3237- // Arguments to the intrinsic:
3238- // dst, mbar, src, size
3239- // multicast_mask, cache_hint,
3240- // flag for multicast_mask,
3241- // flag for cache_hint
3242- llvm::SmallVector<llvm::Value *> translatedOperands;
3243- translatedOperands.push_back($dstMem);
3244- translatedOperands.push_back($mbar);
3245- translatedOperands.push_back($srcMem);
3246- translatedOperands.push_back($size);
3247-
3248- // Multicast, if available
3249- llvm::LLVMContext &ctx = moduleTranslation.getLLVMContext();
3250- auto *i16Unused = llvm::ConstantInt::get(llvm::Type::getInt16Ty(ctx), 0);
3251- bool isMulticast = op.getMulticastMask() ? true : false;
3252- translatedOperands.push_back(isMulticast ? $multicastMask : i16Unused);
3253-
3254- // Cachehint, if available
3255- auto *i64Unused = llvm::ConstantInt::get(llvm::Type::getInt64Ty(ctx), 0);
3256- bool isCacheHint = op.getL2CacheHint() ? true : false;
3257- translatedOperands.push_back(isCacheHint ? $l2CacheHint : i64Unused);
3258-
3259- // Flag arguments for multicast and cachehint
3260- translatedOperands.push_back(builder.getInt1(isMulticast));
3261- translatedOperands.push_back(builder.getInt1(isCacheHint));
3262-
3263- createIntrinsicCall(builder,
3264- llvm::Intrinsic::nvvm_cp_async_bulk_global_to_shared_cluster, translatedOperands);
3242+ auto [id, args] = NVVM::CpAsyncBulkGlobalToSharedClusterOp::getIntrinsicIDAndArgs(
3243+ *op, moduleTranslation, builder);
3244+ createIntrinsicCall(builder, id, args);
32653245 }];
32663246}
32673247
0 commit comments