@@ -39,6 +39,12 @@ def AS_match {
3939 code global = [{
4040 return ChkMemSDNodeAddressSpace(N, llvm::ADDRESS_SPACE_GLOBAL);
4141 }];
42+ code const = [{
43+ return ChkMemSDNodeAddressSpace(N, llvm::ADDRESS_SPACE_CONST);
44+ }];
45+ code param = [{
46+ return ChkMemSDNodeAddressSpace(N, llvm::ADDRESS_SPACE_PARAM);
47+ }];
4248}
4349
4450// A node that will be replaced with the current PTX version.
@@ -744,13 +750,57 @@ foreach dim = [1, 2, 3, 4, 5] in {
744750 }
745751}
746752
747- //Prefetchu and Prefetch
753+ //Prefetchu and Prefetch
754+
755+ class PREFETCH_CONST_CHK<dag frag>
756+ : PatFrag<!setdagop(frag, ops), frag, [{
757+ auto *Addr = N->getOperand(2).getNode();
758+ auto *MemNode = dyn_cast<MemSDNode>(Addr);
759+ bool result = MemNode->getMemOperand()->getAddrSpace() == llvm::ADDRESS_SPACE_CONST;
760+ return result;
761+ }]>;
762+
763+
764+ class PREFETCH_GENERIC_CHK<dag frag>
765+ : PatFrag<!setdagop(frag, ops), frag, [{
766+ auto *Addr = N->getOperand(2).getNode();
767+ auto *MemNode = dyn_cast<MemSDNode>(Addr);
768+ bool result= MemNode->getMemOperand()->getAddrSpace() == llvm::ADDRESS_SPACE_GENERIC;
769+ return result;
770+ }]>;
771+
772+
773+ class PREFETCH_PARAM_CHK<dag frag>
774+ : PatFrag<!setdagop(frag, ops), frag, [{
775+ auto *Addr = N->getOperand(2).getNode();
776+ auto *MemNode = dyn_cast<MemSDNode>(Addr);
777+ bool result = MemNode->getMemOperand()->getAddrSpace() == llvm::ADDRESS_SPACE_PARAM;
778+ return result;
779+ }]>;
748780
781+ defvar frag_pat = (int_nvvm_prefetch_tensormap node:$addr);
782+
783+ def prefetch_tensormap_const : PREFETCH_CONST_CHK<frag_pat>;
784+ def prefetch_tensormap_gen : PREFETCH_GENERIC_CHK<frag_pat>;
785+ def prefetch_tensormap_param : PREFETCH_PARAM_CHK<frag_pat>;
786+
787+ def PREFETCH_CONST_TENSORMAP : NVPTXInst<(outs), (ins ADDR:$addr),
788+ "prefetch.const.tensormap [$addr];",
789+ [(prefetch_tensormap_const addr:$addr)]>;
790+
791+ def PREFETCH_GENERIC_TENSORMAP : NVPTXInst<(outs), (ins ADDR:$addr),
792+ "prefetch.tensormap [$addr];",
793+ [(prefetch_tensormap_gen addr:$addr)]>;
794+
795+ def PREFETCH_PARAM_TENSORMAP : NVPTXInst<(outs), (ins ADDR:$addr),
796+ "prefetch.param.tensormap [$addr];",
797+ [(prefetch_tensormap_param addr:$addr)]>;
798+
799+
749800class PREFETCH_INTRS<string InstName, Intrinsic Intr> :
750801 BasicNVPTXInst<(outs), (ins ADDR:$addr),
751802 InstName,
752- [(Intr addr:$addr)]>,
753- Requires<[hasPTX<80>, hasSM<90>]>;
803+ [(Intr addr:$addr)]>;
754804
755805def PREFETCHU_L1 : PREFETCH_INTRS<"prefetchu.L1", int_nvvm_prefetchu_L1>;
756806def PREFETCH_L1 : PREFETCH_INTRS<"prefetch.L1", int_nvvm_prefetch_L1>;
@@ -759,10 +809,6 @@ def PREFETCH_GLOBAL_L1 : PREFETCH_INTRS<"prefetch.global.L1", int_nvvm_prefetch_
759809def PREFETCH_LOCAL_L1 : PREFETCH_INTRS<"prefetch.local.L1", int_nvvm_prefetch_local_L1>;
760810def PREFETCH_GLOBAL_L2 : PREFETCH_INTRS<"prefetch.global.L2", int_nvvm_prefetch_global_L2>;
761811def PREFETCH_LOCAL_L2 : PREFETCH_INTRS<"prefetch.local.L2", int_nvvm_prefetch_local_L2>;
762- def PREFETCH_CONST_TENSORMAP : PREFETCH_INTRS<"prefetch.const.tensormap",
763- int_nvvm_prefetch_const_tensormap>;
764- def PREFETCH_GENERIC_TENSORMAP : PREFETCH_INTRS<"prefetch.tensormap",
765- int_nvvm_prefetch_generic_tensormap>;
766812def PREFETCH_GLOBAL_L2_EVICT_NORMAL : PREFETCH_INTRS<"prefetch.global.L2::evict_normal",
767813 int_nvvm_prefetch_global_L2_evict_normal>;
768814def PREFETCH_GLOBAL_L2_EVICT_LAST : PREFETCH_INTRS<"prefetch.global.L2::evict_last",
0 commit comments