LLVM/project 4158a91 — libcxx/include print, libcxx/include/__ostream print.h

[libc++] Clean up leftover std::print availability workarounds (#234379)

The availability markup for std::print was removed in 4a87db6b10a0 and
the corresponding macros were deleted entirely in 1616fbaccf82. However,
several functions in <print> were left templates to work around
https://llvm.org/PR61563, which is not necessary anymore.

Remove a few workarounds that are now unnecessary, and reword others
that are required due to format now, not print.
DeltaFile
+6-9libcxx/include/print
+5-5libcxx/include/__ostream/print.h
+0-8libcxx/utils/libcxx/test/features/availability.py
+11-223 files

LLVM/project 1b003ae — llvm/lib/Object Archive.cpp, llvm/test/Object bigarchive-malformed-next-offset.test

[Object] Bounds-check the big archive next member offset (#230781)

NextOffset comes from a 20-character decimal field in the member header,
so it can hold any 64-bit value. `getNextChildLoc()` adds it to the
start of the buffer before anything checks it, which wraps, and the
`NextLoc > getBufferEnd()` test in `getNext()` then passes because the
wrapped pointer is below the buffer rather than above it. The next
member header is read from there: with an offset of 2^64-1 the pointer
lands one byte before the archive, and llvm-ar prints that byte back in
its own diagnostic.

Check the offset against the archive's size while it is still an
integer.

The generic member header path has the same shape but its size field is
only 10 characters wide, so it cannot reach a wrap and is left alone.

Assisted-by: Claude (Anthropic)
DeltaFile
+55-0llvm/test/Object/bigarchive-malformed-next-offset.test
+38-12llvm/lib/Object/Archive.cpp
+1-1llvm/test/tools/llvm-objdump/malformed-archives.test
+94-133 files

LLVM/project 8a5d84c — llvm/lib/Support UnicodeNameToCodepointGenerated.cpp, llvm/test/CodeGen/AMDGPU frem.ll

Merge branch 'main' into users/huntergr-arm/vector-lsr-data
DeltaFile
+32,088-15,710llvm/test/CodeGen/AMDGPU/frem.ll
+23,347-23,371llvm/lib/Support/UnicodeNameToCodepointGenerated.cpp
+31,848-0llvm/test/CodeGen/NVPTX/atomicrmw-elementwise-sm60.ll
+31,310-0llvm/test/CodeGen/NVPTX/atomicrmw-elementwise-sm70.ll
+22,584-0llvm/test/CodeGen/NVPTX/load-sm90.ll
+22,541-0llvm/test/CodeGen/NVPTX/atomicrmw-elementwise-sm90.ll
+163,718-39,08112,200 files not shown
+1,078,707-418,05012,206 files

LLVM/project 800062a — llvm/lib/Target/AArch64 AArch64ISelLowering.cpp, llvm/test/CodeGen/AArch64 sve-intrinsics-and-not.ll

[AArch64][llvm] Combine SVE AND-NOT operations into BIC for _m forms

Replace NOT followed by merging AND with BIC for expressions such as:

  return svand_u32_m(pg, a, svnot_u32_x(pg, b));

Combine when NOT is the second operand and its predicate matches the AND
predicate or is all-active.

Use predicated BIC to preserve the AND's first operand in inactive
lanes. Use unpredicated BIC when the AND predicate is all-active.

Do not commute merging AND operands, since this would change inactive
results. Leave pairs with incompatible predicates unchanged.

This applies to all integer element widths. Update the pre-commit LLVM
expectations, including cases where combining would change the
result.
DeltaFile
+12-48llvm/test/CodeGen/AArch64/sve-intrinsics-and-not.ll
+33-0llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+45-482 files

LLVM/project 965774c — llvm/lib/Target/AArch64 AArch64SVEInstrInfo.td AArch64ISelLowering.cpp

fixup! [AArch64][llvm] Combine SVE AND-NOT operations into BIC for _m forms

Select merging AND-NOT operations with TableGen patterns instead of the C++ combine. Preserve the first operand in inactive lanes and use an unpredicated BIC when both predicates are all-active.
DeltaFile
+0-33llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+20-0llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
+20-332 files

LLVM/project dbad45e — llvm/lib/Target/AArch64 AArch64ISelLowering.cpp, llvm/test/CodeGen/AArch64 sve-intrinsics-and-not.ll

[AArch64][llvm] Combine SVE AND-NOT operations into BIC for _x forms

Replace NOT followed by AND with BIC for expressions such as:

  return svand_u32_x(svptrue_b32(), a, svnot_u32_x(svptrue_b32(), b));

Combine ordinary AND with NOT when the NOT predicate is all-active or
its inactive values are undefined.

Also combine matching-predicate SVE AND_x-NOT pairs before lowering
discards the AND predicate. AND_x ignores inactive results, so the NOT's
inactive values do not need preserving.

This applies to all integer element widths. Update the pre-commit LLVM
expectations, including cases where combining would change the
result.
DeltaFile
+22-101llvm/test/CodeGen/AArch64/sve-intrinsics-and-not.ll
+35-2llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+57-1032 files

LLVM/project 2d8a99d — llvm/test/CodeGen/AArch64 sve-intrinsics-and-not.ll

fixup! Add tests for extra widths
DeltaFile
+30-0llvm/test/CodeGen/AArch64/sve-intrinsics-and-not.ll
+30-01 files

LLVM/project e716545 — llvm/lib/Target/AArch64 AArch64ISelLowering.cpp AArch64SVEInstrInfo.td

fixup! [AArch64][llvm] Combine SVE AND-NOT operations into BIC for _x forms
DeltaFile
+14-0llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
+0-12llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+14-122 files

LLVM/project 30e33f0 — llvm/lib/Target/AArch64 AArch64ISelLowering.cpp AArch64SVEInstrInfo.td

fixup! Replace performSVEAndNotIntrinsicCombine() with tablegen

Move AND_U and NOT matching to TableGen, using a shared pattern fragment
for both operand orders. Retain register and immediate AND selection
for other AND_U operations.
DeltaFile
+43-1llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
+24-14llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+67-152 files

LLVM/project ff62e27 — llvm/test/CodeGen/AArch64 sve-intrinsics-and-not.ll

[AArch64][llvm] Add pre-commit tests for SVE AND-NOT combining

Add LLVM tests for expressions where NOT followed by AND could
use BIC. Record the existing assembly so the following changes show the
missed optimisations being fixed.

Cover _x and _m AND forms using all-active and runtime predicates. Test
_m forms across all integer element widths. Include NOT with defined
inactive values and reversed AND operands.

Also test cases that must remain as NOT followed by AND because
combining would change the values in inactive lanes.
DeltaFile
+346-0llvm/test/CodeGen/AArch64/sve-intrinsics-and-not.ll
+346-01 files

LLVM/project 7f8cdec — llvm/test/CodeGen/AArch64 sve-intrinsics-and-not.ll

fixup! [AArch64][llvm] Add pre-commit tests for SVE AND-NOT combining

Add the ordinary LLVM NOT cases to the pre-commit tests, covering both AND_U operand orders. These already select BIC and guard against regressions when retaining AND_U for TableGen selection.
DeltaFile
+22-0llvm/test/CodeGen/AArch64/sve-intrinsics-and-not.ll
+22-01 files

LLVM/project eb81f93 — llvm/test/CodeGen/AArch64 sve-intrinsics-logical-imm.ll

fixup! [AArch64][llvm] Add pre-commit tests for SVE AND-NOT combining

Add the nested AND_U constant-mask case to the pre-commit tests. This folding already works before the AND-NOT implementation change.
DeltaFile
+10-0llvm/test/CodeGen/AArch64/sve-intrinsics-logical-imm.ll
+10-01 files

LLVM/project 70eb667 — flang/lib/Semantics check-omp-structure.cpp, flang/test/Semantics/OpenMP substring-locators-50.f90 reduction-substring-task.f90

[flang][OpenMP] Disallow substrings as named parameter list items (#234609)

OpenMP 5.2+ explicitly disallows substrings as named parameter list
items (and therefore as members of argument lists). This patch checks
this restriction generically so that it applies everywhere.

AFFINITY and DEPEND both produced portability warnings instead of hard
errors. I decided to keep those existing extensions.

Some other clauses (e.g. privatization, reduction) have the same
restriction in earlier standard versions. This is checked separately for
those clauses.

Assisted-by: Codex
DeltaFile
+77-0flang/test/Semantics/OpenMP/substring-list-items.f90
+58-15flang/lib/Semantics/check-omp-structure.cpp
+53-0flang/test/Semantics/OpenMP/reduction-substring.f90
+32-0flang/test/Semantics/OpenMP/substring-list-items-pre52.f90
+18-0flang/test/Semantics/OpenMP/reduction-substring-task.f90
+10-0flang/test/Semantics/OpenMP/substring-locators-50.f90
+248-153 files not shown
+259-189 files

LLVM/project 260e155 — flang/lib/Semantics resolve-names.cpp, flang/test/Lower enumeration-type.f90

[flang] Enumeration Type: (PR 5/5) Enable (#231641)

Enable the F2023 ENUMERATION TYPE (7.6.2) by default and remove the
development gate.

- Remove `-fenumeration-type` / `-fno-enumeration-type`,
`LanguageFeature::EnumerationType` and the experimental-support warning.
- Update tests to run without the flag.
- Update ReleaseNotes.md, Extensions.md and FortranStandardsSupport.md.

New declaration checks. An enumeration type is not a derived type, so it
is not extensible and has no type parameters. Flang now diagnoses:
- `EXTENDS(enum)`, rejected early so that no parent component is created
- `CLASS(enum)`, including in a FUNCTION prefix and in IMPLICIT
- `CLASSOF(enum)`; Flang requires an extensible type here (see
Extensions.md)
- `CLASS IS (enum)` in SELECT TYPE
- `TYPE IS (enum)` unless the selector is unlimited polymorphic
- pointer assignment of an enumeration-type pointer from a `CLASS(*)`

    [19 lines not shown]
DeltaFile
+105-0flang/test/Semantics/enumeration-type-extensible.f90
+49-9flang/test/Semantics/enumeration-type-declarations.f90
+52-5flang/test/Semantics/enumeration-type-mod-readback.F90
+21-35flang/lib/Semantics/resolve-names.cpp
+42-3flang/test/Lower/enumeration-type.f90
+24-14flang/test/Semantics/enumeration-type-intrinsics-gating.f90
+293-6629 files not shown
+381-12335 files

LLVM/project 60f47a7 — libc/src/__support/threads/linux CMakeLists.txt, libc/src/__support/threads/linux/aarch64 CMakeLists.txt

[libc][cmake] Respect the configured optimization level for the Linux thread and TLS objects (#234382)

The `-O3` override on the Linux `thread` object dates from the old
approach of reading the thread arguments off the new thread's stack,
which #225384 removed; the `tls` objects copied the same pattern in
#225418. Neither needs it anymore, so drop the overrides and use the
optimization level configured by CMake.

Assisted-by: Claude
DeltaFile
+0-2libc/src/__support/threads/linux/CMakeLists.txt
+0-1libc/src/__support/threads/linux/x86_64/CMakeLists.txt
+0-1libc/src/__support/threads/linux/riscv/CMakeLists.txt
+0-1libc/src/__support/threads/linux/aarch64/CMakeLists.txt
+0-54 files

LLVM/project 06189c6 — clang/lib/Interpreter DeviceOffload.h

[NFC][clang-repl] Drop the private label in IncrementalCUDADeviceParser (#234600)

This is an NFC change. It moves the private members of
IncrementalCUDADeviceParser to the top of the class and drops the
`private:` specifier, to match `IncrementalHIPDeviceParser` and the rest
of the file.
DeltaFile
+9-11clang/lib/Interpreter/DeviceOffload.h
+9-111 files

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

[InstSimplify] Bail out early in simplifyICmpWithMinMax (NFC) (#234568)

All folds in simplifyICmpWithMinMax need at least one operand to be a
min/max. Bail out early to avoid wasting time on matching a number of
patterns.

stage1-O3: -0.05%
stage1-ReleaseThinLTO: -0.07%
stage1-ReleaseLTO-g: -0.04%
stage1-aarch64-O3: -0.05%
stage2-O3: -0.03%
stage2-clang: -0.04%


https://llvm-compile-time-tracker.com/compare.php?from=0668b6d3de48f173990d733f5a177fd88dc12b0d&to=035408799a27839f5341cd5a756f422b01bb15ff&stat=instructions:u

Aided by Opus 5.5

PR: https://github.com/llvm/llvm-project/pull/234568
DeltaFile
+4-0llvm/lib/Analysis/InstructionSimplify.cpp
+4-01 files

LLVM/project 01c7820 — llvm/lib/Target/AArch64 SMEInstrFormats.td AArch64InstrFormats.td

fixup! Rename the scalar MOVT index operand
DeltaFile
+2-2llvm/lib/Target/AArch64/SMEInstrFormats.td
+2-2llvm/lib/Target/AArch64/AArch64InstrFormats.td
+4-42 files

LLVM/project 238df2a — flang/unittests/Evaluate IntegerValueTest.cpp, llvm/test/CodeGen/AMDGPU float-to-arbitrary-fp-widen.ll

Rebase, other compile time improvements

Created using spr 1.3.7
DeltaFile
+4,842-5,011llvm/test/CodeGen/NVPTX/atomicrmw-elementwise-sm90.ll
+4,185-0llvm/test/Transforms/LoopVectorize/WebAssembly/dequantize.ll
+0-3,634llvm/test/Transforms/LoopVectorize/WebAssembly/memory-interleave.ll
+3,634-0llvm/test/Transforms/LoopVectorize/WebAssembly/CostModel/memory-interleave.ll
+1,465-1,512llvm/test/CodeGen/AMDGPU/float-to-arbitrary-fp-widen.ll
+2,342-0flang/unittests/Evaluate/IntegerValueTest.cpp
+16,468-10,1571,646 files not shown
+95,215-40,0921,652 files

LLVM/project 61cdd63 — llvm/utils/gn/secondary/clang/lib/CodeGen BUILD.gn

[gn build] Port ebeb26d53eafd (#234608)
DeltaFile
+1-0llvm/utils/gn/secondary/clang/lib/CodeGen/BUILD.gn
+1-01 files

LLVM/project afb0c37 — llvm/utils/gn/secondary/clang/unittests/AST BUILD.gn

[gn build] Port e74976eb00d6b (#234607)
DeltaFile
+1-0llvm/utils/gn/secondary/clang/unittests/AST/BUILD.gn
+1-01 files

LLVM/project 97722b0 — llvm/utils/gn/secondary/clang/lib/Sema BUILD.gn

[gn build] Port d7a7bd1667236 (#234604)
DeltaFile
+1-0llvm/utils/gn/secondary/clang/lib/Sema/BUILD.gn
+1-01 files

LLVM/project 3050038 — llvm/lib/CodeGen/GlobalISel LegalizerHelper.cpp, llvm/test/CodeGen/AArch64/GlobalISel invoke-result-phi.ll

[GlobalISel] Preserve dominance when legalizing invoke-result PHIs

PHI legalization inserts conversions before the first terminator so they
execute on unwind edges. An invoke result is defined after the invoke-region
marker, however, and placing its conversion before that marker creates a
use before definition.

Keep the existing insertion point for values available before the invoke,
and insert after the definition for values produced inside the region.
Use the same rule for scalar and vector PHI resizing. This also ensures
vector widening for unwind PHIs executes before a potentially throwing call.

Update the pre-committed IR and helper-level checks and enable machine
verification in the IR test.
DeltaFile
+24-4llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+6-6llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp
+4-5llvm/test/CodeGen/AArch64/GlobalISel/invoke-result-phi.ll
+34-153 files

LLVM/project 878337d — llvm/test/CodeGen/AArch64/GlobalISel invoke-result-phi.ll, llvm/unittests/CodeGen/GlobalISel LegalizerHelperTest.cpp

[GlobalISel][AArch64] Pre-commit PHI legalization tests around invokes

Cover a real invoke result and a vector PHI on an unwind edge. Check scalar
narrowing and vector splitting directly in LegalizerHelper tests so artifact
combining cannot hide misplaced conversions.

Record the current conversion placement for the subsequent dominance fix.
Temporarily disable machine verification in the IR test to capture the
existing use-before-definition output.
DeltaFile
+152-0llvm/test/CodeGen/AArch64/GlobalISel/invoke-result-phi.ll
+50-2llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp
+202-22 files

LLVM/project 221475d — llvm/lib/Transforms/Vectorize VPlanTransforms.cpp

Fixups
DeltaFile
+3-3llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+3-31 files

LLVM/project fef929a — flang/include/flang/Semantics openmp-utils.h, flang/lib/Semantics check-omp-variant.cpp openmp-utils.cpp

Verify selectorless clauses as well
DeltaFile
+36-19flang/lib/Semantics/openmp-utils.cpp
+9-15flang/lib/Semantics/check-omp-variant.cpp
+8-2flang/test/Semantics/OpenMP/metadirective-declare-reduction.f90
+5-0flang/include/flang/Semantics/openmp-utils.h
+58-364 files

LLVM/project feb5a74 — llvm/lib/Analysis ScalarEvolution.cpp, llvm/test/Transforms/IndVarSimplify implied-nonneg-from-unsigned-bound.ll implied-nonneg-from-unsigned-bound-swapped.ll

[SCEV] Derive x >=s 0 from x <u y and y <=u 2^(n-1)

Let n be the bit width of x and y. If x <u y and y <=u 2^(n-1), then
x <u 2^(n-1), so x >=s 0. Here y <=u 2^(n-1) means y >=s 0 or
y == INT_MIN. In the same way, if x <=u y and y <u 2^(n-1), then
x >=s 0.

This lets a guard like x <u len prove x >=s 0 when len is non-negative.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+21-32llvm/test/Transforms/IndVarSimplify/implied-nonneg-from-unsigned-bound-swapped.ll
+5-17llvm/test/Transforms/IndVarSimplify/implied-nonneg-from-unsigned-bound.ll
+21-0llvm/lib/Analysis/ScalarEvolution.cpp
+47-493 files

LLVM/project b615446 — llvm/test/Transforms/IndVarSimplify implied-nonneg-from-unsigned-bound-swapped.ll

[SCEV][IndVars][NFC] Add tests for x >=s 0 from x <u y with swapped operands

Let n be the bit width of x and y. If x <u y and y <=u 2^(n-1), then
x >=s 0. SCEV can't prove this yet when the operands of the compare to
prove are in the opposite order to the guard, e.g. 0 <=s x with
x <u y known.

Add tests for it.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+1,196-0llvm/test/Transforms/IndVarSimplify/implied-nonneg-from-unsigned-bound-swapped.ll
+1,196-01 files

LLVM/project dcc06b3 — llvm/test/Transforms/IndVarSimplify implied-nonneg-from-unsigned-bound.ll

[SCEV][IndVars][NFC] Add tests for x >=s 0 from x <u y and y <=u 2^(n-1)

Let n be the bit width of x and y. If x <u y and y <=u 2^(n-1), then
x >=s 0. SCEV can't prove this yet.

Add tests for it.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+287-0llvm/test/Transforms/IndVarSimplify/implied-nonneg-from-unsigned-bound.ll
+287-01 files

LLVM/project c593391 — llvm/lib/Analysis ScalarEvolution.cpp, llvm/test/Transforms/IndVarSimplify implied-cond-different-signedness.ll

[SCEV] Prove signed/unsigned implications in either operand order

SCEV could prove these implications only with the operands in the same
order:
- If a <u b and a, b have the same sign, then a <s b.
- If a <s b and a, b have the same sign, then a <u b.
- If a <u b and b >=s 0, then a <s b.
- If a <s b and b <s 0, then a <u b.

For example, it proved a <s b from a <u b and b >=s 0, but not b >s a.
Now it proves them in either order.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+3-14llvm/test/Transforms/IndVarSimplify/implied-cond-different-signedness.ll
+7-1llvm/lib/Analysis/ScalarEvolution.cpp
+10-152 files