RuntimeLibcalls: Stop returning an attribute when getting libcall types
The attribute half of the pair has been empty since the extension
attributes moved to getIntExtAttr, so return just the type.
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
[mlir][Presburger] Add IntegerRelation::reduceUsingEqualities helper
Add a protected helper that rewrites all constraints of a relation using
the equalities of another relation in the same space, without changing
the intersection of the two. This is a port of ISL's
isl_basic_set_reduce_using_equalities together with
project_onto_involved: the equalities are first projected onto the
variables that occur in the relation being reduced, so that no new
variables (in particular, no locals of the other relation) are
introduced, and each remaining equality is then used to eliminate its
last variable with a non-zero coefficient from every constraint, so that
later variables (locals) are eliminated in favor of earlier ones.
This is a building block for context-based simplification (gist) and is
exercised by the gist tests added in a follow-up commit, since there is
no existing pattern for unit-testing protected members of
IntegerRelation.
Drop a redundant mask and reword the inline-addend comment
Assigning to the 19-bit bitfield already truncates, and the comment had
lost a verb. Say which linker we match and that the field is two's
complement.
Assisted-by: Claude Code
[mlir][Presburger] NFC: factor out removeRedundantConstraintsFromSimplex (#235955)
Split the compaction loops of
IntegerRelation::removeRedundantConstraints
into a new protected helper, removeRedundantConstraintsFromSimplex,
which
removes the constraints of the relation that are marked redundant in a
given Simplex, where the relation's constraints start at a given offset
in the Simplex (inequalities first, then each equality as a pair).
This allows reusing the same compaction logic when the relation's
constraints have been added to a Simplex that already contains other
constraints, e.g., for context-based simplification (gist), where the
context's constraints come first and are never marked redundant.
---
<sub>Stack created with <a
href="https://github.com/github/gh-stack">GitHub Stacks CLI</a> • <a
[4 lines not shown]
CodeGen: Remove -verify-machineinstrs from llc -passes MIR tests (#238157)
With the new pass manager, -verify-machineinstrs does not add a
verifier after each pass; only -verify-each does. Bizarrely, instead
it suppresses the verifier llc runs at the end of the pipeline, so
removing it enables verification of the output. This is probably a
bug, but I think the plan is to replace this flag in the new PM
anyway.
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
[ORC] Ignore non-prefixed strings in InProcessDylibManager. (#238143)
InProcessDylibManager::lookupSymbolsAsync was unconditionally dropping
the first character from symbol names whenever a global prefix was set,
without checking that the first character matched the prefix. E.g. on
Darwin, where the global prefix is '_', a lookup of `printf` should
generate a SymbolsNotFound error (the C function is `_printf`), but
instead it generated a lookup of `rintf`, which binds against a rounding
function from math.h.
This patch fixes the issue by checking that the first character in the
symbol name matches the prefix, returning std::nullopt if it does not.
See discussion at:
https://github.com/llvm/llvm-project/issues/5852#issuecomment-6362518329
[libc] Add POSIX-mandated transitive header inclusion to three headers. (#237436)
Per POSIX standard:
* `<sys/sem.h>` shall include the `<sys/ipc.h>` header
* Inclusion of the `<threads.h>` header shall make
symbols defined in the header `<time.h>` visible.
* Inclusion of the `<pthread.h>` header shall make symbols
defined in the headers `<sched.h>` and `<time.h>` visible.
There are real-world programs which correctly rely on this
behavior.
Implement all of the above using `public_includes` feature in YAML
config
to add transitive inclusions to generated headers. Technically speaking,
we can "make symbols visible" using other mechanisms, but simple
transitive inclusion is by far the easiest one.
[MachineOutliner] Skip returns_twice functions (#237875)
fixes: #237874
If a function returns twice, or calls a function that can return twice,
skip it. The context saved by functions such as `setjmp` will be
different if they take place within an outlined function. Ex: Saved
stack pointer will be different.
Was able to trigger a crash by outlining a call to a returns_twice
function.
[clang][NFC] Test Linux/Windows Multilib Resource Dirs (#238147)
This is another follow-up to 78820cb91605693b7d768be4ebc8b66181d3e9c3 to
show the behaviour of resource dir resolution after that change.
Assisted-by: AI
Join short wrapped RUN lines
Removing -verify-machineinstrs shortened these RUN lines enough to fit
on a single line of at most 100 columns.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply at anthropic.com>
Restore indentation of wrapped RUN line continuations
Removing -verify-machineinstrs from the start of a continuation line
also dropped its indentation.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply at anthropic.com>
CodeGen: Remove -verify-machineinstrs from llc -passes MIR tests
With the new pass manager, -verify-machineinstrs does not add a
verifier after each pass; only -verify-each does. Bizarrely, instead
it suppresses the verifier llc runs at the end of the pipeline, so
removing it enables verification of the output. This is probably a
bug, but I think the plan is to replace this flag in the new PM
anyway.
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
CodeGen: Remove -verify-machineinstrs from single -run-pass MIR tests (#238144)
Since #228248 / 66366908, llc verifies MIR output by default. MIR
inputs were always verified so for an llc invocation running exactly
one pass with -run-pass, the -verify-machineinstrs flag does nothing
so these flags are pointless. We should more aggressively trim
-verify-machineinstrs uses in the future, but this covers the cases
that don't change behavior. This removal was performed by generated
script.
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
[InstCombine] Preserve select weights when sinking frexp through a select (#237367)
foldFrexpOfSelect rebuilds the operation using the original condition
and a constant mantissa value. Copy the original select's branch weights
to the replacement to preserve profiling information.
RuntimeLibcalls: Handle int and long size more similarly
Previously we eagerly computed the int size and passed it through all
the various functions to get the type signature. The long cases were
evaluated in the context that need a long. Treat these the same way
which reduces the number of arguments passed around.
[SPIRV] Ensure `MachineIRBuilder` is always in a valid state (#236948)
If `MachineIRBuilder` hasn't yet done any work it doesn't have a valid
insertion point. We were erroneously assuming that this is not the case,
and thus were directly calling `getMBB()` when it was not legal to do
so. This patch makes it so that we only query the old MBB if we get a
valid insertion point.
[MemProf] Resolve alias ValueInfo in ThinLTO backend summary lookup (#238162)
Synthesized MemProf callsite records for missing tail-call frames are
keyed by the callee's summary entry, which for an alias target is its
AliasSummary rather than its aliasee's FunctionSummary.
In the ThinLTO backend, two paths looked up the aliasee instead, missing
those records and leaving callers uncloned with undefined .memprof.*
references at link time:
1. Alias definitions imported via replaceAliasWithAliasee retain the
aliasee's !guid metadata for body-level profile passes, so querying
F.getGUID() matched the aliasee's ValueInfo and could also resolve
the imported alias copy itself to an imported aliasee's
FunctionSummary instead of skipping it.
2. Direct tail calls to a same-module GlobalAlias resolved the callee to
its aliasee Function before looking up its ValueInfo.
Attach thinlto_alias_guid metadata when importing alias definitions,
[4 lines not shown]
[lldb] Name GDB-remote communication channels (#237417)
Give every GDB-remote communication channel a stable name and include
that name in packet logs. This makes simultaneous native and accelerator
connections distinguishable without relying on object addresses.
The existing client broadcaster name is reused for its communication
channel. LLGS instances now identify native and mock-accelerator servers
separately, and lldb-platform has its own server label.
A focused unit test verifies that send and receive packet logs carry the
correct channel identity.
Testing:
- Built lldb-server and ProcessGdbRemoteTests with the mock accelerator
enabled
- All 52 ProcessGdbRemoteTests pass
- LLVM pinned clang-format check passes
- git diff --check passes
[RISCV] Build register pairs directly for byte vector lowering
Use BuildPairGPRVec when lowering RV32 packed byte build vectors.
The PPAIRE sequence only needs the low byte of each scalar register.
Constructing pairs through scalar-to-vector concatenations lets DAG
folding turn them into build vectors that unnecessarily pack undefined
lanes.
[SelectionDAG] Preserve build-vector legality in concat folding
Custom lowering can construct CONCAT_VECTORS after BUILD_VECTOR
legalization. Folding scalar-to-vector operands there may introduce a
BUILD_VECTOR that the target cannot select.
Require a legal BUILD_VECTOR by default in FoldConcatVectors, and pass
the combine phase from DAGCombiner so pre-legalization combines can still
form illegal operations.