[X86] Fix LDTILECFG insertion at block starts (#229239)
When a block-start insertion point is in a block without PHIs, `MIRef`
has no `MachineInstr`. The insertion code incremented `instr_begin()`
unconditionally, placing `PLDTILECFGV` after the block's first
instruction. If that instruction was a tile operation, it executed before
`LDTILECFG`.
Insert after `MI` for concrete instruction positions and at the first
non-PHI for block-start positions. Regression coverage checks block
starts with and without a leading debug record and runs with
`-verify-machineinstrs`. The new test fails on the unmodified base
because `tilezero` precedes `ldtilecfg`.
Fixes #228950
[CodeGen] Drop dead SlotIndexes before allocation
SlotIndexes keeps the index list entry of an erased instruction and only
clears its instruction pointer. Live range sizes are measured in slot
indexes and greedy ranks ranges by size, so the leftovers inflate some
ranges more than others and reorder allocation, spilling heavily on
register-starved functions.
Add SlotIndexes::compactIndexes() to erase them. Erased entries are
unlinked, so LiveIntervals first reports the indexes it holds via
appendReferencedIndexes().
Off by default behind -greedy-compact-slot-indexes, since it changes
allocation across much of the test suite.
[InstCombine] Keep an alloca's metadata when folding its element count (#231073)
simplifyAllocaArraySize turns an alloca with a constant element count
into one of an array type, for instance
%p = alloca i8, i32 10
into
%p = alloca [10 x i8]
It is the same allocation, but it is a new instruction, and the new one
was built from scratch: the alignment and the inalloca flag were copied
across by hand and everything else was dropped. Metadata is part of that
everything else, so anything said about the allocation is silently lost.
Nothing is miscompiled when that happens -- metadata is droppable by
construction, and a consumer that needs it has to cope with it being
absent. What is lost is the optimization the metadata was there to
[13 lines not shown]
[orc-rt] Add some extra verbose-mode logging to ogre (#231123)
When the '-v' (verbose) command line option is passed, print the
connection-spec, connection result (success or failure), and session
result (return code or failure).
[Clang][Windows] Preserve natural alignment for vector and x86_fp80 arrays under #pragma pack. (#208256)
This is to fix a misalignment issue when using `-mlong-double-80` on
Windows with types containing `long double` inside STL containers or
structures with `#pragma pack(8)`.
On Windows, MSVC STL headers use `#pragma pack(8)` which limits struct
alignment to 8
bytes. When `-mlong-double-80` is used, `long double` becomes `x86_fp80`
which requires 16-byte alignment for correctness (movaps instructions).
This creates a conflict:
- Array allocated with 8-byte alignment (due to pragma pack)
- Element type requires 16-byte alignment
- memcpy assumes 16-byte alignment
- Result: Crash due to misaligned access
Example:
```cpp
#include <array>
struct Klass { long double a; };
void test() {
[2 lines not shown]
[analyzer] Respect symbol complexity bound in tryRearrange (#227367)
The `tryRearrange` logic of the `SValBuilder` lets the analyzer engine
conclude e.g. that `(x + 1) - x` is equal to 1. Unfortunately it had to
be disabled by default because it used low-level `SymMgr.acquire` calls
to construct symbols, which did not respect the symbol complexity limit
and could cause exponential slowdowns in corner cases.
This commit switches to using `SValBuilder::makeSymExprValNN` instead of
those `acquire` calls, because that higher-level method respects the
symbol complexity limits.
This patch only affects the analysis in the case when off-by-default
option aggressive-binary-operation-simplification is enabled. In the
future I intend to enable this simplification by default, at least for
the case of additive operations (which are mathematically "simpler").
[analyzer] Ignore nonstandard function named 'memset' (#229119)
Previously CStringChecker ran into an assertion failure when it
encountered a function named 'memset' whose third argument was a `const
int &` instead of the standard `size_t`.
This PR introduces an early return to avoid this.
Fixes #228865
Reported-by: k-arrows
[Mips][GlobalISel] Ignore debug uses in register bank inference (#229948)
Mips GlobalISel currently considers debug instructions when inferring
register banks for ambiguous generic instructions. A `DBG_VALUE` can
therefore cause an ordinary floating-point value to be assigned to
`gprb` instead of `fprb`.
Ignore debug instructions when walking direct uses and COPY chains. This
also handles an unconstrained 32-bit `G_IMPLICIT_DEF` as an ambiguous
value, mapping it to `gprb` instead of asserting after its debug-only
use is ignored.
The MIR test covers a direct debug use, a COPY with only a debug use,
and a 32-bit `G_IMPLICIT_DEF` with only a debug use.
Fixes #229625
Assisted-by: OpenAI Codex 5.6 Sol, co-reviewed by Claude and Yongqiang
Tian.
[Passes] Run MergeICmps/ExpandMemCmps in LTO post-link pipeline (#230562)
Otherwise memcmp will never get expanded if running the combination of
ThinLTO pre-link and LTO post-link, which is what Rust does, and what
unified LTO does.
The pipeline position is chosen to roughly match what the module
optimization pipeline does. There is no compile-time impact.
For https://github.com/rust-lang/rust/issues/163677.
scummvm: updated to 2026.4.0
2026.4.0 "Never-slop" (2026-10-10)
New games:
- Added support for Mortadelo y Filemón: Una Aventura de Cine Edición Original.
- Added support for Mortadelo y Filemón: Dos vaqueros chapuceros.
- Added support for Mortadelo y Filemón: Terror, Espanto y Pavor.
- Added support for Mortadelo y Filemón: La Sexta Secta.
- Added support for Mortadelo y Filemón: Operación Moscú.
- Added support for Mortadelo y Filemón: El Escarabajo de Cleopatra.
- Added support for Mortadelo y Filemón: La Banda de Corvino.
- Added support for Mortadelo y Filemón: Balones y Patadones.
- Added support for Mortadelo y Filemón: Mamelucos a la Romana.
- Added support for Dracula: Resurrection.
- Added support for Dracula 2: The Last Sanctuary.
- Added support for Amerzone: The Explorer's Legacy.
- Added support for The Cameron Files: The Secret at Loch Ness.
- Added support for The Messenger / Louvre: The Final Curse.
[130 lines not shown]
[lldb][test] Disable another part of TestMultithreaded.py on Windows (#231114)
Due to flaky results. See
https://github.com/llvm/llvm-project/issues/231113.
Fails on Windows on Arm mostly but I don't see why it wouldn't fail on
x86_64 too.
[NVPTX] Fold predicate boolean operations into comparisons (#229769)
Select the fused setp.CmpOp.BoolOp forms for integer and floating-point
comparisons followed by predicate AND, OR, or XOR to optimise away these
separate predicate operations.
[SPIR-V] Move MIR rewrites out of SPIRVModuleAnalysis (#229736)
Analysis pass must not change the IR it analyzes
Move all modifications from there to a new separate
spirv-prepare-module-analysis pass
Discussed in https://github.com/llvm/llvm-project/pull/227376
[libc] Implement clock_getres in time (#230826)
Implement the standard POSIX.1-2008 / POSIX.1-2024 function
`clock_getres` in `<time.h>` on Linux and register it in the Linux
target entrypoints.
Fixes #230532
interfaces: clear track6-interface as a precaution #11001
If we are not in idassoc6/track6 mode some components will still
look at track6-interface so make sure to remove this at least.
interfaces.php clears the previous settings very consistently,
but that's difficult to do in MVC without adding more logic so
eventually the backend should be fixed to live with the new world
order.
[libc++] Avoid key_eq calls in hash_table rehash (#216551)
Use the cached hash to avoid calling `key_eq` which might be costly.
Per `[unord.req.general]#9`, for `unordered_multiset` and
`unordered_multimap`,
rehashing preserves the relative ordering of equivalent elements. These
elements
are contiguous and share the same key and hash.
For elements with the same hash but different keys (if any), their
relative order
is not required, but it is preserved for simplicity.
This is still not applied to unique-key containers (`unordered_set` and
`unordered_map`), where same-hash contiguous blocks are rare and the
extra
check would not be worthwhile.
[2 lines not shown]