LLVM/project ec27629clang/include/clang/CIR/Dialect/IR CIROps.td, clang/lib/CIR/CodeGen CIRGenFunction.cpp

[CIR] Defer indirect goto resolution to GotoSolver (#206176)

A computed `goto *p` placed inside a nested scope -- an if or a loop
body --
made CIRGen produce invalid IR that the region verifier rejected with
"reference to block defined in another region", aborting the compile.
Regular
`goto` avoids this because CIRGen emits a symbolic
`cir.goto` that references no block and is later resolved into a
`cir.br` by
GotoSolver, which runs after FlattenCFG has merged the nested scopes
into one
region. Indirect goto skipped that indirection: `emitIndirectGotoStmt`
built
a real indirect-branch block during CIRGen and branched to it from
inside the
nested region, and `finishIndirectBranch` wired the `cir.indirect_br`
successors at the end of the function -- both while the scopes were
still

    [29 lines not shown]
DeltaFile
+110-0clang/test/CIR/CodeGen/goto-indirect-nested.c
+68-21clang/lib/CIR/Dialect/Transforms/GotoSolver.cpp
+16-36clang/test/CIR/CodeGen/label-values.c
+0-46clang/lib/CIR/CodeGen/CIRGenFunction.cpp
+29-0clang/include/clang/CIR/Dialect/IR/CIROps.td
+28-0clang/test/CIR/Transforms/goto_solver.cir
+251-1039 files not shown
+306-17915 files

LLVM/project 39aca64llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer VecUtils.h, llvm/lib/Transforms/Vectorize/SandboxVectorizer VecUtils.cpp

Pass Claimed by ref to getNextUserBundles

A user should not be claimed by multiple successful
bundles. Added a test for this.
DeltaFile
+60-7llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+3-3llvm/lib/Transforms/Vectorize/SandboxVectorizer/VecUtils.cpp
+3-1llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/BottomUpVec.cpp
+2-1llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/VecUtils.h
+68-124 files

LLVM/project 30f0db6llvm/test/Transforms/SandboxVectorizer topdown_vec.ll

Add 3-way test to check for consecutive matching
DeltaFile
+45-0llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+45-01 files

LLVM/project 1b7b2e7llvm/test/Transforms/SandboxVectorizer topdown_vec.ll

Remove stores
DeltaFile
+34-207llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+34-2071 files

LLVM/project ce54474llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Passes BottomUpVec.h, llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes BottomUpVec.cpp

[SBVec] Refactor BottomUpVec pass for clarity and maintainability

- Corrected comments to clarify the direction of def-use and use-def chains.
- Changed the initialization of the SchedDirection variable to improve clarity.
- Updated documentation in vectorizeRec() to better describe the purpose of UserBndl.
- Removed outdated TODO comment regarding top-down vectorization scheduling.
DeltaFile
+5-4llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Passes/BottomUpVec.h
+1-6llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/BottomUpVec.cpp
+6-102 files

LLVM/project 345444allvm/lib/Transforms/Vectorize/SandboxVectorizer VecUtils.cpp, llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes BottomUpVec.cpp

[SBVec] Add top-down vectorization to the unified Sandbox Vectorizer

Extend the Sandbox Vectorizer's `bottom-up-vec` pass so a single
implementation can vectorize in either direction, and add the top-down
strategy that walks def-use chains forward from a seed.

Direction selection
--------------------
The pass direction is chosen from the Region's auxiliary pass argument:
"bottom-up" (or empty, the default) and "top-down" map onto a
SchedDirection, and any other value is rejected with a fatal usage error.
The vectorizer always runs in the same direction as the scheduler.

Top-down traversal
------------------
Bottom-up starts from a seed slice (e.g. stores to consecutive addresses)
and recurses into operands. Top-down instead starts from a seed of
consecutive loads and recurses into *users*:


    [32 lines not shown]
DeltaFile
+441-0llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+229-0llvm/unittests/Transforms/Vectorize/SandboxVectorizer/VecUtilsTest.cpp
+90-27llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/BottomUpVec.cpp
+79-0llvm/lib/Transforms/Vectorize/SandboxVectorizer/VecUtils.cpp
+68-9llvm/test/Transforms/SandboxVectorizer/pack.ll
+68-0llvm/test/Transforms/SandboxVectorizer/external_uses.ll
+975-362 files not shown
+1,017-488 files

LLVM/project c02362fllvm/lib/Transforms/Vectorize/SandboxVectorizer VecUtils.cpp, llvm/test/Transforms/SandboxVectorizer topdown_vec.ll

[SBVec] Track claimed users across bundles
DeltaFile
+38-13llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+13-3llvm/lib/Transforms/Vectorize/SandboxVectorizer/VecUtils.cpp
+51-162 files

LLVM/project 5b9e622llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes BottomUpVec.cpp, llvm/test/Transforms/SandboxVectorizer topdown_vec.ll

3 element tests

- nits
DeltaFile
+130-5llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+0-4llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/BottomUpVec.cpp
+130-92 files

LLVM/project e6c5169llvm/lib/Transforms/Vectorize/SandboxVectorizer DependencyGraph.cpp, llvm/unittests/Transforms/Vectorize/SandboxVectorizer DependencyGraphTest.cpp

[SandboxIR] Fix notifyEraseInstr to skip scheduled neighbors

Guard both loops with !PredN->scheduled() / !SuccN->scheduled() so
scheduled neighbors are left untouched, and add a unit test that erases
a node with one scheduled and one unscheduled predecessor to cover the
fix.
DeltaFile
+43-0llvm/unittests/Transforms/Vectorize/SandboxVectorizer/DependencyGraphTest.cpp
+4-2llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp
+47-22 files

LLVM/project e10b58fllvm/lib/Target/AMDGPU VOP3PInstructions.td AMDGPUTargetTransformInfo.cpp, llvm/lib/Target/AMDGPU/Utils AMDGPUBaseInfo.cpp

[AMDGPU] Duplicate packed fp32 instructions

These have different semantics on gfx9 and gfx12 with respect to
scalar operands.
DeltaFile
+21-9llvm/lib/Target/AMDGPU/SIInstructions.td
+9-9llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+7-7llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
+9-4llvm/lib/Target/AMDGPU/VOP3PInstructions.td
+6-6llvm/test/CodeGen/AMDGPU/bug-pk-f32-imm-fold.mir
+5-5llvm/test/CodeGen/AMDGPU/coexec-sched-effective-stall.mir
+57-409 files not shown
+85-5415 files

LLVM/project a14ac6fllvm/lib/Transforms/Vectorize/SandboxVectorizer DependencyGraph.cpp, llvm/unittests/Transforms/Vectorize/SandboxVectorizer DependencyGraphTest.cpp

[SandboxIR] Fix notifyEraseInstr to skip scheduled neighbors

Guard both loops with !PredN->scheduled() / !SuccN->scheduled() so
scheduled neighbors are left untouched, and add a unit test that erases
a node with one scheduled and one unscheduled predecessor to cover the
fix.
DeltaFile
+43-0llvm/unittests/Transforms/Vectorize/SandboxVectorizer/DependencyGraphTest.cpp
+4-2llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp
+47-22 files

LLVM/project 8e564ecllvm/include/llvm/Frontend/HLSL SemanticSignatures.h, llvm/include/llvm/Support DXILABI.h

[HLSL] Add in-memory representation of Semantic Signatures (#209907)

Defines the `SemanticSignatureElement` struct in
`llvm/Frontend/HLSL/SemanticSignatures` to represent a semantic
signature in-memory for use during packing and metadata
construction/parsing.

Adds unit testing of the conversion.

Resolves: https://github.com/llvm/llvm-project/issues/204878

Assisted by: Claude Opus 4.8
DeltaFile
+495-0llvm/unittests/Frontend/HLSLSemanticSignatureMetadataTest.cpp
+202-0llvm/lib/Frontend/HLSL/SemanticSignatures.cpp
+98-0llvm/include/llvm/Frontend/HLSL/SemanticSignatures.h
+1-0llvm/unittests/Frontend/CMakeLists.txt
+1-0llvm/lib/Frontend/HLSL/CMakeLists.txt
+1-0llvm/include/llvm/Support/DXILABI.h
+798-06 files

LLVM/project b76b177llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/lib/Transforms/Vectorize/SLPVectorizer SLPUtils.cpp SLPUtils.h

[SLP] Gather operands of associative binary chains into one node

Flatten associative single-use chains like ((a+b)+c)+d into one N-ary
tree node instead of nested 2-operand entries, so vectorizable operand
groupings (consecutive loads, broadcasts) spanning the whole chain
aren't hidden by the nesting. The flattened layout is kept only when it
scores better than the natural 2-operand shape. Codegen combines the
columns pairwise, reusing a scalar's IR flags where a combine step
reproduces it exactly and dropping nsw/nuw/nnan/ninf otherwise, since
regrouping can change what may overflow or produce NaN/Inf. Controlled
by the hidden -slp-reassociate-ops flag (default on).

Reviewers: bababuck, RKSimon, hiraditya

Pull Request: https://github.com/llvm/llvm-project/pull/208514
DeltaFile
+598-20llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+32-60llvm/test/Transforms/SLPVectorizer/X86/reassociate-ops.ll
+16-16llvm/test/Transforms/SLPVectorizer/X86/bv-shuffle-mask.ll
+6-8llvm/test/Transforms/SLPVectorizer/X86/supernode.ll
+6-0llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.h
+5-0llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp
+663-1043 files not shown
+666-1119 files

LLVM/project 702852bllvm/test/CodeGen/AArch64 sve-streaming-mode-fixed-length-int-extends.ll sve-fixed-length-masked-expandloads.ll, llvm/test/CodeGen/AArch64/GlobalISel split-wide-shifts-multiway.ll

Merge branch 'main' into users/kovdan01/pauthtest-elf-got
DeltaFile
+4,862-0llvm/test/Transforms/LoopVectorize/vplan-based-stride-mv.ll
+2,988-0llvm/test/Transforms/LoopVectorize/VPlan/vplan-based-stride-mv.ll
+1,148-1,123llvm/test/CodeGen/AArch64/GlobalISel/split-wide-shifts-multiway.ll
+1,023-1,030llvm/test/CodeGen/AArch64/neon-dotreduce.ll
+727-755llvm/test/CodeGen/AArch64/sve-fixed-length-masked-expandloads.ll
+611-614llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-extends.ll
+11,359-3,5221,198 files not shown
+44,025-13,8491,204 files

LLVM/project ae76985llvm/docs/_static custom.css

[Docs] don't stylize syntax errors in code blocks (#212698)

When a code block in the documentation contains (almost) pseudocode, the
Pygments parser flags errors and renders them with red-bordered boxes.
This is unnecessarily ugly. We can see examples of this in the LangRef
with LLVM code blocks.

Instead set the style to just render them as plain text. This is still
recognizable as incorrect syntax, but does not distract the reader from
the actual example.

Assisted-by: Claude Opus 4.8
DeltaFile
+8-0llvm/docs/_static/custom.css
+8-01 files

LLVM/project f123a17libc/src/__support/math CMakeLists.txt ceilf128.h

test
DeltaFile
+10-1libc/src/__support/math/ceilf128.h
+1-0libc/src/__support/math/CMakeLists.txt
+11-12 files

LLVM/project 84a0c00llvm/lib/Transforms/Scalar GVN.cpp, llvm/test/Transforms/GVN load-of-pointer-select-available.ll

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+44-0llvm/test/Transforms/GVN/load-of-pointer-select-available.ll
+9-2llvm/lib/Transforms/Scalar/GVN.cpp
+53-22 files

LLVM/project 22898d9llvm/lib/Target/AMDGPU SIInstrInfo.cpp VOP3PInstructions.td, llvm/lib/Target/AMDGPU/Utils AMDGPUBaseInfo.cpp

[AMDGPU] Duplicate packed fp32 instructions

These have different semantics on gfx9 and gfx12 with respect to
scalar operands.
DeltaFile
+24-10llvm/lib/Target/AMDGPU/SIInstructions.td
+15-8llvm/lib/Target/AMDGPU/VOP3PInstructions.td
+9-9llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+6-6llvm/test/CodeGen/AMDGPU/bug-pk-f32-imm-fold.mir
+5-5llvm/test/CodeGen/AMDGPU/coexec-sched-effective-stall.mir
+4-4llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+63-424 files not shown
+70-4610 files

LLVM/project 705d0ecllvm/include/llvm/MC MCGOFFStreamer.h, llvm/lib/MC MCGOFFStreamer.cpp

[SystemZ][z/OS] Implement emitCommonSymbol in MCGOFFStreamer (#210179)

Common globals were not emitted in GOFF object files due to a missing
emitCommonSymbol implementation. This adds the implementation to emit
the required SD/ED/PR ESD records in the GOFF object file.
DeltaFile
+29-0llvm/lib/MC/MCGOFFStreamer.cpp
+28-0llvm/test/CodeGen/SystemZ/zos-common-global.ll
+1-1llvm/include/llvm/MC/MCGOFFStreamer.h
+58-13 files

LLVM/project 6554a97clang/test/Driver aarch64-ptrauth.c

[PAC][clang][test] Fix incorrect usage of `-NOT` suffix for FileCheck (#212445)

Previously, `-NOT` checks were not doing what was intended: checking
that given strings are not present within the same line where other
patterns are confirmed present by other checks. `-NOT` semantics is
checking pattern absense in between other checks, not total absense.

This patch makes use of `--implicit-check-not` instead for this purpose.
DeltaFile
+15-14clang/test/Driver/aarch64-ptrauth.c
+15-141 files

LLVM/project 86fb40dllvm/include/llvm/ProfileData SampleProfReader.h, llvm/lib/Transforms/IPO SampleProfileMatcher.cpp SampleProfile.cpp

[ProfileData] Implement contains in SampleProfileNameTable (NFC) (#211995)

This patch implements contains(StringRef) and contains(uint64_t) in
SampleProfileNameTable and SampleProfileReader to serve symbol
membership queries directly from the reader -- "is this symbol in the
name table?".

Without this patch, users of the sample profile reader, namely
SampleProfileLoader::doInitialization and SampleProfileNameSet, each
construct their own StringSet<> containing all name table entries.
That is, we end up with two instances of StringSet<> with identical
contents.  Since these instances hold their own copies of symbol
strings on the heap, both the constructor and destructor take up a
large portion of compilation time.

This patch teaches SampleProfileReader::contains to directly serve
symbol membership queries.

- For EytzingerSampleProfileNameTable, contains performs binary search

    [11 lines not shown]
DeltaFile
+65-18llvm/include/llvm/ProfileData/SampleProfReader.h
+5-25llvm/lib/Transforms/IPO/SampleProfile.cpp
+11-0llvm/unittests/ProfileData/SampleProfTest.cpp
+1-2llvm/lib/Transforms/IPO/SampleProfileMatcher.cpp
+82-454 files

LLVM/project fee444ellvm/include/llvm/IR RuntimeLibcalls.td, llvm/lib/CodeGen/SelectionDAG TargetLowering.cpp

RuntimeLibcalls: Add generic FCMP3_F* three-way compare for single-symbol ABIs

MSP430's __mspabi_cmpd/__mspabi_cmpf are one three-way compare symbol serving
every predicate, previously modeled as six suffixed impls each. Replace them
with a single generic operator FCMP3_*, and give softenSetCCOperands a 3rd
lowering option. After the boolean O*_F* and the per-predicate FCMP3_<pred>_F*
helpers, use the generic FCMP3_F* helper tested with the predicate's condition
code.

Also opt __nedf2 out of the MSP430 default set: it was the only libgcc F64
compare not already opted out, so it would otherwise provide FCMP3_UNE_F64 and
win over __mspabi_cmpd for not-equal.

Co-authored-by: Claude (Opus 4.8) <noreply at anthropic.com>
DeltaFile
+45-40llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+11-26llvm/include/llvm/IR/RuntimeLibcalls.td
+56-662 files

LLVM/project d77892cllvm/include/llvm/IR RuntimeLibcalls.td, llvm/lib/CodeGen TargetLoweringBase.cpp

RuntimeLibcalls: Split soft-float three-way compares into distinct libcall kinds

Soft-float compares come in two flavors. ARM AEABI (__aeabi_dcmpeq) and VFP
(__eqdf2vfp) return a simple 0/1 boolean and use the existing O*_F* / UO_F*
libcalls. The libgcc/compiler-rt helpers (__eqdf2, __ltdf2, ...) return a
three-way -1/0/1, which the legalizer needs to insert the appropriate compare
against.

The three-way helpers previously masqueraded as O*_F* implementations, with the
condition code recovered from a hardcoded switch. Model them instead as distinct
operations. The legalizer then reasons about how to make use of the call result
based on which flavor of operation is available, rather than special casing what
the specific implementation is.

This leaves the mspabi cases for a later cleanup, because it's 3-way usage is
slightly different from the ARM case.

Co-authored-by: Claude (Opus 4.8) <noreply at anthropic.com>
DeltaFile
+74-54llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+68-56llvm/include/llvm/IR/RuntimeLibcalls.td
+52-28llvm/lib/Target/ARM/ARMLegalizerInfo.cpp
+0-69llvm/lib/CodeGen/TargetLoweringBase.cpp
+18-0llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
+8-6llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+220-2131 files not shown
+220-2187 files

LLVM/project 834d585llvm/test/tools/llubi ptrtoint_cast.ll, llvm/tools/llubi/lib Interpreter.cpp Context.cpp

[llubi] Fix ptrtoint's return type (#212839)

Closes https://github.com/llvm/llvm-project/issues/212788.
DeltaFile
+24-0llvm/test/tools/llubi/ptrtoint_cast.ll
+3-3llvm/tools/llubi/lib/Context.cpp
+3-2llvm/tools/llubi/lib/Interpreter.cpp
+30-53 files

LLVM/project 9064e23.github CODEOWNERS

Add some bazel libc review coverage (#209789)

This should improve timezone coverage for keeping the bazel build
working due to libc breakages, e.g. #209433 broke things and the bazel
fixer bot sent out #209689. But since it wasn't landed until just
recently, manual fixes were needed for other changes like #209449. This
wouldn't be as bad if the bazel fixer bot could handle layered
breakages.
DeltaFile
+1-0.github/CODEOWNERS
+1-01 files

LLVM/project 5912665llvm/include/llvm/TargetParser AMDGPUTargetParser.h, llvm/lib/TargetParser AMDGPUTargetParser.cpp Triple.cpp

AMDGPU: TableGen the subarch triple name table

Co-authored-by: Claude (Claude-Opus-4.8)
DeltaFile
+87-20llvm/utils/TableGen/Basic/AMDGPUTargetDefEmitter.cpp
+2-45llvm/lib/TargetParser/Triple.cpp
+23-0llvm/lib/TargetParser/AMDGPUTargetParser.cpp
+17-0llvm/test/TableGen/AMDGPUTargetDefErrors.td
+4-0llvm/include/llvm/TargetParser/AMDGPUTargetParser.h
+133-655 files

LLVM/project b534350llvm/include/llvm/TargetParser AMDGPUTargetParser.h, llvm/lib/TargetParser AMDGPUTargetParser.cpp

AMDGPU: Eliminate old macro driven processor name parsing

Previously the generated inc file had a series of macros for use
with StringSwitch; now just directly scan the generated name table.

Co-authored-by: Claude (Claude-Opus-4.8)
DeltaFile
+162-114llvm/utils/TableGen/Basic/AMDGPUTargetDefEmitter.cpp
+72-43llvm/lib/TargetParser/AMDGPUTargetParser.cpp
+2-2llvm/include/llvm/TargetParser/AMDGPUTargetParser.h
+236-1593 files

LLVM/project 389bcb2llvm/utils/TableGen/Basic AMDGPUTargetDefEmitter.cpp

order
DeltaFile
+32-19llvm/utils/TableGen/Basic/AMDGPUTargetDefEmitter.cpp
+32-191 files

LLVM/project 6fe7eballvm/lib/TargetParser AMDGPUTargetParser.cpp

no auto
DeltaFile
+4-4llvm/lib/TargetParser/AMDGPUTargetParser.cpp
+4-41 files

LLVM/project ab50e66llvm/lib/TargetParser AMDGPUTargetParser.cpp, llvm/utils/TableGen/Basic AMDGPUTargetDefEmitter.cpp

AMDGPU: TableGen the subarch to processor name mapping table

Replace the hand-written AMDGPUSubArchNames array (SubArch -> canonical GPU
name) with a generated table.

Co-authored-by: Claude (Claude-Opus-4.8)
DeltaFile
+23-43llvm/lib/TargetParser/AMDGPUTargetParser.cpp
+61-5llvm/utils/TableGen/Basic/AMDGPUTargetDefEmitter.cpp
+84-482 files