LLVM/project a35842d — llvm/test/Transforms/SLPVectorizer/X86 negated-lane-wrap-flags.ll

[SLP][NFC]Add a test missing incorrect nsw propagation on constexprs, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/230834
DeltaFile
+46-0llvm/test/Transforms/SLPVectorizer/X86/negated-lane-wrap-flags.ll
+46-01 files

LLVM/project d987f8b — clang/lib/CodeGen CGCall.cpp, clang/test/CodeGen call-graph-section-virtual-dtor.cpp

[clang][CodeGen] Emit callee_type metadata for all indirect calls

CodeGenFunction::EmitCall only attached the call graph section callee_type
metadata to an indirect call when its caller asked for the emitted call
instruction through the callOrInvoke out parameter, because the emission
was nested in the block that stores it. Indirect calls emitted by callers
that do not pass callOrInvoke, such as the virtual destructor call of a
delete expression (emitVirtualObjectDelete -> EmitCXXDestructorCall), got
no callee_type metadata and therefore no indirect callee type identifiers
in the .llvm.callgraph section, so the call graph missed those edges.

Attach the metadata to the emitted call instruction regardless of whether
the caller asked for it.

Stacked on #230831.

Assisted-by: Claude
DeltaFile
+67-69clang/lib/CodeGen/CGCall.cpp
+32-0clang/test/CodeGen/call-graph-section-virtual-dtor.cpp
+99-692 files

LLVM/project a27e882 — clang/lib/CodeGen CGCall.cpp CodeGenModule.h, clang/test/CodeGen call-graph-section-covariant-return.cpp

[clang][CodeGen] Identify virtual methods by their override chain root in the call graph section

A virtual call site is annotated with the type of the method named at the
call site (e.g. `Base::clone` for `b->clone()` with `b` of type `Base *`),
but it can reach any overrider of that method. Overriders may differ from
the overridden method only in their covariant return type, in which case
their call graph section type identifier (`!callgraph`) did not match the
type identifier of the call site (`!callee_type`), so the call graph
missed the edge: `Derived *Derived::clone()` was identified as
`_ZTSFP7DerivedvE`, while calls through `Base *` were typed
`_ZTSFP4BasevE`.

Identify every method of an override chain, at the definition and at the
call site, by the type of the method that introduced the virtual function
(the root of the override chain), so that virtual calls through a pointer
to any class of the hierarchy match the overriders they can reach. A
method that overrides several virtual functions with different covariant
return types is identified after the first one; the return adjusting
thunks that fill the vtable slots created by the other overridden methods

    [14 lines not shown]
DeltaFile
+87-0clang/test/CodeGen/call-graph-section-covariant-return.cpp
+29-4clang/lib/CodeGen/CodeGenModule.cpp
+8-0clang/lib/CodeGen/CodeGenModule.h
+8-0clang/lib/CodeGen/CGVTables.cpp
+3-1clang/lib/CodeGen/CGCall.cpp
+135-55 files

LLVM/project a3da945 — llvm/test/tools/llubi bitinsert_bitextract_le.ll bitinsert_bitextract_be.ll, llvm/tools/llubi/lib Context.h Context.cpp

[llubi] Add support for `bitinsert` and `bitextract`
DeltaFile
+78-0llvm/test/tools/llubi/bitinsert_bitextract_le.ll
+78-0llvm/test/tools/llubi/bitinsert_bitextract_be.ll
+29-0llvm/tools/llubi/lib/Interpreter.cpp
+19-0llvm/tools/llubi/lib/Context.cpp
+7-0llvm/tools/llubi/lib/Context.h
+211-05 files

LLVM/project 46cf0b8 — llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/PhaseOrdering/AArch64 reassociate-fma-pairs.ll

[SLP]Count splats as single broadcast for in-loop trees

The loop-aware instruction-count check scaled the per-lane count of
splat gather entries by the trip count, rejecting profitable trees.
A splat is a single broadcast regardless of the loop scale. Fixes
4-6% RAJAPerf Apps_DIFFUSION3DPA regression on AArch64 introduced
by #211096.

Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/230821
DeltaFile
+20-29llvm/test/Transforms/SLPVectorizer/AArch64/loop-splat-inst-count.ll
+23-26llvm/test/Transforms/PhaseOrdering/AArch64/reassociate-fma-pairs.ll
+13-9llvm/test/Transforms/SLPVectorizer/AArch64/splat-gather-subtree-store-chain.ll
+3-2llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+59-664 files

