[LAA] SCEV-licm-reduce depend_diff_types test (NFC) (#213875)
Reduce a couple of tests in depend_diff_types in a way that preserves
SCEV expressions, by creating invariants that we hoist outside the loop.
This makes the tests a bit clearer.
Illustration: https://godbolt.org/z/eTqdoPPzn
Co-authored-by: Andrei Elovikov <andrei.elovikov at sifive.com>
[libc] Add more Linux-specific macro for fcntl and sched. (#213727)
* Add more `O_` flags (in particular, `O_LARGEFILE`) to fcntl-macros and
group all creation/status flags (shared and arch-specific) together.
* Add Linux `CLONE_` flags to sched-macros (to be exposed from
`<sched.h>`). Those are also provided in `<linux/sched.h>` kernel
header, but the libc users often expect to find them in regular
`<sched.h>` as those are passed to `clone()` syscall wrapper. Migrate
internal Linux thread implementation to use our own header (instead of
Linux kernel) for these macro.
Updated with the following changes:
- Modified to report an error on boundary condition.
- Modified tests for the boundary error message.
- Corrected accessibility attributes by giving explicit attributes as needed.
- Added regression test for attributes.
- Reworded incorrect comment.
- Switched to originalTypeSymbol to use in-scope name.
- Added test case to verify pre-built mod name usage.
[AMDGPU] Fold fsub into fma_mix via free neg_lo modifier (#212305)
Rewrite the fsub->fma_mix pattern as `fma((-y), 1.0, x)` using the free
neg_lo modifier
instead of multiplying by -1.0 (which doesn't always flip the sign of
NaN), use the hardware free neg_lo bit, which does a true sign flip. As
a result, now the fold always matches fsub actual behavior instead of
only in the common case (non-NaN FP numbers)
[CodeGen] Fix null pointer dereferencing issue (#214543)
Fixes #197580. Fixes 99f7018958ed3daf2abf8d49178c24fbf1eb1010.
In Rematerializer::isRegIdenticalAtUses(), handle case when DefVN is
null.
[AMDGPU] Fix combineMasks dropping condition (#203180)
The problem is related to `S_AND (S_AND x, x), exec` case
When the nested mask op is the outer S_AND/S_OR first operand with two
identical operands, combineMasks kept exec instead of a nested operand,
folding to S_AND exec, exec and dropping the condition
[HIP] Add libhipcxx to the default header search path (#214279)
libhipcxx provides C++ library support for HIP device code, similar to
libcudacxx for CUDA. CUDA toolchains make libcudacxx available through
the
toolkit include path by default. HIP users should likewise be able to
include libhipcxx headers without an installation-specific include
option.
Add include/libhipcxx from the selected ROCm installation when the
directory exists. It follows the same search order and controls as the
other HIP include paths.
[AMDGPU] Fix SIFoldOperands miscompiling values that leave a divergent loop (#203256)
A scalar value latched per-lane inside a divergent loop was being folded
into a use after the loop, so every lane wrongly read the same value
[lldb][test] Skip the frame 0 expedite test with an out-of-tree debugserver (#214448)
`test_memory_reads_when_examining_frame0_locals` asserts that examining
frame 0's locals reads no stack memory, which only holds when
debugserver
expedites the stopped frame's stack in `jThreadsInfo`. That is
added in b631e0cbd1c9, so the assertion only holds for an in-tree
debugserver.
The GreenDragon `lldb-cmake-sanitized` bot configures with
`-DLLDB_USE_SYSTEM_DEBUGSERVER=ON`, so it tests against the debugserver
shipped in Xcode. That one predates the expedite, so test fails:
```
FAIL: test_memory_reads_when_examining_frame0_locals
AssertionError: 2 != 0 : expected NO stack memory reads for frame 0 (its
stack is expedited in jThreadsInfo).
memory reads while examining locals: stack=2 heap=1 other=1 (total=4)
stack region: [0x16b540000,0x16f53c000)
[7 lines not shown]
[SYCL][SPIR-V][Windows] Extend BaseSPIRTargetInfo host-adaptation for Windows support (#208196)
The existing host-adaptation mechanism in BaseSPIRTargetInfo copies type
properties from the host but has gaps causing incorrect behavior on
Windows:
1. PointerWidth/PointerAlign, SizeType, PtrDiffType, IntPtrType were not
copied from the host; derived classes hardcoded LP64 defaults.
2. getBuiltinVaListKind() returned VoidPtr unconditionally instead of
delegating to the host's va_list kind.
3. Derived-class constructors unconditionally overwrote host-adapted
values, working on Linux only by coincidence.
This patch addresses these issues by copying pointer-related types
from the host in BaseSPIRTargetInfo, delegating va_list kind to the
host,
and setting architecture-appropriate defaults in derived classes when no
host is
present or when host and device pointer widths differ.
[2 lines not shown]
[clang][StaticAnalysis] Fix an false negative bug in handling '__builtin*overflow'
For a binary operation 'A op B' and a result type 'T', these builtins
return true/false for whether the operation's result is a value 'T'
cannot hold. CSA models this by computing the operation's result in a
temporary type and comparing it against the bounds of 'T'. However,
the temporary type is only twice as wide as 'T', not the
operands. When either operand is wider than 'T's doubled width, the
result of 'A op B' can silently wrap around before the comparison,
producing a false negative.
The solution is to find the proper type to temporarily hold the result
of 'A op B' from types of 'A' and 'B'.
[scudo] Add check to verify locking is correct. (#214377)
Added checks that at the end of lockSlow, the lock is held and when
doing an unlock, the lock is held.
This found a bug in primary32.h:unmapTestOnly where the lock is not
held, so fixed that.