[llvm] [NVVM] Add various intrinsic attrs, cleanup and consolidate td (PR #153436)
Alex MacLean via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 17 23:18:29 PDT 2025
================
@@ -1103,208 +1101,202 @@ let TargetPrefix = "nvvm" in {
}
}
-//
-// Add
-//
+ //
+ // Add
+ //
let IntrProperties = [IntrNoMem, IntrSpeculatable, Commutative] in {
foreach rnd = ["rn", "rz", "rm", "rp"] in {
foreach ftz = ["", "_ftz"] in
def int_nvvm_add_ # rnd # ftz # _f : NVVMBuiltin,
DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty]>;
- def int_nvvm_add_ # rnd # _d : NVVMBuiltin,
- DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty]>;
+ def int_nvvm_add_ # rnd # _d : NVVMBuiltin,
+ DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty]>;
}
}
-//
-// Dot Product
-//
+ //
+ // Dot Product
+ //
foreach a_type = ["s", "u"] in {
foreach b_type = ["s", "u"] in {
def int_nvvm_idp4a_ # a_type # _ # b_type :
- DefaultAttrsIntrinsic<[llvm_i32_ty],
- [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
- [IntrNoMem, IntrSpeculatable]>;
+ PureIntrinsic<[llvm_i32_ty],
+ [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty]>;
def int_nvvm_idp2a_ # a_type # _ # b_type :
- DefaultAttrsIntrinsic<[llvm_i32_ty],
+ PureIntrinsic<[llvm_i32_ty],
[llvm_i32_ty, llvm_i32_ty, llvm_i1_ty, llvm_i32_ty],
- [IntrNoMem, IntrSpeculatable, ImmArg<ArgIndex<2>>]>;
+ [ImmArg<ArgIndex<2>>]>;
}
}
-//
-// Funnel-shift
-//
+ //
+ // Funnel-shift
+ //
foreach direction = ["l", "r"] in
def int_nvvm_fsh # direction # _clamp :
- DefaultAttrsIntrinsic<[llvm_anyint_ty],
- [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>],
- [IntrNoMem, IntrSpeculatable]>;
+ PureIntrinsic<[llvm_anyint_ty],
+ [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>]>;
-//
-// FLO - Find Leading One
-//
+ //
+ // FLO - Find Leading One
+ //
foreach sign = ["s", "u"] in
def int_nvvm_flo_ # sign :
- DefaultAttrsIntrinsic<[llvm_i32_ty],
- [llvm_anyint_ty, llvm_i1_ty],
- [IntrNoMem, IntrSpeculatable, ImmArg<ArgIndex<1>>]>;
+ PureIntrinsic<[llvm_i32_ty], [llvm_anyint_ty, llvm_i1_ty],
+ [ImmArg<ArgIndex<1>>]>;
-//
-// szext
-//
+ //
+ // szext
+ //
foreach ext = ["sext", "zext"] in
foreach mode = ["wrap", "clamp"] in
def int_nvvm_ # ext # _ # mode :
- DefaultAttrsIntrinsic<[llvm_i32_ty],
- [llvm_i32_ty, llvm_i32_ty],
- [IntrNoMem, IntrSpeculatable]>;
+ PureIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty]>;
-//
-// BMSK - bit mask
-//
+ //
+ // BMSK - bit mask
+ //
foreach mode = ["wrap", "clamp"] in
def int_nvvm_bmsk_ # mode :
- DefaultAttrsIntrinsic<[llvm_i32_ty],
- [llvm_i32_ty, llvm_i32_ty],
- [IntrNoMem, IntrSpeculatable]>;
+ PureIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty]>;
-//
-// Convert
-//
- let IntrProperties = [IntrNoMem, IntrSpeculatable] in {
- def int_nvvm_lohi_i2d : NVVMBuiltin,
- DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty, llvm_i32_ty]>;
+ //
+ // FNS - Find the n-th set bit
+ //
+ def int_nvvm_fns : NVVMBuiltin,
+ PureIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty]>;
- def int_nvvm_d2i_lo : NVVMBuiltin,
- DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty]>;
- def int_nvvm_d2i_hi : NVVMBuiltin,
- DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty]>;
+ //
+ // Convert
+ //
+ def int_nvvm_lohi_i2d : NVVMBuiltin,
+ PureIntrinsic<[llvm_double_ty], [llvm_i32_ty, llvm_i32_ty]>;
- foreach rnd = ["rn", "rz", "rm", "rp"] in {
- foreach ftz = ["", "_ftz"] in
- def int_nvvm_d2f_ # rnd # ftz : NVVMBuiltin,
- DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty]>;
+ def int_nvvm_d2i_lo : NVVMBuiltin,
+ PureIntrinsic<[llvm_i32_ty], [llvm_double_ty]>;
+ def int_nvvm_d2i_hi : NVVMBuiltin,
+ PureIntrinsic<[llvm_i32_ty], [llvm_double_ty]>;
----------------
AlexMaclean wrote:
Added a TODO above!
https://github.com/llvm/llvm-project/pull/153436
More information about the llvm-commits
mailing list