LLVM/project e5fc6fb — llvm/lib/Transforms/Vectorize LoopVectorize.cpp, llvm/test/Transforms/LoopVectorize outer-loop-scev-predicates.ll

[LV] Generate SCEV runtime checks for outer loops. (#237780)

Update GenerateRTChecks::create to generate SCEV predicate checks for
outer loops as well. Memory checks are not supported yet, but we must
respect the SCEV predicates added to PSE.
DeltaFile
+104-0llvm/test/Transforms/LoopVectorize/outer-loop-scev-predicates.ll
+18-12llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+122-122 files

LLVM/project 70a35c3 — llvm/test/Transforms/LoopVectorize/AArch64 dead-vector-loop-trip-count.ll

[LV] Add tests with trip counts known less than VF x UF. (#237777)

Add tests where trip counts are known to be less than VF x UF, but we
still pick a VF that exceeds the trip count.
DeltaFile
+183-0llvm/test/Transforms/LoopVectorize/AArch64/dead-vector-loop-trip-count.ll
+183-01 files

LLVM/project bb762db — flang/lib/Lower/Support ReductionProcessor.cpp, llvm/lib/Target/Sparc DelaySlotFiller.cpp

Rebase, improvements

Created using spr 1.3.7
DeltaFile
+405-387flang/lib/Lower/Support/ReductionProcessor.cpp
+379-392llvm/lib/Target/Sparc/DelaySlotFiller.cpp
+549-179llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+462-240llvm/test/CodeGen/X86/sshl_sat_vec.ll
+346-163llvm/test/CodeGen/X86/ushl_sat_vec.ll
+437-0llvm/test/CodeGen/X86/sshl_sat_vec-256.ll
+2,578-1,361433 files not shown
+15,721-3,994439 files

LLVM/project 15204b5 — llvm/lib/Transforms/Scalar GVN.cpp, llvm/test/Transforms/GVN invariant.group.ll metadata.ll

[GVN] Preserve per-bit `poison` and provenance when forwarding a load
DeltaFile
+59-52llvm/test/Transforms/GVN/load-poison.ll
+102-1llvm/lib/Transforms/Scalar/GVN.cpp
+26-27llvm/test/Transforms/GVN/PRE/rle.ll
+7-7llvm/test/Transforms/GVN/rle-coerced-noalias.ll
+6-4llvm/test/Transforms/GVN/metadata.ll
+3-2llvm/test/Transforms/GVN/invariant.group.ll
+203-931 files not shown
+206-957 files

LLVM/project 4a7d2ab — llvm/test/Transforms/GVN load-poison.ll

[GVN] Pre-commit tests for per-bit `poison` and provenance when forwarding a load
DeltaFile
+424-0llvm/test/Transforms/GVN/load-poison.ll
+424-01 files

LLVM/project 1f2b99e — llvm/test/Transforms/GVN bitextract-bitinsert.ll

[GVN] Pre-commit tests for equivalent `bitextract` and `bitinsert`
DeltaFile
+104-0llvm/test/Transforms/GVN/bitextract-bitinsert.ll
+104-01 files

LLVM/project 3e0be93 — llvm/lib/Transforms/Scalar GVN.cpp, llvm/test/Transforms/GVN bitextract-bitinsert.ll

[GVN] Fold equivalent `bitextract` and `bitinsert`
DeltaFile
+2-4llvm/test/Transforms/GVN/bitextract-bitinsert.ll
+2-0llvm/lib/Transforms/Scalar/GVN.cpp
+4-42 files

LLVM/project 01d0ea9 — llvm/lib/Transforms/Utils VNCoercion.cpp, llvm/test/Transforms/GVN pr14166.ll ptr-vector-coercion.ll

[GVN] Keep `poison` per lane when forwarding vectors
DeltaFile
+48-63llvm/test/Transforms/GVN/pr63059.ll
+31-50llvm/test/Transforms/GVN/vector-poison.ll
+12-6llvm/lib/Transforms/Utils/VNCoercion.cpp
+4-9llvm/test/Transforms/GVN/ptr-vector-coercion.ll
+0-1llvm/test/Transforms/GVN/pr14166.ll
+95-1295 files

LLVM/project 5c7a463 — llvm/test/Transforms/SLPVectorizer/X86 extracted-subfields-bswap.ll

[SLP][NFC]Add extra test for bswap for extracted fields, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/237778
DeltaFile
+60-1llvm/test/Transforms/SLPVectorizer/X86/extracted-subfields-bswap.ll
+60-11 files

LLVM/project eb0f3cb — clang/lib/Driver/ToolChains CommonArgs.cpp, clang/test/Driver hip-offload-compress-zstd.hip

[Clang] Support `--offload-compress` for offload binaries (#227765)

Summary:
https://github.com/llvm/llvm-project/pull/222774 added support for
compressing binaries. This PR does the minimal work required to hook
this up to the existing handling. The end goal is to be able to replace
the bundler in HIP.

The one change is moving the `--verbose` handling from the shared helper
so this can be unified.
DeltaFile
+41-5llvm/tools/llvm-offload-binary/llvm-offload-binary.cpp
+29-1clang/test/Driver/hip-offload-compress-zstd.hip
+25-0clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-compressed.c
+13-4clang/lib/Driver/ToolChains/CommonArgs.cpp
+14-0llvm/test/tools/llvm-offload-binary/compress.test
+13-0llvm/test/tools/llvm-offload-binary/compress-level-zlib.test
+135-104 files not shown
+149-1310 files

LLVM/project 3cd9e27 — llvm/lib/Transforms/Utils IRNormalizer.cpp, llvm/test/Transforms/IRNormalizer reordering.ll memory-ordering.ll

[IRNormalizer] Keep memory accesses in program order (#237128)

IRNormalizer can move a load past a store to the same address, changing
the value it reads. Include memory-accessing instructions in the initial
top-down traversal so memory accesses retain their relative order within
each basic block.

Alive2 (IRNormalizer load/store ordering):
Before (miscompiles 42 -> 7): https://alive2.llvm.org/ce/z/6VYPd5
After (verifies): https://alive2.llvm.org/ce/z/pY6t9g

Fixes #236128.

Assisted-by: Claude Code
DeltaFile
+117-0llvm/test/Transforms/IRNormalizer/memory-ordering.ll
+14-12llvm/lib/Transforms/Utils/IRNormalizer.cpp
+7-5llvm/test/Transforms/IRNormalizer/reordering.ll
+138-173 files

LLVM/project 7b9fccb — llvm/lib/Target/AMDGPU AMDGPUIGroupLP.cpp, llvm/test/CodeGen/AMDGPU iglp-cache-serialization.mir llvm.amdgcn.iglp.opt.ll

[AMDGPU] IGLP: introduce instruction cache and fix static variables

Replace global / class-level static variables with a small cache that is
directly attached to the iglp pseudo instruction.

This has been suggested in
https://github.com/llvm/llvm-project/pull/137549#discussion_r3076970527
and the following comment in that thread.

Note that this patch is intended to be NFC and doesn't fix broader
issues with the analysis re-use.

Some tests have been stolen from
https://github.com/llvm/llvm-project/pull/232728.

Claude assisted with this patch.
DeltaFile
+2,960-0llvm/test/CodeGen/AMDGPU/llvm.amdgcn.iglp.opt.exp.two-regions.mir
+1,605-0llvm/test/CodeGen/AMDGPU/llvm.amdgcn.iglp.opt.single.multi-func.ll
+120-51llvm/lib/Target/AMDGPU/AMDGPUIGroupLP.cpp
+54-0llvm/test/CodeGen/AMDGPU/iglp-cache-creation.mir
+50-0llvm/test/CodeGen/AMDGPU/llvm.amdgcn.iglp.opt.ll
+40-0llvm/test/CodeGen/AMDGPU/iglp-cache-serialization.mir
+4,829-513 files not shown
+4,834-549 files

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

Rebase, improvements

Created using spr 1.3.7
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,8656,530 files not shown
+545,020-383,8136,536 files

LLVM/project d02b4b8 — offload/plugins-nextgen/amdgpu/src rtl.cpp

use sizeof
DeltaFile
+2-1offload/plugins-nextgen/amdgpu/src/rtl.cpp
+2-11 files

LLVM/project 7c3ae84 — llvm/lib/CodeGen StackColoring.cpp, llvm/test/CodeGen/AArch64 stack-coloring-alignment.ll

[StackColoring] Update IR when merging stack slots of differing alignment (#237412)
DeltaFile
+33-0llvm/test/CodeGen/AArch64/stack-coloring-alignment.ll
+4-0llvm/lib/CodeGen/StackColoring.cpp
+37-02 files

LLVM/project 15b43f2 — clang/lib/StaticAnalyzer/Checkers Iterator.cpp IteratorModeling.cpp, clang/test/Analysis iterator-concrete-offset.cpp

[analyzer] Reject non-symbolic iterator offsets in alpha iterator checkers (#232622)

`evalBinOp()` can return a concrete value for a constrained iterator
offset. Storing `getAsSymbol()` from that result leaves a null offset in
the model, which is later dereferenced.

Return failure for non-symbolic results and let `++`/`--` fall back to a
fresh offset, preserving the container and the old position for postfix
results.
DeltaFile
+73-0clang/test/Analysis/iterator-concrete-offset.cpp
+32-22clang/lib/StaticAnalyzer/Checkers/IteratorModeling.cpp
+11-6clang/lib/StaticAnalyzer/Checkers/Iterator.cpp
+116-283 files

LLVM/project 7856fb6 — llvm/docs AMDGPUUsage.rst, llvm/test/CodeGen/AMDGPU amdgcn.bitcast.512bit.ll amdgcn.bitcast.1024bit.ll

Rebase

Created using spr 1.3.7
DeltaFile
+88,705-91,244llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+25,383-26,405llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.512bit.ll
+22,584-0llvm/test/CodeGen/NVPTX/load-sm90.ll
+0-22,228llvm/docs/AMDGPUUsage.rst
+21,644-0llvm/test/CodeGen/NVPTX/store-sm90.ll
+20,068-0llvm/test/CodeGen/NVPTX/load-sm60.ll
+178,384-139,8777,379 files not shown
+735,440-434,3727,385 files

LLVM/project 4fd1825 — offload/plugins-nextgen/amdgpu/src rtl.cpp

constexpr mask
DeltaFile
+3-2offload/plugins-nextgen/amdgpu/src/rtl.cpp
+3-21 files

LLVM/project 8c2b4bc — llvm/test/CodeGen/AMDGPU frem.ll amdgcn.bitcast.512bit.ll, llvm/test/CodeGen/NVPTX load-sm90.ll atomicrmw-elementwise-sm70.ll

Rebase, address comments

Created using spr 1.3.7
DeltaFile
+91,369-93,724llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+26,679-27,700llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.512bit.ll
+31,642-15,264llvm/test/CodeGen/AMDGPU/frem.ll
+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
+235,432-136,68815,375 files not shown
+1,487,304-737,32815,381 files

LLVM/project 384a71b — llvm/lib/Analysis Loads.cpp, llvm/test/Transforms/LoopVectorize load-deref-pred-align.ll

[Loads] Require step to be a multiple of alignment in isDereferenceable. (#237759)

Add missing check ensuring Step is also a multiple of the alignemnt in
isDereferenceableAndAlignedInLoop. Otherwise the loads in the loop may
not have the required alignment in all iterations.
DeltaFile
+80-0llvm/test/Transforms/LoopVectorize/load-deref-pred-align.ll
+4-3llvm/lib/Analysis/Loads.cpp
+84-32 files

LLVM/project 09a8f4e — compiler-rt/lib/asan asan_internal.h asan_interceptors.h, compiler-rt/lib/sanitizer_common sanitizer_platform_limits_posix.cpp sanitizer_mac.cpp

[compiler-rt][Darwin] Split SANITIZER_IOS into SANITIZER_IOSLIKE and SANITIZER_IOS

SANITIZER_IOS is now TARGET_OS_IOS (iOS only), while the previous
meaning (TARGET_OS_IPHONE, iOS and iOS-like) is renamed SANITIZER_IOSLIKE.

Assisted-By: Claude

rdar://191534752
DeltaFile
+17-3compiler-rt/lib/sanitizer_common/sanitizer_platform.h
+9-9compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
+2-2compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp
+2-2compiler-rt/lib/asan/asan_mapping.h
+1-1compiler-rt/lib/asan/asan_internal.h
+1-1compiler-rt/lib/asan/asan_interceptors.h
+32-1810 files not shown
+42-2816 files

LLVM/project 9587093 — clang/lib/Sema SemaOpenMP.cpp, clang/test/OpenMP reverse_messages.cpp for_loop_messages.cpp

[Clang][OpenMP] Fix crashes on a `braced-init-list` in the `init` or increment of a loop (#233248)

Fixes #202562

The loop analysis kept the braced-init-list of `int i = {0}` (and of `i
+= {1}`) as the bound or step as written. The loop transformations copy
the trip count through a `TreeTransform`, which rebuilds a list without
a type, so `{0} - 1` fails to build and the transform asserts. Pointer
and aggregate-iterator counters hit a related assert even under plain
`omp for`, and the IRBuilder path crashed on a braced step.

The analysis now never keeps a bare list: a list wrapping one expression
becomes that expression, an empty or class-type list becomes the
`T{...}` node Sema builds for a functional cast. The IRBuilder loop path
uses the same helper for its step.

Assisted-by : LLM tools, reviewed and tested by me.
DeltaFile
+82-0clang/test/OpenMP/unroll_messages.cpp
+36-6clang/lib/Sema/SemaOpenMP.cpp
+32-0clang/test/OpenMP/unroll_codegen_braced_init.cpp
+16-0clang/test/OpenMP/irbuilder_braced_init.cpp
+15-0clang/test/OpenMP/for_loop_messages.cpp
+8-0clang/test/OpenMP/reverse_messages.cpp
+189-61 files not shown
+191-67 files

LLVM/project e993cb6 — compiler-rt/lib/copyprof copyprof.cpp CMakeLists.txt, compiler-rt/lib/copyprof/tests copyprof_state_test.cpp

[CopyProf] Intercept new/delete and track per-object cost.

This intercepts the C++ `new` and `delete` operators, so that all
heap memory owned by a copy is tracked.

Using per-object state tracking, reports now tell the user how much
accumulated memory a copy is worth and whether it allocated.
This is useful for filtering of reports.

RFC: https://discourse.llvm.org/t/rfc-copysanitizer-csan-detecting-unneccessary-object-copies-at-runtime/91038
DeltaFile
+139-0compiler-rt/lib/copyprof/copyprof_new_delete.cpp
+102-0compiler-rt/lib/copyprof/tests/copyprof_state_test.cpp
+70-0compiler-rt/lib/copyprof/copyprof_per_object_state.cpp
+44-0compiler-rt/lib/copyprof/copyprof_per_object_state.h
+23-0compiler-rt/lib/copyprof/CMakeLists.txt
+17-5compiler-rt/lib/copyprof/copyprof.cpp
+395-57 files not shown
+440-1813 files

LLVM/project 049d35a — compiler-rt/lib/copyprof copyprof_internal.h copyprof_interceptors.cpp, compiler-rt/lib/copyprof/tests copyprof_state_test.cpp

[CopyProf] Intercept C heap functions.

A copy that owns heap memory is only unnecessary if that memory is not
modified either. This intercepts the libc heap functions and routes them
to the CopyProf allocator, which marks memory allocated while copying as
copy, and checks the shadow memory of memory freed during destruction.

Memory allocated inside a d'tor is marked as copy as well, so that
freeing temporaries does not suppress reports.

Now that `malloc` is intercepted, `strndup` and `realpath` are
intercepted as well.

RFC: https://discourse.llvm.org/t/rfc-copysanitizer-csan-detecting-unneccessary-object-copies-at-runtime/91038
DeltaFile
+197-0compiler-rt/lib/copyprof/tests/copyprof_state_test.cpp
+182-0compiler-rt/lib/copyprof/copyprof_malloc_linux.cpp
+15-4compiler-rt/lib/copyprof/copyprof_allocator.cpp
+10-8compiler-rt/lib/copyprof/copyprof_state.h
+2-7compiler-rt/lib/copyprof/copyprof_interceptors.cpp
+4-0compiler-rt/lib/copyprof/copyprof_internal.h
+410-192 files not shown
+415-198 files

LLVM/project 4ca8900 — compiler-rt/lib/copyprof copyprof.cpp CMakeLists.txt, compiler-rt/lib/copyprof/tests CMakeLists.txt copyprof_allocator_test.cpp

[CopyProf] Add standalone allocator.

Detecting modifications of heap memory owned by a copy requires hooking
all (de)allocations and knowing allocation sizes. This adds a CopyProf
specific allocator based on the sanitizer_common allocator.

It provides surrogates for the libc heap functions, which are hooked up
to interceptors in a subsequent patch.

RFC: https://discourse.llvm.org/t/rfc-copysanitizer-csan-detecting-unneccessary-object-copies-at-runtime/91038
Previous PR: #232851
DeltaFile
+312-0compiler-rt/lib/copyprof/copyprof_allocator.cpp
+227-0compiler-rt/lib/copyprof/tests/copyprof_allocator_test.cpp
+45-0compiler-rt/lib/copyprof/copyprof_allocator.h
+2-0compiler-rt/lib/copyprof/copyprof.cpp
+2-0compiler-rt/lib/copyprof/CMakeLists.txt
+1-0compiler-rt/lib/copyprof/tests/CMakeLists.txt
+589-06 files

LLVM/project 3f46fbf — compiler-rt/lib/copyprof copyprof_preinit.cpp copyprof_interceptors_memintrinsics.cpp, compiler-rt/lib/copyprof/tests copyprof_state_test.cpp copyprof_interceptors_test.cpp

[CopyProf] Add libc interceptors.

A copy is reported as unnecessary if neither the object nor any memory
it owns is modified before it is destroyed. So far, writes by
uninstrumented code, most importantly library functions (e.g. `memcpy`,
`memset`, etc.), are not accounted for, which leads to false positives.
Interceptors make these writes visible.

Additionally, objects constructed inside a d'tor are now marked as copy,
so that destroying temporaries (e.g. a string built for a log message)
does not suppress reports.

Note that `strndup` and `realpath` are not intercepted yet, as their
interceptors allocate memory via the `malloc` interceptor, which is only
added in a subsequent patch.

RFC:
https://discourse.llvm.org/t/rfc-copysanitizer-csan-detecting-unneccessary-object-copies-at-runtime/91038
Previous PR: #225905
DeltaFile
+121-0compiler-rt/lib/copyprof/tests/copyprof_interceptors_test.cpp
+80-25compiler-rt/lib/copyprof/tests/copyprof_state_test.cpp
+90-0compiler-rt/lib/copyprof/copyprof_interceptors.cpp
+64-0compiler-rt/lib/copyprof/copyprof_interceptors.h
+27-0compiler-rt/lib/copyprof/copyprof_interceptors_memintrinsics.cpp
+23-0compiler-rt/lib/copyprof/copyprof_preinit.cpp
+405-256 files not shown
+461-3312 files

LLVM/project 426c04c — compiler-rt/lib/copyprof/tests copyprof_state_test.cpp

[CopyProf][NFC] Add argument comments in state test.

Split out of #232851 as requested in review.
DeltaFile
+3-3compiler-rt/lib/copyprof/tests/copyprof_state_test.cpp
+3-31 files

LLVM/project 9c1e664 — libcxx/docs/DesignDocs RCU.md, libcxx/src/experimental rcu.cpp

[libc++] Implement P2545R4 Read-Copy Update (RCU) (#175451)
DeltaFile
+453-0libcxx/docs/DesignDocs/RCU.md
+329-0libcxx/test/std/thread/saferecl/saferecl.rcu/saferecl.rcu.base/retire.pass.cpp
+313-0libcxx/test/std/thread/saferecl/saferecl.rcu/saferecl.rcu.domain/rcu_retire.pass.cpp
+258-0libcxx/src/experimental/rcu.cpp
+233-0libcxx/test/std/thread/saferecl/saferecl.rcu/saferecl.rcu.domain/rcu_barrier.pass.cpp
+191-0libcxx/test/benchmarks/thread/saferecl.rcu/reader_writer.bench.cpp
+1,777-045 files not shown
+3,310-2151 files

LLVM/project 0c252ba — llvm/lib/ExecutionEngine/Orc ReOptimizeLayer.cpp

[ORC] Match const void *Tag signature in orc_rt_lite_reoptimize_helper

SelfExecutorProcessControl::jitDispatchViaWrapperFunctionManager takes a const void *FnTag second parameter; using void *Tag in orc_rt_lite_reoptimize_helper's JITDispatch function pointer trips -fsanitize=cfi-icall.

This is needed to remove the `LIT_FILTER_OUT="ExecutionEngine/"` workaround in https://github.com/llvm/llvm-zorg/blob/d6d19aa00e80a00ee06119d173d1979dbeed1ab2/zorg/buildbot/builders/sanitizers/buildbot_functions.sh#L665 on https://lab.llvm.org/buildbot/#/builders/sanitizer-x86_64-linux-bootstrap-cfi and https://lab.llvm.org/buildbot/#/builders/sanitizer-aarch64-linux-bootstrap-cfi.

Assisted-by: Gemini
Pull-request: https://github.com/llvm/llvm-project/pull/237757
DeltaFile
+2-2llvm/lib/ExecutionEngine/Orc/ReOptimizeLayer.cpp
+2-21 files

LLVM/project 142ee9c — llvm/utils/sanitizers ubsan_ignorelist.txt

[cfi] Ignore cfi-icall on LLVMContext::yield and JIT calls

LLVMContextSetYieldCallback casts a C callback with a mismatched pointer type, and ExecutionEngine / JIT tools invoke runtime-generated JIT code outside the link-time CFI jump table.

This is needed to remove the `LIT_FILTER_OUT="ExecutionEngine/"` workaround in https://github.com/llvm/llvm-zorg/blob/d6d19aa00e80a00ee06119d173d1979dbeed1ab2/zorg/buildbot/builders/sanitizers/buildbot_functions.sh#L665 on https://lab.llvm.org/buildbot/#/builders/sanitizer-x86_64-linux-bootstrap-cfi and https://lab.llvm.org/buildbot/#/builders/sanitizer-aarch64-linux-bootstrap-cfi.

Assisted-by: Gemini
Pull-request: https://github.com/llvm/llvm-project/pull/237755
DeltaFile
+10-0llvm/utils/sanitizers/ubsan_ignorelist.txt
+10-01 files