LLVM/project 1f9bbd2 — llvm/lib/Transforms/AggressiveInstCombine AggressiveInstCombine.cpp
Fix typo
| Delta | File | |
|---|---|---|
| +1 | -1 | llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombine.cpp |
| +1 | -1 | 1 files |
Fix typo
| Delta | File | |
|---|---|---|
| +1 | -1 | llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombine.cpp |
| +1 | -1 | 1 files |
Update llvm/test/Analysis/UniformityAnalysis/AMDGPU/callbr.ll Co-authored-by: Matt Arsenault <Matthew.Arsenault at amd.com>
| Delta | File | |
|---|---|---|
| +1 | -1 | llvm/test/Analysis/UniformityAnalysis/AMDGPU/callbr.ll |
| +1 | -1 | 1 files |
[clang][AArch64] Don't round parameters to multiples of 8-byte (#215264) If parameter is explicitly rounded to 8 byte boundary, clang must emit either zext or sext instruction to convert the value to the target type. This is not really required, because contents of upper bits of extended value is not specified in AArch64 PCS.
MC: Make usesWindowsCFI a pure object-format predicate (#231087) Whether unwind information is encoded with SEH opcodes (.seh_*, .pdata and .xdata) is a property of the object format. Whether a function uses that encoding depends on the exception model, but usesWindowsCFI() conflated the two. Make it report only the format, and add MachineFunction::usesWindowsUnwindInfo() for the combined question and needsWinCFI() for the common case that also requires an unwind table entry. This moves the exception model check to the point of use, in preparation for removing ExceptionModel from TargetOptions. The assembler now accepts .seh_* directives whenever the object format supports them (i.e., MC only tools will no longer have a notion of ExceptionModel). Co-authored-by: Claude Opus <noreply at anthropic.com>
[X86] combineArithReduction - use PACKUS to truncate v4i32 -> v4i16 for PSADWB reduction (#231216) Fixes #231055
| Delta | File | |
|---|---|---|
| +118 | -0 | llvm/test/CodeGen/X86/pr231055.ll |
| +7 | -3 | llvm/lib/Target/X86/X86ISelLowering.cpp |
| +125 | -3 | 2 files |
ZTS: mark send-c_stream_size_estimate as a known failure zfs send -nP prints two summary lines to stdout. When stdout is not a pipe, a second thread copies the send stream to it with splice(). In a dry run there is nothing to copy, but splice() still sets the file offset back to where it was when the call started. This is a race in the kernel: do_splice() updates the offset without taking f_pos_lock, which read(), write() and lseek() take. In this test the race only shows on musl. musl's stdout is line-buffered until its first write, so the first line is written while splice() is still waiting, and the second line overwrites it afterwards. glibc buffers both lines and writes them once at exit, after splice() has returned. List the test as an expected failure until the kernel is fixed. The test still runs, so the entry can be removed once it passes again. Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov> Signed-off-by: Alexander Moch <mail at alexmoch.com> Closes #19348
| Delta | File | |
|---|---|---|
| +7 | -0 | tests/test-runner/bin/zts-report.py.in |
| +7 | -0 | 1 files |
u3g: Add ublox LARA-L6 modem MFC after: 3 days Approved by: adrian Reviewed by: kevans, adrian Differential Revision: https://reviews.freebsd.org/D60652
| Delta | File | |
|---|---|---|
| +6 | -0 | sys/dev/usb/serial/u3g.c |
| +6 | -0 | 1 files |
CI: Update Alpine Linux to 3.24.2 and its Limine boot
Alpine 3.24.2 no longer publishes the generic BIOS and UEFI cloud
images. The replacement is a single hybrid image that boots through
Limine, with the kernels on a ~113 MB FAT partition mounted on /boot.
Download the new image. Limine has no update-extlinux equivalent and no
hook that adds entries for newly installed kernels, so point its static
limine.conf entry at the -stable kernel, which the ZTS needs for
CONFIG_SCSI_DEBUG.
Drop the "kms" mkinitfs feature before installing linux-stable. It
pulls in GPU drivers and firmware, making the initramfs ~90 MB, which
fills the partition and fails mkinitfs. The VM is headless.
The image's limine updater configs use the old key names, which the
newer limine package pulled in by the upgrade does not understand. Its
BIOS trigger then fails after replacing limine-bios.sys, so the VM no
longer boots ("limine-bios.sys size incorrect"), and the failing EFI
[5 lines not shown]| Delta | File | |
|---|---|---|
| +10 | -9 | .github/workflows/scripts/qemu-3-deps-vm.sh |
| +9 | -2 | .github/workflows/scripts/qemu-2-start.sh |
| +19 | -11 | 2 files |
Status/2026Q3/ec2.adoc: Add report Reviewed by: salvadore Sponsored by: Amazon Differential Revision: https://reviews.freebsd.org/D60029
| Delta | File | |
|---|---|---|
| +19 | -0 | website/content/en/status/report-2026-07-2026-09/ec2.adoc |
| +19 | -0 | 1 files |
Status/2026Q3/releng.adoc: Add report Reviewed by: salvadore Sponsored by: OpenSats Initiative Differential revision: https://reviews.freebsd.org/D59753
| Delta | File | |
|---|---|---|
| +16 | -0 | website/content/en/status/report-2026-07-2026-09/releng.adoc |
| +16 | -0 | 1 files |
fixup! Add TODO comment
| Delta | File | |
|---|---|---|
| +2 | -0 | llvm/lib/Transforms/Vectorize/VectorCombine.cpp |
| +2 | -0 | 1 files |
databases/mongodb90: new port 9.0.0-alpha1 Ready enough to get added to the ports tree. Not the final 9.0.0 yet. That is not tagged on github yet. Compiles on amd64. Aarch64 is in the planning. This port is copied from mongodb80 and adjusted.
[DWARFLinker] Key str_offsets_base and unit_type on the unit root (#219398) Fix DWARFv5 output for a unit whose root is DW_TAG_partial_unit, as produced by dwz. The classic and parallel linkers rewrite strings into DW_FORM_strx but add DW_AT_str_offsets_base only to a DW_TAG_compile_unit root, so every string in a partial unit reads back empty. Both also write DW_UT_compile into every unit header, contradicting a partial unit root. Add DW_AT_str_offsets_base to the unit root whatever its tag, and emit DW_UT_partial for a DW_TAG_partial_unit root. Its header has the same layout as DW_UT_compile. The test links a partial unit with both linkers, with and without garbage collection, and checks the unit type, the attribute, the strings and --verify. The update mode runs pass --build-accelerator, because --no-garbage-collection alone copies the file without linking it. Fixes #219365. Assisted-by: Claude Code
[AggressiveInstCombine] Match ctpop table lookups
perlbench, gcc and ffmpeg all contain this pattern of ctpop table lookups:
```c
int ctpop(unsigned char x) {
static const char table[256] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8,};
return table[x];
}
```
This teaches AggressiveInstCombine to detect them and lower them to a llvm.ctpop intrinsic if the target reports ctpop is fast.
We need to also teach replaceWithPopCount to handle extending the result as the loaded result may be wider than the index used as the input.
Note that this will also match on tiny tables e.g. a load of i8 from [2 x i8] {0, 1}. This PR doesn't try to avoid them as I'm assuming a fast ctpop is faster than a load.
A good few benchmarks also do this table-based ctpop lookup but with multiple smaller sized lookups across chunks of the input. E.g. `ctpop.4bits((x & 0xf) >> 0) + ctpop.4bits((x & 0xf0) >> 4) + ctpop.4bits((x & 0xf00) >> 8) + ...`. This PR will match on the individual ctpops, but we can combine them into a single ctpop in another patch.
| Delta | File | |
|---|---|---|
| +42 | -12 | llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombine.cpp |
| +5 | -6 | llvm/test/Transforms/AggressiveInstCombine/RISCV/lower-table-based-ctpop.ll |
| +47 | -18 | 2 files |
Precommit tests
| Delta | File | |
|---|---|---|
| +82 | -0 | llvm/test/Transforms/AggressiveInstCombine/RISCV/lower-table-based-ctpop.ll |
| +82 | -0 | 1 files |
devel/gitlab-runner: update to 19.4.1 Changes: https://gitlab.com/gitlab-org/gitlab-runner/blob/main/CHANGELOG.md
| Delta | File | |
|---|---|---|
| +9 | -9 | devel/gitlab-runner/distinfo |
| +1 | -2 | devel/gitlab-runner/Makefile |
| +10 | -11 | 2 files |
pf: Change source limiter tables from a task
pf_source_used() puts a source in the table of its source limiter when
the source has more states than the high-water mark, and
pf_source_rele() takes it out again below the low-water mark. Both
changed the table in place: pf_source_used() from pf_create_state(),
with the rules lock held for reading, and pf_source_rele() from
pf_remove_state(), with no rules lock at all. A table may only be
changed with the rules lock held for writing, as packets look addresses
up in its radix tree at the same time. With INVARIANTS the first
insertion panics ("Lock pf rulesets not exclusively locked" in
pfr_route_kentry()); without, the tree can be corrupted.
Queue the changes instead, as pf_overload_task() does for overload
tables, and make them from a task with the rules lock held for writing.
An entry names the limiter by its id and remembers its table: the
limiter, or its table, may be gone or replaced by the time the task
runs, and then the entry is dropped. pfsr_intable changes only once
the change is queued, so a failed allocation is retried the next time
[9 lines not shown]| Delta | File | |
|---|---|---|
| +117 | -17 | sys/netpfil/pf/pf.c |
| +60 | -0 | tests/sys/netpfil/pf/limiters.sh |
| +177 | -17 | 2 files |
[SimplifyLibCalls] Fix ConstantInt construction based on char (#231159) char has system-dependent signedness. If it is signed, then these ConstantInt::get() uses would assert because the value is not a valid 8 bit unsigned value. Cast to unsigned char to make sure we get a valid value on all platforms. Fixes https://github.com/llvm/llvm-project/issues/228213.
| Delta | File | |
|---|---|---|
| +20 | -0 | llvm/test/Transforms/InstCombine/memchr-6.ll |
| +14 | -0 | llvm/test/Transforms/InstCombine/memrchr-4.ll |
| +4 | -3 | llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp |
| +38 | -3 | 3 files |
[flang][Semantics] Preserve ambiguous USE-error through whole-module USE (#229707)
Per F2023 14.2.2 p8, an accessed entity may be associated with two or
more distinct ultimate entities as long as its identifier is never
referenced; this is recorded internally as `UseErrorDetails`, a
poison-pill symbol that triggers an error if the name is ever used.
When a module scope contains such an ambiguous (and never referenced)
name, a whole-module `USE` of that module resolved the ambiguous entity
into an ordinary `UseDetails` pointing at the origin module's own
(unwritten) `UseErrorDetails` symbol. Since the mod-file writer omits
`UseErrorDetails` symbols from the module file it produces, the
re-exporting module's `.mod` file ended up with a `use ...,only:name`
line naming an entity the origin module's own `.mod` file does not
actually provide, so compiling a client of the re-exporting module
failed with `'name' not found in module`.
This propagates the ambiguity instead of resolving it: the local symbol
also becomes `UseErrorDetails`, so it is (like the origin symbol)
[8 lines not shown]| Delta | File | |
|---|---|---|
| +164 | -0 | flang/test/Semantics/modfile89.f90 |
| +34 | -0 | flang/test/Semantics/resolve133.f90 |
| +25 | -5 | flang/lib/Semantics/resolve-names.cpp |
| +223 | -5 | 3 files |
[clang][deps] Report module map deps based on module deps, in import order (#229611)
Before this patch, the `-fmodule-map-file`s on an explicitly-built
module's command line came solely from what that module's
implicitly-built PCM recorded as input files. Since that is an observed
trace, it can omit a direct dependency's module map. For example, if a
dependency was already registered by an earlier PCM read, a later
`@import` can short-circuit & nothing enters its module map locally as
an input file. However, that's not always guaranteed. Like when
relocation checking is enabled, the direct dep's module map can end up
being entered, resulting in mismatched invocations/hashes.
Instead, collect each direct dependency's module map, then let the trace
contribute only what that didn't cover. The collection happens in the
order of `MF.Imports`, which is stable across runs, this is important
since modulemap order is baked into the explicit module's hash. After,
collect any remaining module maps through the trace order, that is not
guaranteed to be stable ordering but is so far not observable, and
strictly less likely to occur now.
[7 lines not shown][CIR][NFC] Share getSuccessorRegions across region-branch ops Four of the ten CIR ops implementing `RegionBranchOpInterface` had identical `getSuccessorRegions` bodies. The parent may enter any of their regions, and every region exits back to the parent. This moves that body into a new TableGen base class, `CIR_EnterAnyRegionBranchOpBase`, and puts `ScopeOp`, `CaseOp`, `SwitchOp` and `TernaryOp` on it. The doc comments above the deleted `ScopeOp` and `TernaryOp` definitions go too. `IfOp`, `GlobalOp`, `AwaitOp` and `CoroutineOp` keep their own definitions because their successors differ. `IfOp` exits straight to the parent when the else region is empty, `GlobalOp` skips empty ctor and dtor regions, and `AwaitOp` and `CoroutineOp` send each region to specific successors. `CleanupScopeOp` and `TryOp` have the same successors today, but both are wrong. The cleanup region runs after the body, and a catch handler runs after the try body unwinds, so neither is an entry from the parent. They keep their own definitions so each fix can land on its own. PR #221222 fixes `CleanupScopeOp`.
| Delta | File | |
|---|---|---|
| +0 | -55 | clang/lib/CIR/Dialect/IR/CIRDialect.cpp |
| +24 | -4 | clang/include/clang/CIR/Dialect/IR/CIROps.td |
| +24 | -59 | 2 files |
[CIR] Fix cir.cleanup.scope successor regions
Follow-up to #220507, split out of the review of #220512.
`CleanupScopeOp::getSuccessorRegions` reported the body and the cleanup region
as two alternative entries from the parent, and every region exit as going back
to the parent. That lets the cleanup run without the body and leaves no edge
from the body to the cleanup. The comment right above the code said the
opposite.
This reports what the op actually executes. The parent enters the body. A body
exit that triggers the cleanup enters the cleanup region. The cleanup region
exits to the parent.
Whether a body exit triggers the cleanup depends on the terminator and the
cleanup kind. `cir.resume` leaves while unwinding, so it runs the cleanup when
the kind includes EH. `cir.yield` and `cir.co_return` are normal exits, so they
run it when the kind includes normal. `cir.resume` appears in an unflattened
body once an inner cleanup scope has been flattened, and `FlattenCFG` handles
[29 lines not shown]| Delta | File | |
|---|---|---|
| +162 | -37 | clang/unittests/CIR/ControlFlowTest.cpp |
| +21 | -5 | clang/lib/CIR/Dialect/IR/CIRDialect.cpp |
| +4 | -5 | clang/include/clang/CIR/Dialect/IR/CIROps.td |
| +187 | -47 | 3 files |
[MLIR] Support scalars in ValueBounds of linalg.index (#230962) ValueBoundsOpInterfaceImpl for linalg.index expects every operand to be ShapedType, but linalg.generic also supports scalars as operands. I've made it query the rank with linalgOp.getRank
| Delta | File | |
|---|---|---|
| +48 | -0 | mlir/test/Dialect/Linalg/value-bounds-op-interface-impl.mlir |
| +7 | -5 | mlir/lib/Dialect/Linalg/IR/ValueBoundsOpInterfaceImpl.cpp |
| +55 | -5 | 2 files |
www/gitlab: security and patch update to 19.4.2 Changes: https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-4-2-released/?nav=19.4.2 Security: 5518664d-c652-11f1-b273-2cf05da270f3
| Delta | File | |
|---|---|---|
| +13 | -13 | devel/gitaly/distinfo |
| +6 | -6 | www/gitlab/distinfo |
| +5 | -5 | www/gitlab-workhorse/distinfo |
| +5 | -5 | www/gitlab-pages/distinfo |
| +5 | -5 | net/gitlab-agent/distinfo |
| +1 | -1 | www/gitlab/Makefile.common |
| +35 | -35 | 1 files not shown |
| +36 | -36 | 7 files |
net/rubygem-gitlab-fog-azure-rm: update to 2.5.2 Changes: https://gitlab.com/gitlab-org/ruby/gems/gitlab-fog-azure-rm/-/blob/gitlab/master/CHANGELOG.md
| Delta | File | |
|---|---|---|
| +3 | -3 | net/rubygem-gitlab-fog-azure-rm/distinfo |
| +1 | -1 | net/rubygem-gitlab-fog-azure-rm/Makefile |
| +4 | -4 | 2 files |
[CIR][NFC] Use CleanupKindAttr predicates in FlattenCFG flattenCleanup still tests the cleanup kind with raw enum comparisons against Normal, EH and All. CleanupKindAttr already declares isNormal() and isEH() with exactly those meanings, and the rest of FlattenCFG, including the match method that feeds flattenCleanup, already uses them, so use the predicates here too. CleanupScopeOp::getSuccessorRegions depends on this same invariant. Stating it in one place means a later change to the kinds cannot leave the copies disagreeing.
| Delta | File | |
|---|---|---|
| +3 | -5 | clang/lib/CIR/Dialect/Transforms/FlattenCFG.cpp |
| +3 | -5 | 1 files |
[NFC][SPIR-V] Restore plain spirv-val RUN lines in debug-info tests (#231199) [KhronosGroup/SPIRV-Tools#6469](https://github.com/KhronosGroup/SPIRV-Tools/pull/6469) is fixed in https://github.com/KhronosGroup/SPIRV-Tools/pull/6946, so spirv-val now accepts a DebugExpression as the DebugGlobalVariable Variable operand Unblock failing CI on main branch
Status/2026Q3/cuse.adoc: Add report Sponsored by: The FreeBSD Foundation Reviewed by: salvadore Differential Revision: https://reviews.freebsd.org/D60410
| Delta | File | |
|---|---|---|
| +10 | -0 | website/content/en/status/report-2026-07-2026-09/cuse.adoc |
| +10 | -0 | 1 files |
Status/2026Q3/audio.adoc: Add report Sponsored by: The FreeBSD Foundation Reviewed by: salvadore Differential Revision: https://reviews.freebsd.org/D60409
| Delta | File | |
|---|---|---|
| +28 | -0 | website/content/en/status/report-2026-07-2026-09/audio.adoc |
| +28 | -0 | 1 files |
[RISCV][P-ext] Add scalar aadd(u)/asub(u) intrinsics (#230710) Assisted-by: Claude