74 if (!(!ReqNTID.
empty() || OverallMaxNTID || OverallClusterRank))
77 const unsigned MaxNTID =
78 OverallMaxNTID.value_or(std::numeric_limits<unsigned>::max());
80 const unsigned FunctionClusterRank =
81 OverallClusterRank.value_or(std::numeric_limits<unsigned>::max());
86 Vector3 MinBlockDim, MaxBlockDim;
87 if (!ReqNTID.
empty()) {
89 MinBlockDim = MaxBlockDim = {ReqNTID[0], ReqNTID[1], ReqNTID[2]};
91 MinBlockDim = {1, 1, 1};
92 MaxBlockDim = {std::min(1024u, MaxNTID), std::min(1024u, MaxNTID),
93 std::min(64u, MaxNTID)};
98 const Vector3 MaxClusterRank{std::min(0x7fffffffu, FunctionClusterRank),
99 std::min(0xffffu, FunctionClusterRank),
100 std::min(0xffffu, FunctionClusterRank)};
103 switch (
II->getIntrinsicID()) {
105 case Intrinsic::nvvm_read_ptx_sreg_tid_x:
106 return addRangeAttr(0, MaxBlockDim.X,
II);
107 case Intrinsic::nvvm_read_ptx_sreg_tid_y:
108 return addRangeAttr(0, MaxBlockDim.Y,
II);
109 case Intrinsic::nvvm_read_ptx_sreg_tid_z:
110 return addRangeAttr(0, MaxBlockDim.Z,
II);
114 case Intrinsic::nvvm_read_ptx_sreg_ntid_x:
115 return addRangeAttr(MinBlockDim.X, MaxBlockDim.X + 1,
II);
116 case Intrinsic::nvvm_read_ptx_sreg_ntid_y:
117 return addRangeAttr(MinBlockDim.Y, MaxBlockDim.Y + 1,
II);
118 case Intrinsic::nvvm_read_ptx_sreg_ntid_z:
119 return addRangeAttr(MinBlockDim.Z, MaxBlockDim.Z + 1,
II);
122 case Intrinsic::nvvm_read_ptx_sreg_cluster_ctaid_x:
123 return addRangeAttr(0, MaxClusterRank.X,
II);
124 case Intrinsic::nvvm_read_ptx_sreg_cluster_ctaid_y:
125 return addRangeAttr(0, MaxClusterRank.Y,
II);
126 case Intrinsic::nvvm_read_ptx_sreg_cluster_ctaid_z:
127 return addRangeAttr(0, MaxClusterRank.Z,
II);
128 case Intrinsic::nvvm_read_ptx_sreg_cluster_nctaid_x:
129 return addRangeAttr(1, MaxClusterRank.X + 1,
II);
130 case Intrinsic::nvvm_read_ptx_sreg_cluster_nctaid_y:
131 return addRangeAttr(1, MaxClusterRank.Y + 1,
II);
132 case Intrinsic::nvvm_read_ptx_sreg_cluster_nctaid_z:
133 return addRangeAttr(1, MaxClusterRank.Z + 1,
II);
135 case Intrinsic::nvvm_read_ptx_sreg_cluster_ctarank:
136 if (OverallClusterRank)
137 return addRangeAttr(0, FunctionClusterRank,
II);
139 case Intrinsic::nvvm_read_ptx_sreg_cluster_nctarank:
140 if (OverallClusterRank)
141 return addRangeAttr(1, FunctionClusterRank + 1,
II);
static bool runOnFunction(Function &F, bool PostInlining)