LLVM/project 3239f0b — offload/plugins-nextgen/common/src/Utils ELF.cpp

[Offload][AMDGPU] Remove AMDGPU check from checkMachine (#236974)

This check, among others, must be updated whenever a new processor is
added. Since processor compatibility is already checked later by the
AMDGPU plugin, and this is only an early sanity check, removing it
leaves one less place that can be missed when adding new GPUs.
DeltaFile
+1-2offload/plugins-nextgen/common/src/Utils/ELF.cpp
+1-21 files

LLVM/project 1b886f3 — llvm/test/CodeGen/AMDGPU schedule-unified-vgpr-critical-pressure.mir schedule-unified-vgpr-pressure-check.mir

[AMDGPU] Fix VGPR and AGPR critical pressure accounting (#234358)

* Use combined VGPR/AGPR pressure for critical-pressure scoring and
scheduling checks on targets with unified allocation.
* Preserve the full occupancy budget before clamping per-bank limits,
and apply VGPR alignment only when AGPRs are live.
* Keep per-bank excess checks to account for spills, and save and
restore the combined critical-pressure limit during rescheduling.

Related issue: #219377
DeltaFile
+373-376llvm/test/CodeGen/AMDGPU/llvm.amdgcn.iglp.opt.ll
+256-254llvm/test/CodeGen/AMDGPU/llvm.amdgcn.sched.group.barrier.ll
+74-74llvm/test/CodeGen/AMDGPU/ds_permute_a_v.ll
+60-63llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr.ll
+109-0llvm/test/CodeGen/AMDGPU/schedule-unified-vgpr-pressure-check.mir
+78-0llvm/test/CodeGen/AMDGPU/schedule-unified-vgpr-critical-pressure.mir
+950-7676 files not shown
+1,011-79112 files

LLVM/project 081ef8a — llvm/lib/Target/AArch64 AArch64Options.td AArch64MachineFunctionInfo.cpp

Move flag to AArch64Options.td
DeltaFile
+3-6llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.cpp
+3-0llvm/lib/Target/AArch64/AArch64Options.td
+6-62 files

LLVM/project b071713 — llvm/lib/Target/AArch64 AArch64TargetTransformInfo.cpp, llvm/test/Transforms/LoopUnroll/AArch64 apple-unrolling-scalar-epilogue.ll

[AArch64][TTI] Fix Apple runtime unroller to handle scalar epilogues (#235877)

Previously this unroller skipped loops marked as "vectorized" trusting
that LoopVectorizer did its job well. However, LoopVectorizer marks
all of the sub-loops (vector, vector epilogue and scalar epilogue) this
way even if it introduces a runtime check. In that case, scalar epilogue
might be required for the whole execution and we still don't consider
it for runtime unrolling.

Instead, we use "llvm.loop.unroll.runtime.disable" that LoopVectorizer
also puts on all of the sub-loops with one important exception: scalar
epilogues when we introduce a runtime check. That makes this attribute
a better alternative to base our decision on.
DeltaFile
+275-0llvm/test/Transforms/LoopUnroll/AArch64/apple-unrolling-scalar-epilogue.ll
+1-1llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+276-12 files

LLVM/project 6152f99 — llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer extract-copyable-multiple-gathers.ll

[SLP]Keep extractelement used by other gather nodes

Copyable lanes may put the same extractelement into several gathers.

Assisted-by: Cursor

Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/237294
DeltaFile
+93-0llvm/test/Transforms/SLPVectorizer/extract-copyable-multiple-gathers.ll
+5-0llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+98-02 files

LLVM/project e7e4de5 — llvm/lib/Target/AArch64 AArch64InstrInfo.cpp, llvm/test/CodeGen/AArch64 peephole-opt-analyzeCompare-subreg-use.mir

AArch64: Respect subregister operands in some peephole opts (#237091)

Get the correct operand constraint class accounting for any
subregister indexes on the operands. This previously would use the
direct register class from the virtual register, not accounting for
the subregister indexes in the operands. Also remove pointless
attempts to treat inability to constrain as a recoverable condition
since all the uses asserted anyway.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+10-33llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+32-0llvm/test/CodeGen/AArch64/peephole-opt-analyzeCompare-subreg-use.mir
+42-332 files

LLVM/project efd7dc3 — llvm/lib/Transforms/Scalar GVN.cpp, llvm/test/Transforms/GVN invariant.group.ll metadata.ll

[GVN] Forward a load through a byte load to keep `poison` and provenance
DeltaFile
+144-169llvm/test/Transforms/GVN/load-poison.ll
+125-1llvm/lib/Transforms/Scalar/GVN.cpp
+26-27llvm/test/Transforms/GVN/PRE/rle.ll
+7-7llvm/test/Transforms/GVN/rle-coerced-noalias.ll
+6-4llvm/test/Transforms/GVN/metadata.ll
+5-3llvm/test/Transforms/GVN/invariant.group.ll
+313-2111 files not shown
+316-2137 files

LLVM/project 5ca9323 — llvm/test/Transforms/GVN load-poison.ll

[GVN] Pre-commit tests for `poison` and provenance when forwarding a load
DeltaFile
+688-0llvm/test/Transforms/GVN/load-poison.ll
+688-01 files

LLVM/project 6cab749 — llvm/lib/Transforms/Utils VNCoercion.cpp, llvm/test/Transforms/GVN pr14166.ll ptr-vector-coercion.ll

[GVN] Keep `poison` per lane when forwarding vectors
DeltaFile
+48-63llvm/test/Transforms/GVN/pr63059.ll
+31-50llvm/test/Transforms/GVN/vector-poison.ll
+11-1llvm/lib/Transforms/Utils/VNCoercion.cpp
+2-4llvm/test/Transforms/GVN/ptr-vector-coercion.ll
+0-1llvm/test/Transforms/GVN/pr14166.ll
+92-1195 files

LLVM/project e388885 — llvm/test/Transforms/GVN vector-poison.ll

[GVN] Pre-commit tests for per-lane `poison` in forwarded vectors
DeltaFile
+244-0llvm/test/Transforms/GVN/vector-poison.ll
+244-01 files

LLVM/project 8265a00 — llvm/lib/Transforms/InstCombine InstructionCombining.cpp InstCombineCasts.cpp, llvm/test/Transforms/InstCombine bitextract-of-vector.ll

[InstCombine] Fold `bitextract` of a vector to `extractelement` or `shufflevector`
DeltaFile
+187-99llvm/test/Transforms/InstCombine/bitextract-of-vector.ll
+56-0llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
+53-0llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+296-993 files

LLVM/project 31dd1b5 — llvm/test/Transforms/InstCombine bitextract-of-vector.ll

[InstCombine] Pre-commit tests for `bitextract` of a vector
DeltaFile
+400-0llvm/test/Transforms/InstCombine/bitextract-of-vector.ll
+400-01 files

LLVM/project b12f404 — llvm/lib/Target/RISCV RISCVInstrInfoP.td, llvm/test/CodeGen/RISCV rvp-scalar-rv64.ll

[RISCV][P-ext] Add isel pattern for mulsu.w11/maccsu.w11 (#237135)

On RV64, a signed*unsigned multiply of the upper 32-bit halves of two
GPRs is written in the DAG as

`(mul (sra rs1, 32), (srl rs2, 32))`

Without a dedicated pattern this lowered to srai + srli + mul (or
maccsu.w00 when the product fed an add). Add patterns that select
mulsu.w11 for the multiply and maccsu.w11 for the accumulate form
(add rd, (mul_oneuse ...)). They match the existing mul.w11/macc.w11
DeltaFile
+72-2llvm/test/CodeGen/RISCV/rvp-scalar-rv64.ll
+5-0llvm/lib/Target/RISCV/RISCVInstrInfoP.td
+77-22 files

LLVM/project ecb242c — llvm/lib/CodeGen/GlobalISel LegalizerHelper.cpp, llvm/test/CodeGen/AArch64/GlobalISel legalize-rotr-rotl.mir

[GlobalISel] Don't set disjoint flag in lowerRotate unless the rotate amount is non-zero modulo the bitwidth. (#236993)

If the bit width is a power of 2 and the shift amount is zero modulo the
bitwidth, the left and right shift produce the same value so the Or is
not disjoint.

For the non-power of 2 lowering, we make sure to produce 0 in one of the
shifts when the rotate amount is zero modulo the bit width. This keeps
the Or disjoint.

We can't allow any element of the shift amount to be undef because the
disjoint flag produces poison which is stronger than undef.

Fixes #236025.

Assisted-by: Claude
DeltaFile
+100-2llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-rotate-rv64.mir
+98-2llvm/test/CodeGen/AArch64/GlobalISel/legalize-rotr-rotl.mir
+16-1llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+6-6llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-rotl-rotr.mir
+2-2llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-rotate-rv32.mir
+222-135 files

LLVM/project ea3919f — mlir/cmake/modules MLIRDetectPythonEnv.cmake, mlir/examples/standalone pyproject.toml

Revert "[MLIR][Python] Drop Python 3.10 and enable Python 3.15" (#237284)

Reverts llvm/llvm-project#232181 due to failed builders.
DeltaFile
+2-10mlir/cmake/modules/MLIRDetectPythonEnv.cmake
+4-7mlir/examples/standalone/pyproject.toml
+3-6mlir/python/requirements.txt
+9-233 files

LLVM/project 1906038 — llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer/AArch64 splat-gather-undef-lane.ll

[SLP]Freeze possibly poisonous splat value replacing undef lanes

Undef cannot be refined to poison.

Assisted-by: Cursor

Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/237291
DeltaFile
+9-0llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+2-1llvm/test/Transforms/SLPVectorizer/AArch64/splat-gather-undef-lane.ll
+11-12 files

LLVM/project 5dc1944 — llvm/test/CodeGen/AMDGPU fptosi-sat-vector.ll amdgcn.bitcast.320bit.ll

[AMDGPU] Materialize WMMA SGPR scales to VGPRs before scheduling

v_wmma_scale scale operands accept an SGPR or a VGPR. On GFX12,
depctr_va_ssrc is a 1-deep counter, so each VALU instruction that reads
an SGPR scale takes the only scalar-source slot. A run of WMMA ops that
all read SGPR scales therefore serializes. One cross-bank copy pays for
that slot once; later WMMA ops then read a VGPR and no longer contend
for va_ssrc.

SIMaterializeWMMAScale runs at the end of the machine SSA optimizations,
after SIShrinkInstructions and before scheduling. It is skipped at -O0
and on targets older than GFX12. GFX1250 is included: the separate VALU
read-after-write hazard no longer applies there, but the dependency
counter still does.

The pass walks every WMMA that has scale_src0 and records virtual SGPR
uses of scale_src0 and scale_src1, grouped by register. Physical
registers and subregister uses are left alone. For each SGPR it inserts
a COPY into a low aligned VGPR (the lo256 class matching the scale's

    [22 lines not shown]
DeltaFile
+4,080-3,822llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+1,107-945llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.512bit.ll
+847-631llvm/test/CodeGen/AMDGPU/calling-conventions.ll
+567-468llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.256bit.ll
+404-376llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.320bit.ll
+231-187llvm/test/CodeGen/AMDGPU/fptosi-sat-vector.ll
+7,236-6,42932 files not shown
+8,678-7,15638 files

LLVM/project 5b2cf59 — lldb/test/API/tools/lldb-server TestGdbRemoteThreadsInStopReply.py

[lldb][test] Don't expect an exact thread count in a Windows stop reply (#237038)

On Windows the process can have thread pool threads besides the 5
threads the test creates, so this test was marked as an expected failure
on Windows. When no extra thread exists at the stop, the test passes and
the run fails as an unexpected pass: 102 out of 2000 runs on a loaded
machine.

This patch checks for at least 5 threads on Windows and keeps the exact
count elsewhere.

With this patch, 2000 out of 2000 runs pass.
DeltaFile
+5-2lldb/test/API/tools/lldb-server/TestGdbRemoteThreadsInStopReply.py
+5-21 files

LLVM/project 11e72b3 — lldb/test/API/functionalities/load_after_attach main.cpp

[lldb][test] Wait longer for the debugger in TestLoadAfterAttach (#237037)

The timeout is too low and causes flakes in CI.
DeltaFile
+1-1lldb/test/API/functionalities/load_after_attach/main.cpp
+1-11 files

LLVM/project 814524c — lldb/include/lldb/Host/common NativeProcessProtocol.h, lldb/source/Plugins/Process/Windows/Common DebuggerThread.h IDebugDelegate.h

[lldb][Windows] Report all queued exceptions in one lldb-server stop (#227353)

Related:
- https://github.com/llvm/llvm-project/pull/228440
- https://github.com/llvm/llvm-project/pull/231488
- https://github.com/llvm/llvm-project/pull/231489
- https://github.com/llvm/llvm-project/pull/231491
- https://github.com/llvm/llvm-project/pull/231501
- https://github.com/llvm/llvm-project/pull/231502

Windows delivers only one debug event per process at a time. If 2
threads hit the same breakpoint, the second thread's event only arrives
after the first is continued.

lldb-server reports the first stop from the exception handler and
returns `MaskException`. `DebuggerThread` then continues the event right
away, while the client is still looking at the stop:

1. Threads A and B both trap at X. The stop reply gives A a breakpoint

    [18 lines not shown]
DeltaFile
+39-3lldb/source/Plugins/Process/Windows/Common/DebuggerThread.cpp
+32-6lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.cpp
+18-0lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.h
+7-0lldb/source/Plugins/Process/Windows/Common/IDebugDelegate.h
+4-1lldb/include/lldb/Host/common/NativeProcessProtocol.h
+4-0lldb/source/Plugins/Process/Windows/Common/DebuggerThread.h
+104-106 files

LLVM/project 7599c94 — mlir/cmake/modules MLIRDetectPythonEnv.cmake, mlir/examples/standalone pyproject.toml

Revert "[MLIR][Python] Drop Python 3.10 and enable Python 3.15 (#232181)"

This reverts commit 80d21b345a2bd9be4716e8a62b83cf93d594f727.
DeltaFile
+2-10mlir/cmake/modules/MLIRDetectPythonEnv.cmake
+4-7mlir/examples/standalone/pyproject.toml
+3-6mlir/python/requirements.txt
+9-233 files

LLVM/project 6ec5f00 — llvm/lib/CAS OnDiskCommon.h OnDiskCommon.cpp, llvm/unittests/CAS CMakeLists.txt OnDiskCommonUtils.h

[llvm][cas] Fix indefinite wait for CAS shared locks (#236929)

On Darwin, flock may only wake a single waiting shared lock request
after an exclusive lock is released. If that first waiter happens to be
a long-running CAS client, it may indefinitely delay other waiting
shared accesses that are already queued up. Workaround this with a retry
loop so that all shared CAS clients will run concurrently.

Assisted-by: claude (helped with writing the test)

rdar://191274568
DeltaFile
+102-0llvm/unittests/CAS/FileLockTest.cpp
+18-0llvm/lib/CAS/OnDiskCommon.cpp
+3-2llvm/lib/CAS/OnDiskCommon.h
+2-0llvm/unittests/CAS/OnDiskCommonUtils.h
+1-0llvm/unittests/CAS/CMakeLists.txt
+126-25 files

LLVM/project 3d628ae — llvm/include/llvm/Target/GlobalISel Combine.td, llvm/test/CodeGen/AArch64/GlobalISel combine-max-min.mir combine-max-min.ll

[Gisel] smin/umin optimization rewrites (#203939)

This is a twin PR of #188267, adding the same SDAG
[combines](https://github.com/llvm/llvm-project/blob/20aff2085c358d3e112b245494161ddb9ffe0410/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp#L4272)
for umin/smin.
DeltaFile
+171-0llvm/test/CodeGen/AArch64/GlobalISel/combine-max-min.ll
+157-1llvm/test/CodeGen/AArch64/GlobalISel/combine-max-min.mir
+25-1llvm/include/llvm/Target/GlobalISel/Combine.td
+353-23 files

LLVM/project 0bb6191 — llvm/test/Transforms/SLPVectorizer/AArch64 splat-gather-undef-lane.ll

[SLP][NFC]Add a test with incorrect undef-to-poison vectorization, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/237279
DeltaFile
+43-0llvm/test/Transforms/SLPVectorizer/AArch64/splat-gather-undef-lane.ll
+43-01 files

LLVM/project 9cab2a5 — mlir/lib/Conversion/ArithToEmitC ArithToEmitC.cpp, mlir/test/Conversion/ArithToEmitC arith-to-emitc.mlir

address comments
DeltaFile
+12-11mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir
+7-9mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp
+0-11mlir/test/Dialect/Arith/canonicalize.mlir
+0-11mlir/test/Conversion/ArithToLLVM/arith-to-llvm.mlir
+3-1mlir/test/Transforms/loop-invariant-code-motion.mlir
+22-435 files

LLVM/project 281e2c2 — llvm/test/CodeGen/X86 kshift.ll

[X86] Add test coverage for #235657 (#237256)
DeltaFile
+30-0llvm/test/CodeGen/X86/kshift.ll
+30-01 files

LLVM/project 268bd22 — llvm/lib/CodeGen/SelectionDAG LegalizeDAG.cpp, llvm/lib/Target/LoongArch LoongArchFloat32InstrInfo.td LoongArchISelLowering.h

SelectionDAG: Build FP immediates from integer bits in the legalizer (#233767)

Teach the generic legalizer to legalize FP immediates as a bitcast of
an opaque integer constant. Migrate LoongArch to use the new helper
instead of doing it in custom lowering.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+33-34llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
+25-15llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+5-0llvm/lib/Target/LoongArch/LoongArchISelLowering.h
+2-2llvm/lib/Target/LoongArch/LoongArchFloat32InstrInfo.td
+65-514 files

LLVM/project 7d4e965 — llvm/lib/MC MCObjectFileInfo.cpp, llvm/test/CodeGen/SystemZ zos-dwarf-ada-crash.ll

[SystemZ][z/OS] Add missing ADA reference to DWARF sections

Labels marked as DATA needs a reference to the ADA. However, this
is missing for the DWARF sections, which can lead to crashes in
certain scenarios. Fix is to set the ADA reference.

Assisted by: IBM Bob
DeltaFile
+39-0llvm/test/CodeGen/SystemZ/zos-dwarf-ada-crash.ll
+1-0llvm/lib/MC/MCObjectFileInfo.cpp
+40-02 files

LLVM/project 5965fb3 — clang/include/clang/Sema Sema.h, clang/lib/Parse ParseCXXInlineMethods.cpp

[clang][ThreadSafety] Instantiate a parameter's attribute naming a later parameter (#232784)

Under -fexperimental-late-parse-attributes, an attribute on a parameter
may name a parameter declared after it:

  template <class T> void f(void (*release)(T) RELEASE(mu), Mutex *mu);

A parameter's attributes were instantiated as the parameter was, before
any later one, so instantiating this asserted in
LocalInstantiationScope::findInstantiationOf, and the late parsing
change rejected it in a template. Defer a parameter's late-parsed
attributes, with the mechanism a class uses for its members, until every
parameter of the prototype is instantiated in
TransformFunctionTypeParams. A function whose type needs no substitution
instantiated its parameters one by one instead; route it through
SubstParmTypes, so there is one place that defers. SubstParmTypes now
takes whether to evaluate constraints, which SubstFunctionType passes in
both of its calls, so a typedef'd function type also follows the
instantiator's setting instead of always evaluating them. With that,

    [3 lines not shown]
DeltaFile
+73-30clang/lib/Sema/SemaTemplateInstantiate.cpp
+65-35clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+49-0clang/test/SemaCXX/warn-thread-safety-late-parsing-instantiation.cpp
+33-14clang/include/clang/Sema/Sema.h
+15-17clang/test/SemaCXX/warn-thread-safety-late-parsing.cpp
+6-13clang/lib/Parse/ParseCXXInlineMethods.cpp
+241-1093 files not shown
+244-1139 files

LLVM/project 232e021 — llvm/test/CodeGen/ARM regcoalesce-undef-copy-subreg-redef.mir prera-ldst-insertpt.mir, llvm/test/CodeGen/Thumb opt-phis.mir

ARM: Remove kill flags on virtual registers from MIR tests (#236921)

The verifier will soon disallow these. Delete tests which only differ
from another in the kill flags.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+54-54llvm/test/CodeGen/ARM/no-register-coalescing-in-returnsTwice.mir
+29-67llvm/test/CodeGen/Thumb2/mve-vpt-optimisations.mir
+0-39llvm/test/CodeGen/Thumb/opt-phis.mir
+14-14llvm/test/CodeGen/Thumb2/phi_prevent_copy.mir
+14-14llvm/test/CodeGen/ARM/regcoalesce-undef-copy-subreg-redef.mir
+14-14llvm/test/CodeGen/ARM/prera-ldst-insertpt.mir
+125-20228 files not shown
+224-30134 files