LLVM/project 67fe3b3 — llvm/lib/Target/RISCV RISCVPassRegistry.def RISCVTargetMachine.cpp, llvm/lib/Target/RISCV/GISel RISCVPostLegalizerCombiner.cpp

[RISCV] Port PostLegalizerCombiner to NewPM

Standard NewPM pass porting.

Reviewers: wangpc-pp, mshockwave, lenary

Pull Request: https://github.com/llvm/llvm-project/pull/235951
DeltaFile
+67-26llvm/lib/Target/RISCV/GISel/RISCVPostLegalizerCombiner.cpp
+9-2llvm/lib/Target/RISCV/RISCV.h
+2-2llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
+2-0llvm/lib/Target/RISCV/RISCVPassRegistry.def
+80-304 files

LLVM/project 34bdb45 — llvm/lib/Target/RISCV RISCVCodeGenPassBuilder.cpp, llvm/test/CodeGen/RISCV O0-newpm-pipeline.ll O3-newpm-pipeline.ll

[RISCV][NewPM] Finish pipeline

This finishes the wire-up in CodeGenPassBuilder to match the current
TargetPassConfig, minus GISel.

Reviewers: lenary, topperc, wangpc-pp

Pull Request: https://github.com/llvm/llvm-project/pull/235807
DeltaFile
+105-29llvm/lib/Target/RISCV/RISCVCodeGenPassBuilder.cpp
+24-1llvm/test/CodeGen/RISCV/O3-newpm-pipeline.ll
+9-0llvm/test/CodeGen/RISCV/O0-newpm-pipeline.ll
+138-303 files

LLVM/project 78d11fc — llvm/test/tools/llubi intr_mask_beforefirst.ll, llvm/tools/llubi/lib Interpreter.cpp

[llubi] Add support for llvm.mask.beforefirst

This has the same LangRef behaviour where any poison lane makes the result poison, even after the first active lane.

Assisted-by: Opus 5.5
DeltaFile
+41-0llvm/test/tools/llubi/intr_mask_beforefirst.ll
+19-0llvm/tools/llubi/lib/Interpreter.cpp
+60-02 files

LLVM/project 63ca3a4 — llvm/utils/TableGen DecoderEmitter.cpp

