aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorHanumanth <hhanuman@mathworks.com>2025-10-22 09:19:40 -0400
committerGitHub <noreply@github.com>2025-10-22 15:19:40 +0200
commitd08cbc1cdd7b73e9a582f5602e8ca4829decab8c (patch)
treee06b46353f8c3e52c716b9270269a2184da4aad2 /clang/lib/CodeGen/CodeGenModule.cpp
parentb3073470424c9ef4c5f319d3eed4d42170e15cf1 (diff)
downloadllvm-d08cbc1cdd7b73e9a582f5602e8ca4829decab8c.zip
llvm-d08cbc1cdd7b73e9a582f5602e8ca4829decab8c.tar.gz
llvm-d08cbc1cdd7b73e9a582f5602e8ca4829decab8c.tar.bz2
[mlir][linalg] Fix Linalg runtime verification pass to handle tensors with dimensions of size 0 (#163791)
Runtime verification on Linalg structured ops unconditionally computed `end - 1` to determine the last iteration index before composing indexing maps. This caused spurious "negative index" assertion failures while operating on empty tensors (tensors with a dimension of size 0). The issue occurs because: 1. Empty tensors create loop ranges [0, 0) with zero trip count 2. Computing end - 1 = 0 - 1 = -1 creates a fictitious negative index 3. The negative index check triggers even though no loop iterations occur The fix is to guard all runtime verification with a check that ensures all loop ranges are non-empty (start < end) before performing any index arithmetic. Example MLIR that previously failed: ```mlir func.func @fill_empty() -> tensor<0xi32> { %c0 = arith.constant 0 : i32 %empty = tensor.empty() : tensor<0xi32> %filled = linalg.fill ins(%c0 : i32) outs(%empty : tensor<0xi32>) -> tensor<0xi32> return %filled : tensor<0xi32> } ``` --------- Co-authored-by: Hanumanth Hanumantharayappa <hhanuman@ah-hhanuman-l.dhcp.mathworks.com>
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions