LLVM/project a9cd2d2 — llvm/lib/Transforms/Utils LoopPeel.cpp

[LoopPeel] Check compare shape before evaluatePredicate (NFCI). (#236309)

Check if we have an AddRec and a non-AddRec operand before checking the
more expensive isMonotonicPredicate.

Reduces compile-time a bit:
stage1-O3: -0.03%
stage1-ReleaseThinLTO: -0.07%
stage1-ReleaseLTO-g: -0.06%
stage1-aarch64-O3: -0.04%
stage2-O3: -0.05%
stage2-clang: -0.05%


https://llvm-compile-time-tracker.com/compare.php?from=fdfb0ce320ac94fac11de0b126cad2953d32998c&to=447d9acc2872eaad48ef5fb6281f608e2244859f&stat=instructions:u

Assisted-by: Opus 5.5
DeltaFile
+12-15llvm/lib/Transforms/Utils/LoopPeel.cpp
+12-151 files

LLVM/project e1a4233 — llvm/lib/Transforms/Vectorize LoopVectorize.cpp, llvm/test/Transforms/LoopVectorize runtime-checks-sibling-loop-addrec.ll reuse-lcssa-phi-scev-expansion.ll

[LV] Model memory runtime checks with AddRec bounds in VPlan. (#231132)

Remove the restriction in attachRuntimeChecks that kept the IR-generated
memcheck block when a check group's bounds contain a SCEVAddRecExpr.

VPSCEVExpander now expands AddRecs of loops outside VPlan's scope as
VPInstructions, with only canonical IVs expanded to IR in the plan's
entry, which dominates the check block.

Depends on https://github.com/llvm/llvm-project/pull/230858

PR: https://github.com/llvm/llvm-project/pull/231132
DeltaFile
+65-66llvm/test/Transforms/LoopVectorize/VPlan/memory-checks.ll
+2-18llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+9-10llvm/test/Transforms/LoopVectorize/runtime-checks-sibling-loop-addrec.ll
+9-10llvm/test/Transforms/LoopVectorize/reuse-lcssa-phi-scev-expansion.ll
+85-1044 files

LLVM/project ab6a1a5 — llvm/lib/Transforms/Vectorize LoopVectorize.cpp

[LV] Remove scalar resume phis when creating epilogue markers (NFC). (#236307)

Erase the resume phis in the main plan's scalar preheader directly in
preparePlanForMainVectorLoop, right after creating the ResumeForEpilogue
markers for them, instead of in a separate removeScalarResumePhis step
after the check blocks have been added.
DeltaFile
+5-14llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+5-141 files

LLVM/project a01ce5e — llvm/lib/Target/BPF BPFInstrInfo.td BPFISelLowering.h, llvm/test/CodeGen/BPF atomics-fence.ll atomics-expand.ll

[BPF] Lower the atomic operations that there is no insn for (#235215)

BPF has add, and, or, xor, xchg and cmpxchg on 32 and 64 bits, load
acquire
and store release. The rest is an error:

  atomicrmw xchg ptr %p, i8 %v seq_cst
    unsupported atomic operation, please use 32/64 bit version
  atomicrmw max ptr %p, i64 %v seq_cst
    Cannot select: AtomicLoadMax
  load atomic i64, ptr %p seq_cst, align 8
    sequentially consistent (seq_cst) atomic load/store is not supported
  fence acquire
    Runtime fence is not supported at the moment

With load acquire and store release, -mcpu=v4:
- 8 and 16 bits: the minimal size of cmpxchg is 32 bits. AtomicExpand
widens
and, or, xor, and turns the others into a loop around cmpxchg of the

    [26 lines not shown]
DeltaFile
+99-0llvm/test/CodeGen/BPF/atomics-expand.ll
+58-2llvm/lib/Target/BPF/BPFISelLowering.cpp
+13-0llvm/test/CodeGen/BPF/atomics-fence.ll
+5-0llvm/lib/Target/BPF/BPFISelLowering.h
+2-1llvm/lib/Target/BPF/BPFInstrInfo.td
+177-35 files

LLVM/project d0891a4 — llvm/lib/Transforms/Vectorize VPlanUtils.h VPlanUtils.cpp, llvm/test/Transforms/LoopVectorize expand-scev-shared-subexpressions.ll

[VPlan] Cache SCEV expansions in VPSCEVExpander. (#235983)

Cache expansions in VPSCEVExpander so expressions can be re-used. This
fixes a compile-time regression, where a large amount of time was spent
re-expanding the same sub-expressions.

Fixes https://github.com/llvm/llvm-project/issues/235447.

PR: https://github.com/llvm/llvm-project/pull/235983
DeltaFile
+533-0llvm/test/Transforms/LoopVectorize/expand-scev-shared-subexpressions.ll
+31-0llvm/test/Transforms/LoopVectorize/VPlan/expand-scev-reuse.ll
+25-0llvm/lib/Transforms/Vectorize/VPlanUtils.cpp
+7-7llvm/test/Transforms/LoopVectorize/PowerPC/pr41179.ll
+6-6llvm/test/Transforms/LoopVectorize/X86/masked_load_store.ll
+8-1llvm/lib/Transforms/Vectorize/VPlanUtils.h
+610-149 files not shown
+621-2315 files

LLVM/project 6a2d22f — llvm/lib/Target/BPF BPFUnwind.cpp BPFISelDAGToDAG.cpp, llvm/test/CodeGen/BPF sockex2.ll undef-is-zero.ll

[BPF] Select undef and poison as zero (#235216)

An undef or poison value is selected as IMPLICIT_DEF: no insn, the
register
holds what it happens to hold. The verifier rejects a read of a register
that
was not written, whatever is done with the value.

Such values are not a sign of a bug in the source. In

    %e = zext i64 %b to i128
    %m = mul i128 %a, %e

with bits 0-63 of %m in use the upper halves of the operands don't
matter.
They are passed to __multi3() in r2 and r4, which nobody sets: "R4
!read_ok".

Select ISD::UNDEF and ISD::POISON of i32 and i64 as 'rX = 0'. Both get

    [7 lines not shown]
DeltaFile
+64-0llvm/test/CodeGen/BPF/undef-is-zero.ll
+10-10llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2.ll
+10-10llvm/test/CodeGen/BPF/CORE/offset-reloc-fieldinfo-2-bpfeb.ll
+13-0llvm/lib/Target/BPF/BPFUnwind.cpp
+13-0llvm/lib/Target/BPF/BPFISelDAGToDAG.cpp
+1-1llvm/test/CodeGen/BPF/sockex2.ll
+111-216 files

LLVM/project a7cc2f2 — llvm/lib/Target/BPF BPFISelLowering.cpp, llvm/test/CodeGen/BPF unwind-select-arg.ll

[BPF] Set the call frame size of the blocks that a select expands to (#236250)

A select is expanded to a branch and two new blocks. When that happens
between ADJCALLSTACKDOWN and ADJCALLSTACKUP of a call that passes
arguments on the stack, the new blocks have to say how big the call
frame is at their entry. ARM, AVR, LoongArch, M68k, PowerPC, RISC-V do
that. BPF didn't:

  *** Bad machine code: Call frame size on entry does not match value
      computed from predecessor ***
  - function:    f
  - basic block: %bb.5 go
Call frame size on entry 0 does not match value computed from
predecessor 8

unwind-select-arg.ll of #235217 is the first test with such a call. It
fails with -verify-machineinstrs, which is the default in a build with
LLVM_ENABLE_EXPENSIVE_CHECKS. The invoke has nothing to do with it: a
call with six arguments, one of them a bool that is computed, fails the

    [7 lines not shown]
DeltaFile
+6-0llvm/lib/Target/BPF/BPFISelLowering.cpp
+1-1llvm/test/CodeGen/BPF/unwind-select-arg.ll
+7-12 files

LLVM/project 71d23a5 — utils/bazel/llvm-project-overlay/libc BUILD.bazel

[Bazel] Fixes b6a34fc (#236298)

This fixes b6a34fc9f1181df2cfb7629bed11ed19ab3e2734 (#235780).

Buildkite error link:
https://buildkite.com/llvm-project/upstream-bazel/builds?commit=b6a34fc9f1181df2cfb7629bed11ed19ab3e2734

Co-authored-by: Google Bazel Bot <google-bazel-bot at google.com>
DeltaFile
+1-0utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+1-01 files

LLVM/project 2d55e50 — mlir/lib/Dialect/Vector/Utils VectorUtils.cpp, mlir/test/Dialect/Linalg/vectorization insert-slice.mlir

[mlir][vector] Check the written dims when folding a write mask (#233244)

`isMaskTriviallyFoldable` compares dest dim `rankDiff + i` with index
`i`, so when the vector has fewer dims than the destination, it checks
dims against the wrong indices. `createWriteOrMaskedWrite` therefore did
not call it when given a permutation map, and kept the mask even when it
is all true. It now passes only the sizes and indices of the dims that
the map selects, and the mask shape, so the check runs for every map.

For example, vectorizing this with `vector_sizes [4, 4]`:

```mlir
%r = tensor.insert_slice %src into %dest[2, 6, 0] [4, 1, 4] [1, 1, 1]
    : tensor<4x4xi32> into tensor<8x8x8xi32>
```

gave a write masked with `vector.create_mask` of sizes 6 and 8 on a
`vector<4x4xi1>`, which is all true. The write is now unmasked.


    [9 lines not shown]
DeltaFile
+40-0mlir/test/Dialect/Linalg/vectorization/insert-slice.mlir
+15-10mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp
+55-102 files

LLVM/project b3835a4 — clang/test/SemaTemplate dependent-names.cpp

[clang][Sema] Add regression test for GH91131 (#236018)

The assersion failure, reported in
https://github.com/llvm/llvm-project/issues/91131, doesn't fire since
https://github.com/llvm/llvm-project/pull/92597 ; but that PR does not
include a test for this case.

Add a SemaTemplate regression test that verifies the invalid program
emits the expected diagnostics without crashing.

Note that a minimum patch to fix the original crash would be this:

https://github.com/iam28th/llvm-project/commit/9d498c7e984e7c3a4f38a76d079146c4b290861a

Fixes https://github.com/llvm/llvm-project/issues/91131
DeltaFile
+25-0clang/test/SemaTemplate/dependent-names.cpp
+25-01 files

LLVM/project 97e4a76 — llvm/include/llvm/SandboxIR Utils.h, llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes LoadStoreVec.cpp

[SandboxVec][LoadStoreVec] Propagate Metadata (#236274)

This patch implements metatdata porpagation to the vectorized
instructions. This is the expected behavior according to the
LoadStoreVectorizer.
DeltaFile
+11-0llvm/include/llvm/SandboxIR/Utils.h
+6-3llvm/test/Transforms/SandboxVectorizer/Passes/LoadStoreVec/propagate_metadata.ll
+6-2llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/LoadStoreVec.cpp
+23-53 files

LLVM/project bc8b4e0 — llvm/include/llvm/ADT BitmaskEnum.h, llvm/unittests/ADT BitmaskEnumTest.cpp

[ADT] Make BitmaskEnum compound assignment operators constexpr (#236003)

`~ | & ^ << >>` were already `constexpr` in `BitmaskEnum.h` while `|= &=
^= <<= >>=` were not.

Addresses build failures from
https://github.com/llvm/llvm-project/pull/220606

AI Disclosure:
I used Claude Opus 5 to help write the tests and implement the changes.
DeltaFile
+56-0llvm/unittests/ADT/BitmaskEnumTest.cpp
+13-13llvm/include/llvm/ADT/BitmaskEnum.h
+69-132 files

LLVM/project b6a34fc — libc/src/__support/math sinpif.h sinpif16.h, libc/test/src/math/smoke sinpif_test.cpp sinpif16_test.cpp

[libc][math] Fix `sinpif` and `sinpif16` error handling (#235780)

Follow up of https://github.com/llvm/llvm-project/pull/235296, tested
both functions with CORE-MATH's exhaustive checker in all four rounding
modes. With `CORE_MATH_SUPPORT_ERRNO` and `CORE_MATH_CHECK_INEXACT`
enabled.

- Set ERANGE for underflow in sinpif and sinpif16.
- Raise missing underflow exceptions in sinpif16.
- Return exact half-integer results in sinpif16 without raising
FE_INEXACT.
DeltaFile
+12-3libc/src/__support/math/sinpif16.h
+8-0libc/test/src/math/smoke/sinpif16_test.cpp
+5-0libc/test/src/math/smoke/sinpif_test.cpp
+4-0libc/src/__support/math/sinpif.h
+29-34 files

LLVM/project 982197f — llvm/lib/Target/AArch64 AArch64InstrInfo.cpp, llvm/test/CodeGen/AArch64 machine-outliner-sp-addsub-fixup.mir

[AArch64][MachineOutliner] Fix up SP add/sub immediates in outlined sequences (#191120)

Extend the AArch64 machine outliner to handle ADDXri/SUBXri instructions
that read SP when the outlined function saves LR on the stack, shifting
SP down by 16.

Previously only loads/stores with an SP base were adjusted. This patch
adds support for ADDXri and SUBXri with an SP source operand, correctly
re-encoding the adjusted offset and changing the opcode when the sign
flips. Unencodable adjusted offsets cause the candidate to be rejected
during the safety check, preventing illegal outlining.
DeltaFile
+637-0llvm/test/CodeGen/AArch64/machine-outliner-sp-addsub-fixup.mir
+98-21llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+735-212 files

LLVM/project c2ea444 — mlir/test/Conversion/MathToVCIX math-to-vcix.mlir, mlir/test/lib/Conversion/MathToVCIX TestMathToVCIXConversion.cpp

[mlir][VCIX] Check legalized type before use in math.tan test pattern (#236051)

`MathTanToVCIX` called `getElementType()` on the result of
`legalizeVectorType()` before checking whether legalization failed. For
types it can't legalize (scalars, multi-dimensional vectors, scalable
vectors with unsupported element types) that result is null, so the
pattern crashed instead of leaving the op alone like the cos, sin and
log patterns do.

This moves the null check above the first use and adds tests for a
scalar `math.tan` and a `vector<2x4xf32>` one.

Fixes #231844
DeltaFile
+20-0mlir/test/Conversion/MathToVCIX/math-to-vcix.mlir
+1-1mlir/test/lib/Conversion/MathToVCIX/TestMathToVCIXConversion.cpp
+21-12 files

LLVM/project 71ce178 — flang/lib/Optimizer/OpenACC/Support FIROpenACCTypeInterfaces.cpp, mlir/include/mlir/Dialect/OpenACC OpenACCUtils.h OpenACCTypeInterfaces.td

[mlir][acc] Cache symbol lookups in ACCImplicitData (#236237)

ACCImplicitData resolves the global behind every candidate variable with
SymbolTable::lookupNearestSymbolFrom, through isDeviceAccessibleValue,
isInDeviceMemoryValue and the FIR type-interface models. Without a table
each lookup scans every top-level op of the module, so on a module with
thousands of symbols this dominates the pass.

Let callers pass an optional SymbolTableCollection to
isDeviceAccessibleValue, isInDeviceMemoryValue, isValidValueUse and
OpenACCSupport::isValidValueUse, and add it as a trailing parameter of
the
PointerLikeType and MappableType isDeviceAccessible / isInDeviceMemory
interface methods. ACCImplicitData keeps one collection for the duration
of a run. Passing no collection keeps the previous behavior.

This can speedup the pass by 4.5x on a large TU with a lots of symbols.
DeltaFile
+64-50flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp
+29-14mlir/lib/Dialect/OpenACC/Utils/OpenACCUtils.cpp
+16-8mlir/include/mlir/Dialect/OpenACC/OpenACCTypeInterfaces.td
+19-4mlir/include/mlir/Dialect/OpenACC/Analysis/OpenACCSupport.h
+17-5mlir/lib/Dialect/OpenACC/Transforms/ACCImplicitData.cpp
+13-3mlir/include/mlir/Dialect/OpenACC/OpenACCUtils.h
+158-849 files not shown
+191-10115 files

LLVM/project 863a82f — llvm/include/llvm/Support SourceMgrDiagnosticVerifier.h, llvm/lib/Support SourceMgrDiagnosticVerifier.cpp

[Support][mlir] Allow custom prefixes in SourceMgrDiagnosticVerifier (#227568)

Allow callers to choose the directive prefixes (default: `expected`),
like Clang's `-verify=<prefixes>`, so that one test file can be shared
between RUN lines with different expectations.

A prefix now has to be at the start of the line or follow a character
other than `[[:alnum:]_-]`, so that `expected-error` is no longer found
inside e.g. `unexpected-error`. This also applies to MLIR.

Assisted-by: AI tooling
Pull-Request: https://github.com/llvm/llvm-project/pull/227568
DeltaFile
+30-12llvm/lib/Support/SourceMgrDiagnosticVerifier.cpp
+6-4llvm/include/llvm/Support/SourceMgrDiagnosticVerifier.h
+6-0mlir/test/IR/diagnostic-handler-verify-prefix.mlir
+3-1mlir/docs/Diagnostics.md
+45-174 files

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

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

`mulsu.h11` multiplies the sign-extended upper half word of rs1 by the
zero-extended upper half word of rs2. `maccsu.h11` adds the product to
rd.

Previously, (sra X, 16) and (srl X, 16) were selected as separate
srai/srli instructions feeding `mul` or `maccsu.h00`. Match them
directly
so both shifts are folded. As with `maccsu.h00`, the maccsu pattern
requires the multiply to have a single use.
DeltaFile
+107-0llvm/test/CodeGen/RISCV/rvp-scalar.ll
+6-0llvm/lib/Target/RISCV/RISCVInstrInfoP.td
+113-02 files

LLVM/project 26263f9 — llvm/unittests/Support CMakeLists.txt SourceMgrDiagnosticVerifierTest.cpp, llvm/utils/gn/secondary/llvm/unittests/Support BUILD.gn

[nspr] initial commit
DeltaFile
+108-0llvm/unittests/Support/SourceMgrDiagnosticVerifierTest.cpp
+13-0mlir/test/mlir-opt/verify-diagnostics-highlight.mlir
+1-0llvm/utils/gn/secondary/llvm/unittests/Support/BUILD.gn
+1-0llvm/unittests/Support/CMakeLists.txt
+123-04 files

LLVM/project 8bffd95 — llvm/lib/Support SourceMgrDiagnosticVerifier.cpp, mlir/test/mlir-opt expected-unknown-loc-unmatched.mlir

[nspr] initial commit
DeltaFile
+4-2mlir/test/mlir-opt/expected-unknown-loc-unmatched.mlir
+1-0llvm/lib/Support/SourceMgrDiagnosticVerifier.cpp
+5-22 files

LLVM/project 6ad977f — flang/lib/Semantics check-declarations.cpp, flang/test/Semantics elemental04.f90

[flang] Evaluate InElemental() at most once per scope (#236235)

`CheckHelper::InElemental()` called `IsElementalProcedure()` on every
use. That characterizes the whole enclosing procedure, including every
dummy argument and the folding of its shape. `CheckObjectEntity()` calls
`InElemental()` for each object entity, so declaration checking was
quadratic in the number of dummy arguments: issue 236223 has the
reproducer and the profile.

This caches the result for the innermost procedure symbol and resets it
whenever `CheckHelper::Check(const Scope &)` changes that symbol.
Diagnostics are unchanged: `IsElementalProcedure()` is still the only
source of the answer, just evaluated once per scope instead of once per
entity.

With the issue's generator, `-fsyntax-only` is now linear in the number
of dummies: at 800 explicit-shape dummies it goes from 24.8 G to 0.44 G
instructions (about 56x). `check-flang` passes.


    [2 lines not shown]
DeltaFile
+25-0flang/test/Semantics/elemental04.f90
+14-1flang/lib/Semantics/check-declarations.cpp
+39-12 files

LLVM/project 0de3f4c — llvm/tools/llvm-mc Disassembler.cpp llvm-mc.cpp

[nspr] initial commit
DeltaFile
+13-11llvm/tools/llvm-mc/llvm-mc.cpp
+2-1llvm/tools/llvm-mc/Disassembler.cpp
+15-122 files

LLVM/project 414a601 — llvm/lib/Target/AArch64 AArch64StackTagging.cpp, llvm/lib/Transforms/Utils MemoryTaggingSupport.cpp

[AArch64][MTE] Tag dynamic allocas in AArch64StackTagging

Instrument dynamic allocas in the memtag-stack pass, more or less
following the the way AddressSanitizer does: by instrumenting
stackrestore to un(poison/tag) allocas when free'd.

- Dynamic allocas are given 16-byte alignment and padded to 16-bytes.
- At lifetime.start (or at the alloca if no lifetimes), the dynamic
alloca is tagged.
- The most recently executed dynamic alloca is tracked in an extra
per-func static alloca. The address of this static alloca is used
as the bottom (highest address) of the dynamic alloca section of
the frame, while the value stored there is treated as the current
top (lowest address) of the frame.
- At llvm.stackrestores, memory is untagged from the restored sp
to the last executed dynamic alloca.
- At function returns, memory is untagged from the last executed
dynamic alloca to the bottom of the (dynamic alloca section of) the
frame.

    [2 lines not shown]
DeltaFile
+779-0llvm/test/CodeGen/AArch64/stack-tagging-dynamic-alloca.ll
+168-8llvm/lib/Target/AArch64/AArch64StackTagging.cpp
+100-0llvm/test/CodeGen/AArch64/stack-tagging-dynamic-alloca-history.ll
+17-7llvm/lib/Transforms/Utils/MemoryTaggingSupport.cpp
+18-0llvm/test/CodeGen/AArch64/stack-tagging-dbg-declare-tag-offset.ll
+7-5llvm/test/CodeGen/AArch64/stack-tagging.ll
+1,089-202 files not shown
+1,097-228 files

LLVM/project d83d4db — llvm/lib/Target/RISCV RISCVInstrInfoXqci.td RISCVInstrInfoY.td, llvm/test/MC/RISCV/rvy rvyc-valid-addi.s

[nspr] initial commit
DeltaFile
+82-0llvm/test/MC/RISCV/rvy/rvyc-valid-addi.s
+8-8llvm/lib/Target/RISCV/RISCVInstrInfoC.td
+7-0llvm/lib/Target/RISCV/RISCVInstrInfoY.td
+2-0llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td
+99-84 files

LLVM/project bf2403d — clang/lib/Sema SemaType.cpp, clang/test/CodeGenHLSL/builtins BoolSwizzles.hlsl

Merge branch 'main' into users/rampitec/constant-fold-sqrt
DeltaFile
+105-76libcxx/utils/ci/lnt/detect-changepoints
+49-0clang/test/SemaHLSL/Semantics/startinstancelocation.vs.hlsl
+38-8clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl
+15-30clang/test/CodeGenHLSL/builtins/BoolSwizzles.hlsl
+41-0llvm/test/CodeGen/SPIRV/semantics/start-instance-location.vs.ll
+27-2clang/lib/Sema/SemaType.cpp
+275-11632 files not shown
+567-15038 files

LLVM/project 130c3b4 — llvm/test/Transforms/SandboxVectorizer/Passes/LoadStoreVec propagate_metadata.ll

[SandboxVec] Precommit test (NFC) (#236208)

This is for a follow-up patch that fixes the propagation of metadata.
DeltaFile
+28-0llvm/test/Transforms/SandboxVectorizer/Passes/LoadStoreVec/propagate_metadata.ll
+28-01 files

LLVM/project f872489 — llvm/lib/Target/AArch64 AArch64StackTagging.cpp, llvm/lib/Transforms/Utils MemoryTaggingSupport.cpp

[AArch64][MTE] Tag dynamic allocas in AArch64StackTagging

Instrument dynamic allocas in the memtag-stack pass, more or less
following the the way AddressSanitizer does: by instrumenting
stackrestore to un(poison/tag) allocas when free'd.

- Dynamic allocas are given 16-byte alignment and padded to 16-bytes.
- At lifetime.start (or at the alloca if no lifetimes), the dynamic
alloca is tagged.
- The most recently executed dynamic alloca is tracked in an extra
per-func static alloca. The address of this static alloca is used
as the bottom (highest address) of the dynamic alloca section of
the frame, while the value stored there is treated as the current
top (lowest address) of the frame.
- At llvm.stackrestores, memory is untagged from the restored sp
to the last executed dynamic alloca.
- At function returns, memory is untagged from the last executed
dynamic alloca to the bottom of the (dynamic alloca section of) the
frame.

    [2 lines not shown]
DeltaFile
+779-0llvm/test/CodeGen/AArch64/stack-tagging-dynamic-alloca.ll
+170-8llvm/lib/Target/AArch64/AArch64StackTagging.cpp
+100-0llvm/test/CodeGen/AArch64/stack-tagging-dynamic-alloca-history.ll
+17-7llvm/lib/Transforms/Utils/MemoryTaggingSupport.cpp
+18-0llvm/test/CodeGen/AArch64/stack-tagging-dbg-declare-tag-offset.ll
+7-5llvm/test/CodeGen/AArch64/stack-tagging.ll
+1,091-202 files not shown
+1,099-228 files

LLVM/project 96b43d4 — llvm/lib/Target/AMDGPU GCNSubtarget.cpp

Do not assert IssueCycles > 0

Change-Id: I60e89a537117ab49d5bf8aafe12f7fdcc2d7e383
DeltaFile
+1-2llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
+1-21 files

LLVM/project fe4aa38 — llvm/lib/Target/RISCV RISCVRegisterInfo.td, llvm/test/MC/RISCV/rvy rvyc-valid-load-store-64.s rvy-invalid-load-store.s

[nspr] initial commit
DeltaFile
+465-0llvm/test/MC/RISCV/rvy/rvyc-valid-load-store.s
+178-0llvm/test/MC/RISCV/rvy/rvyc-invalid-load-store.s
+175-0llvm/test/MC/RISCV/rvy/rvy-valid-load-store.s
+101-0llvm/test/MC/RISCV/rvy/rvy-invalid-load-store.s
+65-33llvm/lib/Target/RISCV/RISCVRegisterInfo.td
+86-0llvm/test/MC/RISCV/rvy/rvyc-valid-load-store-64.s
+1,070-3313 files not shown
+1,305-5519 files

LLVM/project 595e569 — libcxx/utils/ci/lnt detect-changepoints

[libc++] Make detect-changepoints much faster (#236245)

The permutation test used to find changepoints was the bottleneck of the
LNT refinement job. This patch makes the test much cheaper in two ways
without changing the algorithm:
- Compute the best split of a segment only once, when the segment is
  created.
- Scoring every split of a segment only needs the sums of distances
  within the first t points and between the first t points and the whole
  segment. The latter doesn't depend on the order of the points, so it is
  computed once per segment.

This was measured to be roughly 10x faster as the previous algorithm,
and gives the same results.

Assisted by Claude
DeltaFile
+105-76libcxx/utils/ci/lnt/detect-changepoints
+105-761 files