[TableGen][DecoderEmitter] Stop switch case scan at first larger value (#236998)
DeltaFile
+1-1llvm/utils/TableGen/DecoderEmitter.cpp
+1-11 files

LLVM/project 692393b — llvm/lib/Target/X86 X86CodeGenPassBuilder.cpp

[X86] Move CodeGenPassBuilder callbacks into the correct order

I've been trying to put the hooks in the order they actually get called.
This patch actually makes that so.

Reviewers: arsenm, aengelke, topperc, RKSimon, aeubanks

Pull Request: https://github.com/llvm/llvm-project/pull/235626
DeltaFile
+35-35llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp
+35-351 files

LLVM/project 402ce85 — llvm/test/Transforms/LoopVectorize predicated-multiple-exits.ll

add tests
DeltaFile
+279-0llvm/test/Transforms/LoopVectorize/predicated-multiple-exits.ll
+279-01 files

LLVM/project 0c79ba3 — llvm/lib/Transforms/Vectorize VPlanPredicator.cpp, llvm/test/Transforms/LoopVectorize uniform-blend.ll select-cmp-blend-chain.ll

[VPlan] Peek through nested phi incoming values in computeBlendMasks
DeltaFile
+495-0llvm/test/Transforms/LoopVectorize/predicator.ll
+389-6llvm/test/Transforms/LoopVectorize/VPlan/predicator.ll
+80-11llvm/lib/Transforms/Vectorize/VPlanPredicator.cpp
+81-0llvm/test/Transforms/LoopVectorize/find-last.ll
+13-3llvm/test/Transforms/LoopVectorize/select-cmp-blend-chain.ll
+3-12llvm/test/Transforms/LoopVectorize/uniform-blend.ll
+1,061-326 files

LLVM/project 8c7bae6 — llvm/lib/Transforms/Vectorize LoopVectorize.cpp VPlanConstruction.cpp, llvm/test/Transforms/LoopVectorize early_exit_with_stores.ll

[VPlan] Vectorize early exit loops with side effects in the vector loop

Rename UncountableExitStyle::ReadOnly to MaskedHandleExitInVectorLoop and
use it for early exit loops with stores, when every store comes after all
the early exits. Each early exiting block branches to the latch on the
lanes from the first exiting one on, so the stores after it are masked off
for them, and values from the skipped blocks are poison on those edges.

Loops fall back to MaskedHandleExitInScalarLoop if a store is in the latch,
a store isn't properly dominated by every early exiting block, the latch's
exit condition uses a value from a block the exits can skip, or a load
might fault.
DeltaFile
+76-96llvm/test/Transforms/LoopVectorize/early_exit_with_stores.ll
+102-24llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+6-4llvm/lib/Transforms/Vectorize/VPlan.h
+3-2llvm/unittests/Transforms/Vectorize/VPlanVerifierTest.cpp
+3-1llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
+2-1llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+192-1286 files

LLVM/project aa39e98 — llvm/test/Transforms/LoopVectorize early_exit_with_stores.ll

Precommit tests
DeltaFile
+372-0llvm/test/Transforms/LoopVectorize/early_exit_with_stores.ll
+372-01 files

LLVM/project f0335c3 — llvm/lib/Transforms/Vectorize VPlanVerifier.cpp VPlanTransforms.cpp, llvm/test/Transforms/LoopVectorize predicated-single-exit.ll predicated-early-exits-interleave.ll

[VPlan] Keep early exit conditions and values in SSA

The exit conditions were MaskedConds in each exiting block, used directly
in the latch, and the exit values were extracted from the exiting blocks
in the vector early exit blocks. Neither is valid SSA when the exiting
block doesn't dominate the latch, so the verifier had to make exceptions
for MaskedCond.

Instead, carry them to the latch with reconstructSSA. An exit's condition
is false on any path that didn't go through its exiting block, which also
masks it, so it no longer needs a MaskedCond. An exit's value is poison on
those paths, since only the lanes that took the exit read it.

The lanes after the first one that exits run iterations that the scalar
loop never does, and keep going past their exits, so freeze the
conditions of the branches in the loop body so they never branch on
poison. This also keeps the phis carrying the exit conditions well
defined for those lanes.

Remove the MaskedCond exceptions from the verifier.
DeltaFile
+93-49llvm/test/Transforms/LoopVectorize/predicated-multiple-exits.ll
+24-16llvm/test/Transforms/LoopVectorize/predicated-early-exits-interleave.ll
+26-5llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+1-18llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp
+12-6llvm/test/Transforms/LoopVectorize/predicated-single-exit.ll
+156-945 files

LLVM/project 881a023 — llvm/lib/Transforms/Vectorize VPlanPredicator.cpp, llvm/test/Transforms/LoopVectorize predicator.ll

[VPlan] Skip poison incoming values computeBlendEdges

A poison value can be replaced with anything, so we don't need to create an incoming value for it when converting phis to blends.

Needed to avoid regressions in an upcoming PR to keep SSA with early exits.
DeltaFile
+2-5llvm/test/Transforms/LoopVectorize/predicator.ll
+1-1llvm/test/Transforms/LoopVectorize/VPlan/predicator.ll
+2-0llvm/lib/Transforms/Vectorize/VPlanPredicator.cpp
+5-63 files

LLVM/project db2cedd — llvm/test/Transforms/LoopVectorize predicator.ll, llvm/test/Transforms/LoopVectorize/VPlan predicator.ll

Precommit tests
DeltaFile
+83-0llvm/test/Transforms/LoopVectorize/VPlan/predicator.ll
+74-1llvm/test/Transforms/LoopVectorize/predicator.ll
+157-12 files

LLVM/project dbfbb2e — llvm/lib/Transforms/Vectorize VPlanTransforms.cpp, llvm/test/Transforms/LoopVectorize blend-i1.ll

[VPlan] Simplify BLEND X/M, false, ..., false -> M && X

If an i1 blend has false for all but one incoming value, then we can simplify this to the one non-false value. Blends by construction never have any overlapping mask values, so we don't need to worry about the order as the masks can't "shortcut" each other.
DeltaFile
+13-0llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+3-8llvm/test/Transforms/LoopVectorize/blend-i1.ll
+16-82 files

LLVM/project ae63602 — llvm/test/Transforms/LoopVectorize blend-i1.ll

Precommit tests
DeltaFile
+69-0llvm/test/Transforms/LoopVectorize/blend-i1.ll
+69-01 files

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

[RISCV][P-ext] Add isel pattern for macc.w01/macc.w11 (#237064)

`macc.w01` multiplies the sign-extended lower word of rs1 by the
sign-extended upper word of rs2 and adds the product to rd. `macc.w11`
does the same with the sign-extended upper words of both. Both are
RV64 only.

Previously, (sra X, 32) was selected as a separate srai feeding
`macc.w00`. Match it directly so the shift is folded. As with
`macc.w00`, the patterns require the multiply to have a single use.
DeltaFile
+82-2llvm/test/CodeGen/RISCV/rvp-scalar-rv64.ll
+6-0llvm/lib/Target/RISCV/RISCVInstrInfoP.td
+88-22 files

LLVM/project 0600808 — llvm/lib/Target/AMDGPU SIShrinkInstructions.cpp

Move SCC dead check to the beginning of 'if' block
DeltaFile
+3-6llvm/lib/Target/AMDGPU/SIShrinkInstructions.cpp
+3-61 files

LLVM/project 47f5164 — llvm/lib/Target/AMDGPU SIShrinkInstructions.cpp

Check for implicit defs of OR being dead at the end
DeltaFile
+3-2llvm/lib/Target/AMDGPU/SIShrinkInstructions.cpp
+3-21 files

LLVM/project 206714e — llvm/test/CodeGen/AMDGPU shrink-disjoint-or-scc.mir shrink-insts-scalar-bit-ops.mir

Merge the cases to an existing test file
DeltaFile
+0-35llvm/test/CodeGen/AMDGPU/shrink-disjoint-or-scc.mir
+35-0llvm/test/CodeGen/AMDGPU/shrink-insts-scalar-bit-ops.mir
+35-352 files

LLVM/project d9eefe9 — llvm/lib/Target/AMDGPU SIShrinkInstructions.cpp, llvm/test/CodeGen/AMDGPU s_or_b32_transformation.ll shrink-disjoint-or-scc.mir

Address review feedback:
1. Use allImplicitDefsAreDead() helper to check whether SCC is dead
2. Simplify .ll test case
3. Add a new .mir test case
DeltaFile
+35-0llvm/test/CodeGen/AMDGPU/shrink-disjoint-or-scc.mir
+6-8llvm/test/CodeGen/AMDGPU/s_or_b32_transformation.ll
+1-2llvm/lib/Target/AMDGPU/SIShrinkInstructions.cpp
+42-103 files

LLVM/project c77b934 — llvm/lib/Target/AMDGPU SIShrinkInstructions.cpp, llvm/test/CodeGen/AMDGPU s_or_b32_transformation.ll

[AMDGPU] Preserve live SCC when shrinking disjoint S_OR_B32
DeltaFile
+6-0llvm/lib/Target/AMDGPU/SIShrinkInstructions.cpp
+2-1llvm/test/CodeGen/AMDGPU/s_or_b32_transformation.ll
+8-12 files

LLVM/project 0808a14 — llvm/test/CodeGen/AMDGPU s_or_b32_transformation.ll

Precommit test case for s_or incorrectly transformed to s_addk when SCC is live
DeltaFile
+28-0llvm/test/CodeGen/AMDGPU/s_or_b32_transformation.ll
+28-01 files

LLVM/project 95425c9 — libc/test/integration/src/unistd CMakeLists.txt wait_status_test.cpp

[libc] Fix race condition in wait_status_test (#237029)

In `stopped_and_continued()`, after the parent sends `SIGCONT`, the
child can wake up and call `exit(0)` before the parent calls
`waitpid(pid, &status, WCONTINUED)`. Because `waitpid` always implies
`WEXITED`, the kernel reaps the exited zombie first and returns `0`
(`WIFEXITED`) instead of `0xffff` (`WIFCONTINUED`), making the test
flaky under load.

Block the child on a pipe after `raise(SIGSTOP)` until the parent has
observed `WIFCONTINUED(status)` and closed the write end. Also switch
the test from public `<signal.h>`/`<sys/wait.h>` headers to internal and
proxy headers.

Assisted-by: Gemini
DeltaFile
+17-4libc/test/integration/src/unistd/wait_status_test.cpp
+8-3libc/test/integration/src/unistd/CMakeLists.txt
+25-72 files

LLVM/project 7ae6d6a — clang-tools-extra/clang-tidy/bugprone VirtualNearMissCheck.cpp, clang-tools-extra/clang-tidy/performance UnnecessaryCopyInitializationCheck.cpp

[clang-tidy][NFC] Move isStatic matcher into utils::Matchers (#228546)

AI Usage: Assisted by Grok 4.6 (Cursor)

Co-authored-by: Cursor <cursoragent at cursor.com>
DeltaFile
+2-4clang-tools-extra/clang-tidy/readability/StaticAccessedThroughInstanceCheck.cpp
+0-4clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp
+2-2clang-tools-extra/clang-tidy/readability/MakeMemberFunctionConstCheck.cpp
+1-2clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitializationCheck.cpp
+0-2clang-tools-extra/clang-tidy/readability/ConvertMemberFunctionsToStaticCheck.cpp
+2-0clang-tools-extra/clang-tidy/utils/Matchers.h
+7-146 files

LLVM/project d1629bb — llvm/test/Transforms/SLPVectorizer/X86 shl-to-add-transformation5.ll

[SLP][NFC]Add  extra tests for shl to add representation, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/237110
DeltaFile
+92-0llvm/test/Transforms/SLPVectorizer/X86/shl-to-add-transformation5.ll
+92-01 files

LLVM/project 5500795 — llvm/test/CodeGen/AMDGPU memintrinsic-unroll.ll amdgcn.bitcast.832bit.ll

rebase

Created using spr 2.0.0-beta.2
DeltaFile
+88,705-91,244llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+25,383-26,405llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.512bit.ll
+9,311-9,381llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.960bit.ll
+8,998-9,209llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.896bit.ll
+8,016-8,194llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.832bit.ll
+7,335-7,432llvm/test/CodeGen/AMDGPU/memintrinsic-unroll.ll
+147,748-151,8654,021 files not shown
+427,004-338,4814,027 files

LLVM/project 24318e9 — llvm/test/CodeGen/LoongArch/lasx vselect.ll, llvm/test/CodeGen/LoongArch/lsx vselect.ll

update after rebase
DeltaFile
+23-19llvm/test/CodeGen/LoongArch/lsx/vselect.ll
+4-8llvm/test/CodeGen/LoongArch/lasx/vselect.ll
+27-272 files

LLVM/project 5747ba8 — llvm/lib/Target/AMDGPU AMDGPURegBankLegalizeRules.cpp, llvm/test/CodeGen/AMDGPU/GlobalISel regbankselect-trunc.mir

Add uniform rules for G_TRUNC s64->s16 and s128->s16
DeltaFile
+32-0llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-trunc.mir
+2-0llvm/lib/Target/AMDGPU/AMDGPURegBankLegalizeRules.cpp
+34-02 files

LLVM/project 7700e31 — clang-tools-extra/clang-tidy/bugprone VirtualNearMissCheck.cpp, clang-tools-extra/clang-tidy/modernize UseNodiscardCheck.cpp

[clang-tidy][NFC] Move isOverloadedOperator matcher into utils::Matchers (#228548)

AI Usage: Assisted by Grok 4.6 (Cursor)

Co-authored-by: Cursor <cursoragent at cursor.com>
DeltaFile
+2-4clang-tools-extra/clang-tidy/readability/ConvertMemberFunctionsToStaticCheck.cpp
+2-4clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.cpp
+2-4clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp
+4-0clang-tools-extra/clang-tidy/utils/Matchers.h
+10-124 files

LLVM/project 680a89f — llvm/lib/CodeGen/SelectionDAG InstrEmitter.cpp, llvm/test/CodeGen/AMDGPU inline-asm-clobber-partial-overlap-output.ll

SelectionDAG: Mark inline asm clobbers dead when an output covers the read (#233202)

An inline asm clobber was only marked dead if no glued CopyFromReg
read an overlapping register. A read of an output register that
overlaps a wider clobber kept the whole clobber live, even though the
output def already provides the read value. For example,
"={a1},~{a[0:15]}" left the $agpr0_..._agpr15 clobber live.

Ignore glued reads fully covered by an output def of the asm,
producing the same flags LiveVariables would later add, with a live
def of the output and a dead def of the clobber.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+36-0llvm/test/CodeGen/X86/inline-asm-default-clobbers.ll
+27-7llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp
+17-0llvm/test/CodeGen/AMDGPU/inline-asm-clobber-partial-overlap-output.ll
+80-73 files

LLVM/project d46c5b7 — llvm/lib/Target/LoongArch LoongArchISelLowering.cpp

fix typo
DeltaFile
+1-1llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
+1-11 files