LLVM/project cb2526b — llvm/test/Transforms/InstCombine bitinsert-bitextract.ll

[InstCombine] Pre-commit tests for full-width `bitinsert`/`bitextract`
DeltaFile
+152-0llvm/test/Transforms/InstCombine/bitinsert-bitextract.ll
+152-01 files

LLVM/project 36f85bd — llvm/lib/Transforms/InstCombine InstCombineInternal.h InstructionCombining.cpp, llvm/test/Transforms/InstCombine bitinsert-bitextract.ll

[InstCombine] Fold full-width `bitinsert` and `bitextract` to `bitcast`
DeltaFile
+31-0llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+8-10llvm/test/Transforms/InstCombine/bitinsert-bitextract.ll
+2-0llvm/lib/Transforms/InstCombine/InstCombineInternal.h
+41-103 files

LLVM/project 312a314 — llvm/lib/Analysis InstructionSimplify.cpp

Fix CI
DeltaFile
+2-2llvm/lib/Analysis/InstructionSimplify.cpp
+2-21 files

LLVM/project 84a4bdf — llvm/test/Transforms/InstSimplify bitinsert-bitextract.ll

[InstSimplify] Pre-commit tests for `bitinsert` and `bitextract`




DeltaFile
+331-0llvm/test/Transforms/InstSimplify/bitinsert-bitextract.ll
+331-01 files

LLVM/project cb94203 — llvm/lib/Analysis InstructionSimplify.cpp

[InstSimplify] Use `m_ConstantInt` for bit range offset
DeltaFile
+3-3llvm/lib/Analysis/InstructionSimplify.cpp
+3-31 files

LLVM/project fa46740 — llvm/include/llvm/Analysis InstSimplifyFolder.h InstructionSimplify.h, llvm/include/llvm/IR PatternMatch.h

[InstSimplify] Simplify `bitinsert` and `bitextract`
DeltaFile
+89-0llvm/lib/Analysis/InstructionSimplify.cpp
+18-43llvm/test/Transforms/InstSimplify/bitinsert-bitextract.ll
+29-0llvm/unittests/IR/PatternMatch.cpp
+15-0llvm/include/llvm/IR/PatternMatch.h
+8-0llvm/include/llvm/Analysis/InstructionSimplify.h
+2-4llvm/include/llvm/Analysis/InstSimplifyFolder.h
+161-476 files

LLVM/project 82223dd — llvm/lib/Analysis InstructionSimplify.cpp, llvm/test/Transforms/InstSimplify bitinsert-bitextract.ll

[InstSimplify] Fold reinsert of non-byte `bitextract`
DeltaFile
+9-19llvm/test/Transforms/InstSimplify/bitinsert-bitextract.ll
+2-6llvm/lib/Analysis/InstructionSimplify.cpp
+11-252 files

LLVM/project 8bb9f78 — llvm/lib/Transforms/Utils VNCoercion.cpp, llvm/test/Transforms/GVN byte-conversion.ll

[GVN] Don't coerce forwarded byte values through integers

DeltaFile
+46-90llvm/test/Transforms/GVN/byte-conversion.ll
+25-6llvm/lib/Transforms/Utils/VNCoercion.cpp
+71-962 files

LLVM/project f13c8f5 — llvm/test/Transforms/GVN byte-conversion.ll

[GVN] Pre-commit tests for byte conversions

DeltaFile
+278-0llvm/test/Transforms/GVN/byte-conversion.ll
+278-01 files

LLVM/project 459bce1 — llvm/include/llvm/Analysis TargetFolder.h ConstantFolding.h, llvm/include/llvm/IR ConstantFolder.h

