19 #include "llvm/IR/IntrinsicsNVPTX.h"
25 #define DEBUG_TYPE "nvvm-intr-range"
57 "Add !range metadata to NVVM intrinsics.",
false,
false)
63 if (
C->getMetadata(LLVMContext::MD_range))
78 } MaxBlockSize, MaxGridSize;
79 MaxBlockSize.x = 1024;
80 MaxBlockSize.y = 1024;
83 MaxGridSize.x =
SmVersion >= 30 ? 0x7fffffff : 0xffff;
84 MaxGridSize.y = 0xffff;
85 MaxGridSize.z = 0xffff;
95 switch (
Callee->getIntrinsicID()) {
97 case Intrinsic::nvvm_read_ptx_sreg_tid_x:
98 Changed |= addRangeMetadata(0, MaxBlockSize.x, Call);
100 case Intrinsic::nvvm_read_ptx_sreg_tid_y:
101 Changed |= addRangeMetadata(0, MaxBlockSize.y, Call);
103 case Intrinsic::nvvm_read_ptx_sreg_tid_z:
104 Changed |= addRangeMetadata(0, MaxBlockSize.z, Call);
108 case Intrinsic::nvvm_read_ptx_sreg_ntid_x:
109 Changed |= addRangeMetadata(1, MaxBlockSize.x+1, Call);
111 case Intrinsic::nvvm_read_ptx_sreg_ntid_y:
112 Changed |= addRangeMetadata(1, MaxBlockSize.y+1, Call);
114 case Intrinsic::nvvm_read_ptx_sreg_ntid_z:
115 Changed |= addRangeMetadata(1, MaxBlockSize.z+1, Call);
119 case Intrinsic::nvvm_read_ptx_sreg_ctaid_x:
120 Changed |= addRangeMetadata(0, MaxGridSize.x, Call);
122 case Intrinsic::nvvm_read_ptx_sreg_ctaid_y:
123 Changed |= addRangeMetadata(0, MaxGridSize.y, Call);
125 case Intrinsic::nvvm_read_ptx_sreg_ctaid_z:
126 Changed |= addRangeMetadata(0, MaxGridSize.z, Call);
130 case Intrinsic::nvvm_read_ptx_sreg_nctaid_x:
131 Changed |= addRangeMetadata(1, MaxGridSize.x+1, Call);
133 case Intrinsic::nvvm_read_ptx_sreg_nctaid_y:
134 Changed |= addRangeMetadata(1, MaxGridSize.y+1, Call);
136 case Intrinsic::nvvm_read_ptx_sreg_nctaid_z:
137 Changed |= addRangeMetadata(1, MaxGridSize.z+1, Call);
141 case Intrinsic::nvvm_read_ptx_sreg_warpsize:
142 Changed |= addRangeMetadata(32, 32+1, Call);
146 case Intrinsic::nvvm_read_ptx_sreg_laneid:
147 Changed |= addRangeMetadata(0, 32, Call);