[llvm] [NVPTX] Constant fold blockDim when reqntid is specified (PR #191575)
Alex MacLean via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 11 12:49:24 PDT 2026
================
@@ -90,23 +100,44 @@ static bool runNVVMIntrRange(Function &F) {
std::min(0xffffu, FunctionClusterRank),
std::min(0xffffu, FunctionClusterRank)};
- const auto ProccessIntrinsic = [&](IntrinsicInst *II) -> bool {
+ // When reqntid is specified, ntid (blockDim) values are exact compile-time
+ // constants. Get per-dimension values for constant folding.
+ const Vector3 ReqBlockDim =
----------------
AlexMaclean wrote:
I think this logic can be rewritten further to make it a bit clearer. Maybe something like this very rough pseudocode sketch....
```
Vector3 MinBlockDim, MaxBlockDim;
if (!ReqNTID.empty())
MinBlockDim = MaxBlockDim = ReqNTID;
else {
MinBlockDim = {1,1,1}
MaxBlockDim = OverallMaxNTID (capped at HW limits)
}
...
case Intrinsic::nvvm_read_ptx_sreg_tid_x:
return addRangeAttr(0, MaxBlockDim.X, II);
case Intrinsic::nvvm_read_ptx_sreg_ntid_x:
return addRangeAttr(MinBlockDim.X, MaxBlockDim.X + 1, II);
```
https://github.com/llvm/llvm-project/pull/191575
More information about the llvm-commits
mailing list