[ConstantFolding] Fold `bitinsert` and `bitextract` (#229115)

Constant fold `bitinsert` and `bitextract`.

- Bits of a `ConstantByte` are extracted or inserted, then reinterpreted
as if by `bitcast`.
- A `bitinsert` that overwrites every bit of the base becomes a
`bitcast` of the value.
- An out-of-range, `poison` source or `poison`/`undef` offset returns
`poison`.

```llvm
%a = bitextract i8, b32 512, i32 8      ; i8 2
%b = bitinsert b32 0, i8 1, i32 8       ; b32 256
%c = bitinsert b16 0, half 1.0, i32 0   ; b16 15360, the bits of half 1.0
%d = bitextract i8, b32 0, i32 25       ; i8 poison
```
DeltaFile
+378-0llvm/test/Transforms/InstSimplify/ConstProp/bitinsert-bitextract.ll
+86-0llvm/lib/Analysis/ConstantFolding.cpp
+14-0llvm/include/llvm/Analysis/ConstantFolding.h
+9-0llvm/include/llvm/Analysis/TargetFolder.h
+2-2llvm/include/llvm/IR/ConstantFolder.h
+489-25 files

LLVM/project 29228c2 — llvm/test/tools/llubi bitinsert_bitextract_le.ll bitinsert_bitextract_be.ll, llvm/tools/llubi/lib Context.h Context.cpp

[llubi] Add support for `bitinsert` and `bitextract`
DeltaFile
+116-0llvm/test/tools/llubi/bitinsert_bitextract_le.ll
+116-0llvm/test/tools/llubi/bitinsert_bitextract_be.ll
+32-0llvm/tools/llubi/lib/Interpreter.cpp
+19-0llvm/tools/llubi/lib/Context.cpp
+7-0llvm/tools/llubi/lib/Context.h
+290-05 files

LLVM/project a341eb4 — llvm/tools/llubi/lib Context.cpp

Fix formatting
DeltaFile
+2-2llvm/tools/llubi/lib/Context.cpp
+2-21 files

LLVM/project 82e2575 — llvm/docs InstCombineContributorGuide.md

[InstCombine] fix power of two examples (#230814)
DeltaFile
+2-2llvm/docs/InstCombineContributorGuide.md
+2-21 files

LLVM/project dab20c9 — llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/PhaseOrdering/AArch64 reassociate-fma-pairs.ll

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+20-29llvm/test/Transforms/SLPVectorizer/AArch64/loop-splat-inst-count.ll
+23-26llvm/test/Transforms/PhaseOrdering/AArch64/reassociate-fma-pairs.ll
+13-9llvm/test/Transforms/SLPVectorizer/AArch64/splat-gather-subtree-store-chain.ll
+3-2llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+59-664 files

LLVM/project de13b51 — utils/bazel/llvm-project-overlay/mlir BUILD.bazel

[bazel] Port 3d519f5eee97 (#230820)
DeltaFile
+6-0utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
+6-01 files

LLVM/project f5cee7d — llvm/test/Transforms/SLPVectorizer/AArch64 loop-splat-inst-count.ll

[SLP][NFC]Add a test with regressed vectorization, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/230817
DeltaFile
+136-0llvm/test/Transforms/SLPVectorizer/AArch64/loop-splat-inst-count.ll
+136-01 files

LLVM/project 830cb65 — llvm/test/tools/llubi bitinsert_bitextract_be.ll bitinsert_bitextract_le.ll, llvm/tools/llubi/lib Context.h Context.cpp

[llubi] Add support for `bitinsert` and `bitextract`
DeltaFile
+106-0llvm/test/tools/llubi/bitinsert_bitextract_be.ll
+106-0llvm/test/tools/llubi/bitinsert_bitextract_le.ll
+32-0llvm/tools/llubi/lib/Interpreter.cpp
+19-0llvm/tools/llubi/lib/Context.cpp
+7-0llvm/tools/llubi/lib/Context.h
+270-05 files

LLVM/project 6cf47c5 — llvm/test/tools/llubi bitcast_le.ll bitcast_be.ll, llvm/tools/llubi/lib Context.cpp

[llubi] Fix wrong assert when writing `poison` at an unaligned bit offset
DeltaFile
+5-4llvm/tools/llubi/lib/Context.cpp
+4-0llvm/test/tools/llubi/bitcast_le.ll
+4-0llvm/test/tools/llubi/bitcast_be.ll
+13-43 files

LLVM/project 7b6a055 — llvm/lib/Analysis InstructionSimplify.cpp, llvm/test/Transforms/InstSimplify bitinsert-bitextract.ll

[InstSimplify] Fold reinsert of non-byte `bitextract`
DeltaFile
+9-19llvm/test/Transforms/InstSimplify/bitinsert-bitextract.ll
+2-6llvm/lib/Analysis/InstructionSimplify.cpp
+11-252 files

LLVM/project d222bae — llvm/lib/Analysis InstructionSimplify.cpp

[InstSimplify] Use `m_ConstantInt` for bit range offset
DeltaFile
+3-3llvm/lib/Analysis/InstructionSimplify.cpp
+3-31 files

LLVM/project 1f826be — llvm/test/tools/llubi bitinsert_bitextract_be.ll bitinsert_bitextract_le.ll, llvm/tools/llubi/lib Context.h Context.cpp

[llubi] Add support for `bitinsert` and `bitextract`
DeltaFile
+106-0llvm/test/tools/llubi/bitinsert_bitextract_be.ll
+106-0llvm/test/tools/llubi/bitinsert_bitextract_le.ll
+32-0llvm/tools/llubi/lib/Interpreter.cpp
+19-0llvm/tools/llubi/lib/Context.cpp
+7-0llvm/tools/llubi/lib/Context.h
+270-05 files

LLVM/project 57dd6b9 — llvm/test/tools/llubi bitcast_le.ll bitcast_be.ll, llvm/tools/llubi/lib Context.cpp

[llubi] Fix byte-boundary assert when writing poison at a bit offset
DeltaFile
+5-4llvm/tools/llubi/lib/Context.cpp
+4-0llvm/test/tools/llubi/bitcast_le.ll
+4-0llvm/test/tools/llubi/bitcast_be.ll
+13-43 files

LLVM/project 9797e39 — llvm/include/llvm/Option LibraryOptions.td LibraryOptions.h, llvm/lib/Transforms/Scalar ScalarOptions.td LoopInterchange.cpp

[Option] Add OptionalValueField, OptionalEnumField, and list fields (#230812)

OptionalValueField and OptionalEnumField declare a std::optional member,
staying std::nullopt if unspecified.

ListField declares an ArrayRef member replacing a cl::list with
cl::CommaSeparated: each occurrence appends its comma-separated values,
keeping the struct trivially destructible. The elements live alongside
the argument copies, in the BumpPtrAllocator that
cl::LibraryOptions::parse now takes, until the next reset. EnumListField
maps the values to enumerators as EnumField does.

Aided by Opus 5.5
DeltaFile
+19-36llvm/lib/Transforms/Scalar/LoopInterchange.cpp
+49-3llvm/include/llvm/Option/LibraryOptions.h
+23-19llvm/lib/Transforms/Scalar/ScalarOptions.td
+35-7llvm/unittests/Option/LibraryOptionsTest.cpp
+17-10llvm/utils/TableGen/Basic/OptionParserEmitter.cpp
+26-0llvm/include/llvm/Option/LibraryOptions.td
+169-757 files not shown
+195-8613 files

LLVM/project ad7bb9b — llvm/lib/Transforms/InstCombine InstCombineAddSub.cpp, llvm/test/Transforms/InstCombine add.ll

[InstCombine] fold (A | -2) + A -> (A - 1) & -2 (#230791)

Regression found in https://github.com/llvm/llvm-project/pull/184182

proof: https://alive2.llvm.org/ce/z/CewAUL
DeltaFile
+78-10llvm/test/Transforms/InstCombine/add.ll
+10-0llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
+88-102 files

LLVM/project 528dd1c — llvm/test/tools/llubi bitinsert_bitextract_le.ll bitinsert_bitextract_be.ll, llvm/tools/llubi/lib Context.h Context.cpp

[llubi] Add support for `bitinsert` and `bitextract`
DeltaFile
+100-0llvm/test/tools/llubi/bitinsert_bitextract_le.ll
+100-0llvm/test/tools/llubi/bitinsert_bitextract_be.ll
+30-0llvm/tools/llubi/lib/Interpreter.cpp
+13-0llvm/tools/llubi/lib/Context.cpp
+7-0llvm/tools/llubi/lib/Context.h
+250-05 files