[NewPM] Port ImplicitNullChecks to the new pass manager (#216965)
Adds a newPM pass for ImplicitNullChecks.
- Refactors base logic into an ImplicitNullChecks class
- Renames old pass with the "Legacy" suffix
- Adds the new pass manager pass ImplicitNullChecksPass
- Updates MachinePassRegistry.def, PassBuilder, and CodeGenPassBuilder
- Updated existing .mir tests to also test with the New Pass Manager
Assisted-by: Gemini / Next
[CIR] Handle an empty C++ class in x86_64 callconv lowering (#214742)
CIR lays a C++ empty class out as a record that is nothing but padding,
and isSupportedType rejected every padded record, so any signature
naming one failed the pass with an NYI. Ordinary C++ hits this
constantly through tag dispatch, allocators, and empty bases.
Implement empty C++ class support. Every record member now carries a
kind, so a record holds no data exactly when none of them is marked
data, which `RecordType::isEmptyForABI()` answers and the pass reads. An
empty record then maps with no fields, so the classifier drops it on its
own.
Assisted-by: Cursor / claude-opus-5
Update to 4.02
Upstream changes:
version 4.02: Fri 10 Apr 11:03:23 CEST 2026
Improvements:
- Mail::Box synopsis reorg.
- remove version of introduction indicators '[3*]' because we are
not backwards compatible with 3 anyway.
version 4.01: Sat 13 Dec 12:13:49 CET 2025
Fixes:
- optional modules -> recommends.
Improvements:
- main page texts.
version 4.00: Thu 11 Dec 14:03:32 CET 2025
Changes:
- use Mail::Box 4 exception model: use Log::Report
- remove SpamAssassin support; not used and out-dated.
version 3.012:
Changes:
[12 lines not shown]
Update to 4.05
Upstream changes:
version 4.05: Fri 10 Apr 11:00:52 CEST 2026
Fixes:
- parse X-MLServer [Edoardo Geraci]
- $msg->string must end with a newline [Andy Beverley]
- fold fields with newline [Edoardo Geraci]
Improvements:
- Mail::Message->new(message_id) replaces messageId: parameters should
not use camel-casing. Old attribute now deprecated.
- Mail::Message add clean attributes for fieldType, headType, bodyType,
and isTrusted.
- remove version of introduction indicators '[3*]', because version 4 is
not backwards compatible anyway.
version 4.04: Wed 4 Feb 15:52:45 CET 2026
Fixes:
- date field parsing regression
GitHub issue #28 [Andy Beverley]
[54 lines not shown]
[llvm-nm][GOFF] Display archive attributes in GOFF archives through --print-armap
GOFF archive symbol table entries contain an attribute word in addition
to the archive member offset. The low three bits describe whether the symbol is
64-bit, uses XPLink, or belongs to the WSA namespace (which was briefly mentioned
in e2c8fa09872cfacba7f73599dcf8557971ebe865).
This patch extends `llvm-nm --print-armap` to print the attribute value (in hex) and
its decoded description beside a symbol and its corresponding member when processing
a GOFF archive. This will functionality will be used to help validate full support for writing
GOFF archives in a subsequent llvm-ar patch.
The output for non-z/OS archives is unchanged.
[BOLT] Skip data-hole filling unless data reordering is enabled
BinaryContext::postProcessSymbolTable unconditionally called
fixBinaryDataHoles(), which walks every allocatable section and, for
each gap in its address space, either grows a zero-sized data symbol
or creates a synthetic "HOLEat" BinaryData (plus an MCSymbol and
GlobalSymbols/BinaryDataMap entries). This machinery was introduced
(0e4d86bf, 2017) for one purpose: to give static data reordering
(-reorder-data) a movable object covering every byte of a section. It
has no other consumer.
On a large binary, these synthetic objects are live from
buildFunctionsCFG through the end of the run and, at the RSS peak
(during debug info rewriting), fixBinaryDataHoles accounted for 1669
MB (2.5%) of peak RSS -- memory spent entirely for a feature that is
off by default.
Gate fixBinaryDataHoles() (and the zero-sized-symbol validation loop
that presumes it ran) on a non-empty opts::ReorderData, keeping
generateSymbolHashes() unconditional.
[BOLT] Key GlobalSymbols on MCContext-owned names to reduce memory (#214891)
BinaryContext::registerNameAtAddress registers every symbol name twice.
It first calls MCContext::getOrCreateSymbol(Name), which interns the
name in MCContext's symbol table (the MCSymbol owns the string via its
table entry). It then also stored the name in the GlobalSymbols map,
which was a StringMap<BinaryData *>. StringMap owns its keys, so each
global name was duplicated: one copy in MCContext and a second copy in
GlobalSymbols. Both grow with the number of symbols and, for large
binaries with long mangled names, this duplication is a meaningful
source of memory use during file object discovery.
This change makes MCContext the single owner of these name strings and
have GlobalSymbols merely reference them. GlobalSymbols becomes a
DenseMap<StringRef, BinaryData *> keyed on the MCContext-owned name
(MCSymbol::getName() of the symbol just created/looked up). No string is
copied into the map: each entry is a fixed-size (StringRef, pointer)
pair regardless of name length. Lookups (getBinaryDataByName, count) are
unchanged because DenseMap<StringRef> hashes and compares by content,
[7 lines not shown]
Update sysutils/intel-microcode-netbsd to 20260812
# Release Notes
## microcode-20260812]
### Purpose
- Removed MTL/06-aa-04/c0 due to functional issues observed when loading the MCU in some platforms.
# Release Notes
## microcode-20260811]
### Purpose
- Security updates for INTEL-SA-01379
- Security updates for INTEL-SA-01404
- Security updates for INTEL-SA-01423
- Security updates for INTEL-SA-01428
- Security updates for INTEL-SA-01435
[53 lines not shown]
Update to 2.20260216
Upstream changes:
2.20260216 2026-02-16 14:47:11+11:00 Australia/Melbourne
- Added some helper methods which can be used to add
commonly used children to an object.
* $object->add_entry($key, $value);
* $object->add_sub_entry($key, $value);
* $object->add_comment($value);
each returns the new object being added which can then be
manipulated/added to as required.
[AMDGPU] Correct DS FIFO buffer size semantics
There was some ambiguity in how buffersize 0 and 1 are handled. The
correct semantics are:
- `BufferSize == 0`: unlimited, no FIFO stall
- `BufferSize == 1`: unbuffered, only one instruction in flight
- `BufferSize > 1`: buffered FIFO
[BOLT] Page out .dwo files (#214903)
Split-DWARF inputs at big binaries scale ship 100+ GiB of .dwo files.
BOLT opened a fair number of them during readDebugInfo, putting a lot of
pressure on the OS memory management: mmap'd reads always populate the
page cache; with every .dwo mapped at once those pages accumulated,
refaulted, and registered as memory pressure that got the process
oomd-killed.
Now, .dwo page-cache pages are reclaimed as soon as BOLT is done with
each file: madvise(MADV_PAGEOUT) on the live mapping, then
posix_fadvise(POSIX_FADV_DONTNEED) once it is unmapped. Controlled by
-drop-dwo-page-cache, OFF by default, as it is unlikely upstream will be
processing gigantic sets of dwo files.
Merge tag 'x86_mm_for_7.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 mm updates from Dave Hansen:
"There are two things in here of note. First, there are fixes to reduce
the time that the TLB flushing code sits around with interrupts
disabled. It should be well tested, but it's certainly something to
keep an eye on.
Second is a little back-and-forth in the interactions between the
set_memory*() locking and DEBUG_PAGEALLOC. There was a slightly
painful re-discovery of why DEBUG_PAGEALLOC has special locking rules,
but the code did end up better for it.
Summary:
- Fix pkey_alloc() return value when pkeys are not supported
- Allow preemption during IPI completion waiting to improve wakeup
latency
[27 lines not shown]
Merge tag 'x86_tdx_for_7.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 TDX updates from Dave Hansen:
"TDX guests cause #VE exceptions whenever they do port I/O. The guest
then does some instruction decoding and makes a call up to the host
for help. That decoding had a couple of bugs.
Fix those bugs. Use an existing and now shared KVM helper for one of
them"
* tag 'x86_tdx_for_7.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/tdx: Fix zero-extension for 32-bit port I/O
x86/insn-eval: Move assign_register() out of KVM as insn_assign_reg()
x86/tdx: Fix off-by-one in port I/O handling
[BOLT] Create and release .dwo DWARF contexts incrementally (#214900)
BOLT opened a DWARFContext for every .dwo during
readDebugInfo and kept them all alive until teardown. On large
split-DWARF targets that is tens of GiB held resident through emission,
the point of peak RSS.
Make the DWOCUs map a lazily-populated cache instead:
* Use the newly added DWARFUnit::clearDWO()/hasDWO() to directly manage
DWARFUnit's DIE caching mechanism.
* BinaryContext::getDWOCU() opens a context on demand (keyed off a
stable DWOId -> skeleton CU map).
* Release contexts as soon as they are done with: all of them at the end
of readDebugInfo, and per-bucket at the DWARF rewrite merge point.
* Remove DWOCUs map, which became redundant and whose purpose can now be
served by the new id-to-skeleton map, and then fetching the split CU
from the skeleton via getNonSkeletonUnitDIE().
[3 lines not shown]