@@ -3233,35 +3233,15 @@ def NVVM_CpAsyncBulkGlobalToSharedClusterOp :
3233
3233
attr-dict `:` type($dstMem) `,` type($srcMem)
3234
3234
}];
3235
3235
3236
+ let extraClassDeclaration = [{
3237
+ static mlir::NVVM::IDArgPair
3238
+ getIntrinsicIDAndArgs(Operation &op, LLVM::ModuleTranslation &mt,
3239
+ llvm::IRBuilderBase& builder);
3240
+ }];
3236
3241
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);
3265
3245
}];
3266
3246
}
3267
3247
0 commit comments