[DebugInfo][FLMD] Add bitcode printing/parsing for function context
This patch adds support for bitcode printing/parsing for
MDFunctionLocalContext. This is an unusual entry in that it contains
multiple variable-length arrays, and collectively comprises a potentially
very large (technically up to ~2^32, realistically >10000 is possible)
number of records. There is no abbreviation, since the existing
abbreviation mechanism does not easily translate to this case.
Also unique is that, as with the LLParser, we use a custom forward
reference resolution. In this case, we track the metadata IDs rather than
maintaining a TrackingMDRef, and resolve these at the general metadata
resolution step, where the MetadataList has been finalized.
[lldb-dap] Don't share liblldb's log channels (#235767)
lldb-dap links its own copies of lldbHost and lldbUtility, but liblldb
was listed first, so the few private symbols liblldb exports for the
script interpreter plugins bound there.
One of them is LogChannels, lldb-dap's copy of the code used liblldb's
"lldb" log channel. So in server mode, `log enable lldb comm` logged
lldb-dap's own socket writes, into the debugger's output.
Every debugger's output is sent to the client. Each sent output to the
client in turn creates a new `comm log` to the debugger's output. The
lines circulated forever. Once the pipe was full, the main loop, its
only reader, blocked writing to it while holding the log mutex, and the
server hung on shutdown in DAP::Disconnect.
`log enable lldb comm` from the client console is enough to trigger the
loop in server mode.
[3 lines not shown]
wip/licasa: import licasa-0.8.1
Licasa is an image viewer and editor for the Linux desktop inspired
by Google's Picasa Photo Viewer. It opens a photo from your file
manager in an image-sized fullscreen window or in a floating mode.
wip/licasa: import licasa-0.8.1
Licasa is an image viewer and editor for the Linux desktop inspired
by Google's Picasa Photo Viewer. It opens a photo from your file
manager in an image-sized fullscreen window or in a floating mode.
[OpenMP] Switch the underlying type of llvm::omp::Version to int
It was unsigned before. The goal is to unify Version and VersionRange,
and VersionRange stores versions as int.
[OpenMP] Replace cast operator with member function (#236088)
Replace the explicit cast operator to the underlying type in
llvm::omp::Version with a member function "value()" that returns
the underlying value.
[clang-tidy] Fix false positive in modernize-make-unique (#229802)
It is not valid to turn
struct P {};
struct S : P { private: ~S(); };
std::unique_ptr<P> p;
void foo() { p.reset(new S); }
into
void foo() { p = std::make_unique<S>(); }
because the destructor of S is private, so it's illegal to create a
temporary unique_ptr from it.
[SelectionDAG] Don't always use abs(sub) when expanding abdu (#235043)
`TargetLowering::expandABD` expands `abd(a, b)` to `abs(sub(a, b))` when
`willNotOverflowSub` says the sub can't overflow. For `abdu` without
known
non-negative operands, this checks for unsigned overflow, which only
proves
`a >= b (unsigned)`, so `abdu(a, b) == sub(a, b)`. adding abs around it
is wrong, when the
difference is greater than INT_MAX, e.g. `abdu(lshr(x, 1), or(y,
INT_MIN))`.
Keep abs(sub) for the signed check (abds, or abdu with non-negative
operands) and use just sub when abdu and `a >= b`.
Fixes #233087.
(cherry picked from commit f16dbe0ec4b653736148c78bebdefcfe1c88198e)
[Allocator] Cap MinAlign at alignof(max_align_t) (#235373)
alignof(std::max_align_t) is 4 on NetBSD/i386, whose <stddef.h> defines
max_align_t as a union of void *, long double, and long long.
Fix #230782
(cherry picked from commit 0b6b6ed806536c1b170101061ff3eeed91c8f061)
[lld][ELF] Use size_t for getNumSymbols return type (#230760)
Fix 32-bit overflow in `SymbolTableBaseSection::getSize` by changing
`getNumSymbols` to return size_t.
The overflow happens in a real large binary with 258 million symbols.
With 24-byte ELF64 symbol entries, the symbol table size exceeds 4GiB.
[AMDGPU] Fix packed bf16 inline constant folding with op_sel (#233292)
On targets with BF16InlineConstFromUpperFP32, a bf16 inline constant C
is materialized as the equivalent fp32 value, so the operand reads as
{hi: C, lo: +0.0}. op_sel/op_sel_hi can only pick C or +0.0 for each
half, making <C, C>, <C, +0.0> and <+0.0, C> exactly the foldable immediates.
Handle them up front in tryFoldImmWithOpSel() instead of disabling the
generic op_sel paths: previously <C, +0.0> was folded without the op_sel
bits that steer C into the low lane, and <+0.0, C> was not folded at all.
An integer inline constant is sign-extended instead of taken from the
upper fp32 half, so it reads as {hi: 0 or 0xFFFF, lo: C} and needs the
opposite op_sel. Handle that too; only a half wanting the sign extension of a
negative constant has no encoding and is turned away.
This also makes the SCALAR_TO_VECTOR splat combine (#227479) redundant,
so remove it. Scalar bf16 ops now get their inline constant through op_sel
as well, leaving +0.0 in the dead high lane.
Fixes: ROCM-32187
[flang][OpenMP] Fix verification of REF modifier on LINEAR clause (#232367)
The OpenMP spec has a bug: the restriction should read
> If linear-modifier is ref, list items must not be polymorphic variables,
> assumed-shape arrays, or variables with the ALLOCATABLE attribute.
---------
Co-authored-by: Markus Mützel <markus.muetzel at gmx.de>
(cherry picked from commit 53d096bbf31d12fddbbe2508b7f80bab9628430d)
[clang][Driver] Fix libc++ include path on OpenBSD (#212979)
`clang++` defaults to `-stdlib=libc++` on OpenBSD. When building with both
`clang` and `libcxx` included, the freshly built `clang++` uses the system
version of the `libc++` headers. However, this is from the bundled `libc++`
22.1.8, thus inconsistent with the `libc++` being built.
OpenBSD has its own version of addLibCxxIncludePaths which just includes
`/usr/include/c++/v1`.
This patch removes OpenBSD::addLibCxxIncludePaths in favour of the generic
version in `Gnu.cpp`.
(cherry picked from commit 1204f6b4e9d6bef8ec319d121942dca5cbf94a26)
[TailCallElim] Drop poison-generating attributes and metadata from accumulator (#233527)
When accumulator recursion elimination rewrites the accumulator
instruction to use the accumulator PHI (and clones it at each return in
`cleanupAndFinalize()`), its operands change, so poison-generating
annotations derived from the original operands may no longer hold. Only
flags were dropped so far (#200624); return attributes like `range()`
and metadata like `!range` were kept.
In the reproducer from the issue, `umax(%r, 1)` carries `range(i8 1,
3)`, and the per-return copy `umax(%accumulator.tr, %k)` kept it
although it can return 0, so `-O2` inferred `range(i8 1, 3)` for the
whole function (miscompiling the Rust code linked in the issue).
This patch uses `dropPoisonGeneratingAnnotations()` instead of
`dropPoisonGeneratingFlags()`.
Fixes #233085
(cherry picked from commit 21c1bcd7059ca56dee6bc377e60a06a3b18a1d69)
[X86] Clamp callee-saved spill slot alignment to the stack alignment (#235883)
Callee-saved spill slots are fixed relative to the incoming stack pointer,
so aligning them beyond the stack alignment cannot make their addresses
more aligned: it only adds padding and raises MaxAlign, which can realign
the stack. X86 used the generic slot assignment in PrologEpilogInserter,
which clamps the alignment, until 4a01230db47e (D4081) added the X86
override without the clamp, so YMM/ZMM slots have been over-aligned since.
Assisted-By: Claude Opus 5.5 <noreply at anthropic.com>
sysutils/cni-epair: Update to 1.2.0
Containers can now join a VLAN of a bridge with vlanfilter, set per
network in the epair plugin block (vlan, taggedVlans).
Changes: https://github.com/daemonless/cni-epair/releases/tag/v1.2.0
PR: 300139
Approved by: acm (mentor)