@@ -3015,28 +3015,11 @@ def NVVM_GriddepcontrolLaunchDependentsOp
30153015// NVVM Mapa Op
30163016//===----------------------------------------------------------------------===//
30173017
3018- // Helper predicates for address space checking
3019- def IsGenericAddressSpace : CPred<"llvm::cast<LLVM::LLVMPointerType>($_self).getAddressSpace() == 0">;
3020- def IsSharedAddressSpace : CPred<"llvm::cast<LLVM::LLVMPointerType>($_self).getAddressSpace() == 3">;
3021- def IsSharedClusterAddressSpace : CPred<"llvm::cast<LLVM::LLVMPointerType>($_self).getAddressSpace() == 7">;
3022-
3023- class NVVM_MapaASCheck<string inputArg, string resultArg> :
3024- PredOpTrait<"Valid address-space check(or mapping) for mapa Op",
3025- Or<[
3026- // Generic -> Generic
3027- And<[
3028- SubstLeaves<"$_self", "$" # inputArg # ".getType()", IsGenericAddressSpace>,
3029- SubstLeaves<"$_self", "$" # resultArg # ".getType()", IsGenericAddressSpace>
3030- ]>,
3031- // Shared -> SharedCluster
3032- And<[
3033- SubstLeaves<"$_self", "$" # inputArg # ".getType()", IsSharedAddressSpace>,
3034- SubstLeaves<"$_self", "$" # resultArg # ".getType()", IsSharedClusterAddressSpace>
3035- ]>
3036- ]>>;
3037-
3038- def NVVM_MapaOp: NVVM_Op<"mapa",
3039- [NVVM_MapaASCheck<"a", "res">, NVVMRequiresSM<90>]> {
3018+ def NVVM_MapaASCheck : PredOpTrait<"Valid address-space check(or mapping) for mapa Op",
3019+ Or<[InputMatchesTypes<["a", "res"], [LLVM_PointerShared, LLVM_PointerSharedCluster]>.predicate,
3020+ InputMatchesTypes<["a", "res"], [LLVM_PointerGeneric, LLVM_PointerGeneric]>.predicate]>>;
3021+
3022+ def NVVM_MapaOp: NVVM_Op<"mapa", [NVVM_MapaASCheck, NVVMRequiresSM<90>]> {
30403023 let results = (outs AnyTypeOf<[LLVM_PointerGeneric, LLVM_PointerSharedCluster]>:$res);
30413024 let arguments = (ins AnyTypeOf<[LLVM_PointerGeneric, LLVM_PointerShared]>:$a, I32:$b);
30423025
0 commit comments