[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