[Mlir-commits] [mlir] [MLIR][NVVM] Add support for narrow-fp to bf16x2 conversions (PR #200157)
Durgadoss R
llvmlistbot at llvm.org
Mon Jun 1 04:43:01 PDT 2026
================
@@ -4877,6 +4930,41 @@ NVVM::IDArgPair ConvertF4x2ToF16x2Op::getIntrinsicIDAndArgs(
return {intId, {extendedI16}};
}
+NVVM::IDArgPair ConvertF4x2ToBF16x2Op::getIntrinsicIDAndArgs(
+ Operation &op, LLVM::ModuleTranslation &mt, llvm::IRBuilderBase &builder) {
+ auto curOp = cast<NVVM::ConvertF4x2ToBF16x2Op>(op);
+ bool hasScale = static_cast<bool>(curOp.getScaleFactor());
+ bool hasSatfinite = curOp.getSat() == NVVM::SaturationMode::SATFINITE;
+ bool hasRelu = curOp.getRelu();
+
+ static constexpr llvm::Intrinsic::ID E2M1Ids[] = {
+ llvm::Intrinsic::nvvm_e2m1x2_to_bf16x2_rn_scale_n2_ue8m0,
+ llvm::Intrinsic::nvvm_e2m1x2_to_bf16x2_rn_relu_scale_n2_ue8m0,
+ llvm::Intrinsic::nvvm_e2m1x2_to_bf16x2_rn_satfinite_scale_n2_ue8m0,
+ llvm::Intrinsic::nvvm_e2m1x2_to_bf16x2_rn_relu_satfinite_scale_n2_ue8m0,
+ };
+
+ unsigned idx = (hasSatfinite << 1) | hasRelu;
+ llvm::Intrinsic::ID intId =
+ llvm::TypeSwitch<mlir::Type, llvm::Intrinsic::ID>(curOp.getSrcType())
+ .Case([&](Float4E2M1FNType type) { return E2M1Ids[idx]; })
+ .Default([](mlir::Type type) {
+ llvm_unreachable("Invalid type for ConvertF4x2ToBF16x2Op");
+ return llvm::Intrinsic::not_intrinsic;
+ });
+
+ llvm::Value *extendedI16 =
+ builder.CreateZExt(mt.lookupValue(curOp.getSrc()),
+ llvm::Type::getInt16Ty(builder.getContext()));
+
+ llvm::SmallVector<llvm::Value *> args;
+ args.push_back(extendedI16);
+ args.push_back(hasScale ? mt.lookupValue(curOp.getScaleFactor())
+ : builder.getInt16(0x7f7f));
----------------
durga4github wrote:
Can we add a one liner comment here about this being the default-sf value?
https://github.com/llvm/llvm-project/pull/200157
More information about the Mlir-commits
mailing list