[LV] Extract helper to simplify phi removal in connectEpiVectorL (NFC) (#198203)
Extract the repeated edge-redirect + DomTree update pattern into a
RedirectEdge lambda, and convert the separate removeIncomingValue calls
for check blocks into a loop.
[JTS] Readd assertion
Now that VP metadata has been cleaned up a little bit, we can reenable
this assertion.
Reviewers: alexander-shaposhnikov, mtrofin
Pull Request: https://github.com/llvm/llvm-project/pull/198141
[InstCombine] Convert logical and/or with trunc nuw to i1 into bitwise ops (#198178)
if it is know that `trunc nuw to i1 ` can not be poison logical and/or
can be folded to bitwise ops.
proof https://alive2.llvm.org/ce/z/xQ2Sj-
[libc++] Require the exact assignment expression to be trivial in __uninitialized_allocator_copy_impl
__uninitialized_allocator_copy_impl has an optimization that replaces allocator_traits::construct with std::copy for raw pointer ranges when the element type is trivially copy constructible and trivially copy assignable.
The copy-assignment trait only checks whether assignment from const T& is trivial. That is weaker than the expression used by std::copy, which evaluates *out = *in. If overload resolution selects a different non-trivial assignment operator for that expression, std::copy can call that operator on uninitialized storage.
Check is_trivially_assignable<_Out&, _In&> instead in both header copies. This matches the assignment expression used by std::copy, preserves the optimized path when that assignment is actually trivial, and avoids making non-const raw pointer callers select the generic allocator_traits::construct overload due to a qualification conversion.
Add a vector copy-constructor regression test with a type whose defaulted copy assignment is trivial but whose templated assignment operator is selected for non-const lvalue sources.
Tested with:
build-libcxx-fresh/bin/llvm-lit -q libcxx/test/std/containers/sequences/vector/vector.cons/copy.pass.cpp libcxx/test/libcxx/memory/uninitialized_allocator_copy.pass.cpp
build-libcxx-fresh/bin/llvm-lit -q --param std=c++03 libcxx/test/libcxx/memory/uninitialized_allocator_copy.pass.cpp
build-libcxx-fresh/bin/llvm-lit -q --param std=c++20 libcxx/test/std/containers/sequences/vector/vector.cons/copy.pass.cpp
build-libcxx-fresh/bin/llvm-lit -q --param std=c++11 libcxx/test/std/containers/sequences/vector/vector.cons/copy.pass.cpp
[sanitizer][test] Fix coverage-module-unloaded.cpp etc. on Solaris (#198164)
When switching `clang++` to the default Solaris 11.4 compilation
environment, XPG7 + extensions, two tests `FAIL`:
```
AddressSanitizer-i386-sunos :: TestCases/Posix/coverage-module-unloaded.cpp
AddressSanitizer-i386-sunos-dynamic :: TestCases/Posix/coverage-module-unloaded.cpp
SanitizerCommon-asan-i386-SunOS :: get_module_and_offset_for_pc.cpp
SanitizerCommon-ubsan-i386-SunOS :: get_module_and_offset_for_pc.cpp
SanitizerCommon-ubsan-x86_64-SunOS :: get_module_and_offset_for_pc.cpp
```
The failure mode is the same in both cases: the tests fail to link with
`main` undefined. This happens because `<sys/mman.h>` defines
```
#define SHARED 0x10
[13 lines not shown]
[mlir][SPIR-V] Fix math.powf lowering for non-integer exponents (#197727)
The ConvertFToS usage only works when y is an integer. Use it only for
integer constants, for others: lower as GL.Exp(y * GL.Log(x))
[AArch64] Fix handling of x29/x30 in inline assembly clobbers (#167783)
The AArch64 backend was silently ignoring inline assembly clobbers when
numeric register names (x29, x30) were used instead of their
architectural aliases (fp, lr). I found this bug via inline assembly
in Zig, which not normalize the register names the way clang does.
There is an incoplete workaround for this in Rust, but that only
handles `x30/lr`, not `x29/fp`. I thought it would make
sense to fix this properly rather than adding a workaround to Zig.
This patch adds explicit handling in getRegForInlineAsmConstraint() to
map both numeric and alias forms to the correct physical registers,
following the same pattern used by the RISC-V backend.
I've left `x31/sp` without changes, it would nice to have to have
warning when trying to clobber `x31`, just like there is for `sp`,
but that register needs different handling, so it's best done
separately.
[24 lines not shown]