3 Commits

Author SHA1 Message Date
Ivan R. Ivanov
19420c0e77
[OpenMP] Fix non-contiguous array omp target update (#156889)
The existing implementation has three issues which this patch addresses.

1. The last dimension which represents the bytes in the type, has the
wrong stride and count. For example, for a 4 byte int, count=1 and
stride=4. The correct representation here is count=4 and stride=1
because there are 4 bytes (count=4) that we need to copy and we do not
skip any bytes (stride=1).

2. The size of the data copy was computed using the last dimension.
However, this is incorrect in cases where some of the final dimensions
get merged into one. In this case we need to take the combined size of
the merged dimensions, which is (Count * Stride) of the first merged
dimension.

3. The Offset into a dimension was computed as a multiple of its Stride.
However, this Stride which is in bytes, already includes the stride
multiplier given by the user. This means that when the user specified
1:3:2, i.e. elements 1, 3, 5, the runtime incorrectly copied elements 2,
4, 6. Fix this by precomputing at compile time the Offset to be in bytes
by correctly multiplying the offset by the stride of the dimension
without the user-specified multiplier.
2026-03-26 15:55:31 +01:00
Nick Sarnie
1beec14434
[offload][lit] XFAIL new tests failing on intelgpu (#185908)
New tests from https://github.com/llvm/llvm-project/pull/176708 and
https://github.com/llvm/llvm-project/pull/181987 fail on `intelgpu`, I
updated the [GH
issue](https://github.com/llvm/llvm-project/issues/182897).

Example fails
[here](https://lab.llvm.org/buildbot/#/builders/225/builds/3441).

Signed-off-by: Nick Sarnie <nick.sarnie@intel.com>
2026-03-12 14:37:56 +00:00
Amit Tiwari
14de1bb711
[Clang][OpenMP] Support expression semantics in target update fields with non-contiguous array sections (#176708)
### Issue: Variable stride not recognized as non-contiguous
`CGOpenMPRuntime.cpp` failed to detect `DeclRefExpr`, `MemberExpr`,
`ArraySubscriptExpr` as non-contiguous.

**Fixes**:

`clang/lib/CodeGen/CGOpenMPRuntime.cpp` - Variable stride detection +
dimension count logic
Detect variable stride expressions
(`DeclRefExpr/MemberExpr/ArraySubscriptExpr`) as non-contiguous

Added testcases to cover stack arrays, heap pointers, struct members,
etc., for expression semantics in non-contiguous update.
2026-03-10 19:26:17 +05:30