LLVM/project 2151e45 — llvm/lib/Target/SPIRV SPIRVInstructionSelector.cpp, llvm/test/CodeGen/SPIRV fence.ll

[SPIR-V] Do not add ImageMemory semantics to fence in the kernel environment (#240448)

Image accesses are opaque builtin calls rather than LLVM memory
operations, and OpenCL requests image ordering explicitly via
CLK_IMAGE_MEM_FENCE.

Lower the LLVM `fence` instruction with `WorkgroupMemory |
CrossWorkgroupMemory` semantics in the kernel environment. The shader
environment and the OpenCL fence builtins are unchanged.

Follow up to #223023

AI-assisted: Claude Opus 5.5 (commercial SaaS)
DeltaFile
+4-4llvm/test/CodeGen/SPIRV/fence.ll
+3-2llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
+7-62 files

LLVM/project 713b671 — llvm/test/CodeGen/WinEH wineh-setjmp.ll, llvm/test/CodeGen/X86/AMX amx-low-intrinsics-no-amx-bitcast.ll

[X86] Enable IRBuilder GEP canonicalization (#241921)
DeltaFile
+21-24llvm/test/Transforms/InterleavedAccess/X86/interleavedLoad.ll
+21-24llvm/test/Transforms/InterleavedAccess/X86/interleavedLoad-inseltpoison.ll
+12-15llvm/test/Transforms/InterleavedAccess/X86/interleaved-accesses-64bits-avx.ll
+12-15llvm/test/Transforms/InterleavedAccess/X86/interleaved-accesses-64bits-avx-inseltpoison.ll
+7-7llvm/test/CodeGen/WinEH/wineh-setjmp.ll
+4-4llvm/test/CodeGen/X86/AMX/amx-low-intrinsics-no-amx-bitcast.ll
+77-895 files not shown
+82-9911 files

LLVM/project bbed4d9 — libc/src/__support/OSUtil/linux/syscall_wrappers CMakeLists.txt truncate.h, libc/src/unistd/linux CMakeLists.txt truncate.cpp

[libc] Use a syscall wrapper for truncate
DeltaFile
+44-0libc/src/__support/OSUtil/linux/syscall_wrappers/truncate.h
+10-18libc/src/unistd/linux/truncate.cpp
+18-2utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+14-0libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt
+5-5libc/src/unistd/linux/CMakeLists.txt
+91-255 files

LLVM/project 43cb6cd — llvm/lib/Target/AArch64 AArch64TargetTransformInfo.cpp, llvm/lib/Transforms/Vectorize SLPVectorizer.cpp

[𝘀𝗽𝗿] initial version

Created using spr 2.0.0-beta.1
DeltaFile
+18-0llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+9-5llvm/test/Transforms/SLPVectorizer/AArch64/spillcost-hoisted-external-user.ll
+1-2llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+28-73 files

LLVM/project 5fdc62c — libc/src/__support/OSUtil/linux/syscall_wrappers CMakeLists.txt geteuid.h, libc/src/unistd/linux CMakeLists.txt geteuid.cpp

[libc] Use a syscall wrapper for geteuid (#241769)

This PR move geteuid behind the centralized syscall wrappers, following
libc/docs/dev/syscall_wrapper_refactor.md.
DeltaFile
+31-0libc/src/__support/OSUtil/linux/syscall_wrappers/geteuid.h
+16-2utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+8-7libc/src/unistd/linux/geteuid.cpp
+12-0libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt
+4-4libc/src/unistd/linux/CMakeLists.txt
+71-135 files

LLVM/project 40cecc9 — libc/src/__support/OSUtil/linux/syscall_wrappers CMakeLists.txt fchown.h, libc/src/unistd/linux CMakeLists.txt fchown.cpp

[libc] Use a syscall wrapper for fchown (#241768)

This PR move fchown behind the centralized syscall wrappers, following
libc/docs/dev/syscall_wrapper_refactor.md.
DeltaFile
+36-0utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+35-0libc/src/__support/OSUtil/linux/syscall_wrappers/fchown.h
+10-9libc/src/unistd/linux/fchown.cpp
+14-0libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt
+5-3libc/src/unistd/linux/CMakeLists.txt
+100-125 files

LLVM/project 29cc9e3 — libc/src/__support/OSUtil/linux/syscall_wrappers CMakeLists.txt chown.h, libc/src/unistd/linux CMakeLists.txt chown.cpp

[libc] Use a syscall wrapper for chown (#241767)

This PR move chown behind the centralized syscall wrappers, following
libc/docs/dev/syscall_wrapper_refactor.md.
DeltaFile
+42-0libc/src/__support/OSUtil/linux/syscall_wrappers/chown.h
+37-0utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+10-16libc/src/unistd/linux/chown.cpp
+15-0libc/src/__support/OSUtil/linux/syscall_wrappers/CMakeLists.txt
+5-4libc/src/unistd/linux/CMakeLists.txt
+109-205 files

LLVM/project 94e06f8 — mlir/test/lib/Dialect/Test TestAttributesSyntax.cpp TestAttributesCore.cpp, mlir/tools/mlir-tblgen AttrOrTypeDefGen.cpp

[mlir][ODS] Add partitions for attributes and types

Allow attributes and types to be grouped into named partitions, like
ops. Each def can set `partition` to a `Partition` record. Passing
`-attrdefs-partition=<name>` or `-typedefs-partition=<name>` to the
attrdef/typedef decls and defs generators then emits only the defs of
that partition. A large dialect can thus split its attributes and types
over several compilation units with narrower headers.

The implementation mirrors the approach used in op partitioning
with a `register<DialectClass>Attributes` function (or Types) is used to register every attribute (or type) of the dialect and dispatches to partition specific functions.
The `generated{Parser,Printer}` function saw the biggest change.
It is not generated as `generated<DialectClass>{Attribute,Type}{Parser,Printer}` which is a method with public linkage.
This method is also generated for non-partitioned dialects and the old `generated{Parser,Printer}` function soft-deprecated (but for now retained for migration purposes).

The additional testing, the test dialect's attributes and types are split into the
partitions `Core` and `Syntax`.
This roughly halves the compile time (15.1s -> 6.7s + 6.9s) and peak memory (721 MiB -> 385 and
376 MiB) of the largest test dialect attribute compilation unit.

    [2 lines not shown]
DeltaFile
+0-637mlir/test/lib/Dialect/Test/TestTypes.cpp
+0-614mlir/test/lib/Dialect/Test/TestAttributes.cpp
+491-0mlir/test/lib/Dialect/Test/TestTypesCore.cpp
+375-0mlir/test/lib/Dialect/Test/TestAttributesCore.cpp
+311-41mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp
+260-0mlir/test/lib/Dialect/Test/TestAttributesSyntax.cpp
+1,437-1,29254 files not shown
+2,513-1,70260 files

LLVM/project bcb1dfa — libcxx/include/__algorithm for_each_n.h for_each.h, libcxx/include/__memory replacable_object.h

[libc++] Pass function in for_each by value
DeltaFile
+76-0libcxx/include/__memory/replacable_object.h
+34-3libcxx/test/benchmarks/algorithms/nonmodifying/for_each.bench.cpp
+18-14libcxx/include/__algorithm/ranges_fold.h
+0-26libcxx/test/libcxx/algorithms/robust_against_copying_comparators.pass.cpp
+16-8libcxx/include/__algorithm/for_each.h
+12-9libcxx/include/__algorithm/for_each_n.h
+156-607 files not shown
+179-6813 files

LLVM/project 5a4cff7 — llvm/test/Transforms/SLPVectorizer/AArch64 spillcost-hoisted-external-user.ll

[SLP][NFC]Add extra tests for spills costs, NFC

Pull-request: https://github.com/llvm/llvm-project/pull/241931
DeltaFile
+80-0llvm/test/Transforms/SLPVectorizer/AArch64/spillcost-hoisted-external-user.ll
+80-01 files

LLVM/project f0e4262 — libcxxabi/src/demangle ItaniumDemangle.h, libcxxabi/test DemangleTestCases.inc

[ItaniumDemangle] Print the full target type of cast expressions (#240977)

CastExpr only prints the left half of its target type. Instead, print
the full type.

With the example from the test:

```
llvm-cxxfilt _Z1fIXscA_iLi0EEEvv
Before: void f<static_cast<int>(0)>()
With this patch: void f<static_cast<int []>(0)>()
```

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

assisted-by: claude
DeltaFile
+4-0llvm/include/llvm/Testing/Demangle/DemangleTestCases.inc
+4-0libcxxabi/test/DemangleTestCases.inc
+1-1llvm/include/llvm/Demangle/ItaniumDemangle.h
+1-1libcxxabi/src/demangle/ItaniumDemangle.h
+10-24 files

LLVM/project c3daf3f — clang/lib/CIR/CodeGen CIRGenExprScalar.cpp CIRGenBuilder.h, clang/test/CIR/CodeGen fixed-point-conversions.cpp fixed-point-arith.cpp

[CIR] Match classic codegen for saturating fixed-point negation and padded conversions (#236702)

Three ClangIR fixed-point paths diverged from classic codegen:

- Unary minus on a saturating type emitted a plain subtraction. It is
now a saturating `0 - x`.
- With `-fpadding-on-unsigned-fixed-point`, float to unsigned
fixed-point conversion produced the `fptosi.sat` result in an unsigned
CIR type, so its clamp to 0 compared as unsigned and never fired. It now
converts and clamps in a signed type, like `llvm::FixedPointBuilder`,
and casts to the unsigned type afterwards.
- A saturating conversion that kept the width but changed signedness
returned a value of the source CIR type, which broke the `cir.cmp`
verifier and needed a pointer bitcast to store. It now casts to the
destination type.

Assisted-by: Claude Code (Claude Opus 5.5).
DeltaFile
+86-0clang/test/CIR/CodeGen/fixed-point-arith.cpp
+24-20clang/lib/CIR/CodeGen/CIRGenFixedPointBuilder.h
+4-4clang/test/CIR/CodeGen/fixed-point-conversions.cpp
+8-0clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp
+8-0clang/lib/CIR/CodeGen/CIRGenBuilder.h
+130-245 files

LLVM/project 840a0ab — libc/src/stdlib CMakeLists.txt environ_internal.h, utils/bazel/llvm-project-overlay/libc BUILD.bazel

[libc] Use CheckedPtr in environ_internal (#241777)

Replace the manual AllocChecker allocations with make_unique and
friends. The allocations are only held in CheckedPtrs locally, and
released into the raw member pointers once nothing can fail anymore. I'm
deliberately not making the members themselves unique_ptrs, as that
would make the EnvironmentManager singleton non-trivially destructible.

Assisted-by: Claude
DeltaFile
+37-79libc/src/stdlib/environ_internal.cpp
+0-15libc/src/stdlib/environ_internal.h
+1-1utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+1-1libc/src/stdlib/CMakeLists.txt
+39-964 files

LLVM/project 2b7a8b3 — libc/src/net/if/linux CMakeLists.txt if_nameindex_impl.h, libc/test/src/net/if/linux if_nameindex_test.cpp

[libc] Read the whole netlink dump in if_nameindex (#241874)

This patch makes us call recvfrom in a loop until we get NLMSG_DONE. The
interface entries are copied out of the buffer, so we can reuse it for
each read. The kernel shouldn't send empty datagrams, but I'm treating
them as an error (EIO) anyway, so that we can't end up spinning in the
loop. This also means that tests which don't provide an NLMSG_DONE
message get an error (instead of hanging).

Now that we keep reading, silently skipping over data we can't parse is
no longer harmless, as we would block forever if we skipped the
NLMSG_DONE message. Anything left over at the end of a datagram is
garbage or a truncated message, and I'm returning EIO in that case as
well. TruncatedNetlinkHeaderPacket now expects that.

I'm also checking the error code in the NLMSG_DONE payload, since that's
how the kernel reports errors which happen in the middle of the dump.

Assisted-by: Claude
DeltaFile
+113-8libc/test/src/net/if/linux/if_nameindex_test.cpp
+44-20libc/src/net/if/linux/if_nameindex_impl.h
+1-0libc/src/net/if/linux/CMakeLists.txt
+158-283 files

LLVM/project 7e93a20 — llvm/test/Transforms/SLPVectorizer/X86 extract_in_tree_user.ll split-load8_2_unord_geps.ll

[SLP] Enable IRBuilder GEP canonicalization (#241915)
DeltaFile
+11-10llvm/test/Transforms/SLPVectorizer/X86/scatter-vectorize-reorder-non-empty.ll
+9-8llvm/test/Transforms/SLPVectorizer/X86/minbw-gep-demoted-index.ll
+7-7llvm/test/Transforms/SLPVectorizer/X86/stacksave-dependence.ll
+4-4llvm/test/Transforms/SLPVectorizer/X86/sese-region-non-schedulable.ll
+4-2llvm/test/Transforms/SLPVectorizer/X86/split-load8_2_unord_geps.ll
+2-2llvm/test/Transforms/SLPVectorizer/X86/extract_in_tree_user.ll
+37-339 files not shown
+47-4315 files

LLVM/project d92dc2d — llvm/include/llvm/Config config.h.cmake, llvm/lib/Support CMakeLists.txt

[Support] Add LLVM_WINDOWS_RESTRICTED_APIS to avoid shell32 (#209448)

Replace the unconditional environment variable lookups with an opt-in
option. With it OFF, behavior is unchanged.

With it ON, Support does not import shell32:
- Home, config and cache directories come from USERPROFILE and
  LOCALAPPDATA and are created if missing, like KF_FLAG_CREATE.
- remove_directories() uses RemoveDirectoryW and DeleteFileW, removes
  read-only entries, and does not follow junctions or symlinks.
- shell32 is dropped from the link libraries and delay-load flags.

A unit test checks the import and delay-import tables for shell32.

---------

Co-authored-by: Reid Kleckner <rkleckner at nvidia.com>
DeltaFile
+163-0llvm/unittests/Support/Path.cpp
+94-29llvm/lib/Support/Windows/Path.inc
+10-2llvm/lib/Support/CMakeLists.txt
+4-0utils/bazel/llvm_configs/config.h.cmake
+4-0utils/bazel/llvm-project-overlay/llvm/include/llvm/Config/config.h
+4-0llvm/include/llvm/Config/config.h.cmake
+279-313 files not shown
+284-319 files

LLVM/project 6fa251a — libc/src/__support/math pow_accurate_256.h

[libc][math] Fix undefined behavior in pow_accurate_256.h. (#241664)

Fix signed-integer overflow issue found by UBSan.
DeltaFile
+5-3libc/src/__support/math/pow_accurate_256.h
+5-31 files

LLVM/project 313e00d — llvm/test/Instrumentation/DataFlowSanitizer store.ll

[DFSan] Generate test checks (NFC) (#241909)
DeltaFile
+162-70llvm/test/Instrumentation/DataFlowSanitizer/store.ll
+162-701 files

LLVM/project fb1e95a — .github CODEOWNERS

[clang][Lex] Add ChenMiaoi to CODEOWNERS (#241084)

I would like to take on more sustained code review work in
`clang/lib/Lex`, so I am requesting to be added to the directory's
`CODEOWNERS`. I have been contributing fixes and reviewing PRs related
to Clang Lex, and I hope to follow changes in this area more closely and
help review them promptly.

I have not requested to join `pr-subscribers-clang` because the team
currently covers too broad an area. For now, I would like to focus on
and learn from changes in and around Lex.

I will carefully review changes I am familiar with. For questions beyond
my experience, I will seek help from contributors with greater
familiarity with the relevant code or semantics, rather than approve
changes without sufficient confidence.

I understand that joining `CODEOWNERS` means more than receiving
notifications: it is a commitment to invest time and effort consistently

    [2 lines not shown]
DeltaFile
+3-0.github/CODEOWNERS
+3-01 files

LLVM/project 46857a1 — libc/src/__support/File CMakeLists.txt dir_scan_impl.h

[libc] Use make_unique_for_overwrite in dir_scan_impl.h (#241905)

Replace the AllocChecker + new allocations in dir_scan_impl.h with
make_unique_for_overwrite. ScannedEntries now also stores its entries
array in a cpp::unique_ptr<struct dirent *[]>, which lets me drop the
manual delete[] calls and the pointer juggling in release().

Assisted-by: Gemini
DeltaFile
+15-24libc/src/__support/File/dir_scan_impl.h
+1-2libc/src/__support/File/CMakeLists.txt
+16-262 files

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

[LangRef][llubi] Clarify the behavior of load/store with non-byte-sized byte types (#237391)

Address comment
https://github.com/llvm/llvm-project/pull/230955#discussion_r4241760419.

In https://github.com/llvm/llvm-project/pull/180739, we force the
padding bits of non-byte-sized load/store are filled w/ zero bits.
However, it is hard to define `zext` and `trunc nuw` of a byte value, as
it may contain several poison bits.

This patch specifies that the padding bits are filled with poison iff
all non-padding bits in the padding byte are poison. This still allows
us to remove a non-byte-sized store of poison values. When loading a
non-byte-sized byte value, the byte containing padding bits is poisoned
when padding bits are not zeros. Other non-byte-sized load/store,
including scalars and vectors, are interpreted as `bitcast +
bitinsert/bitextract`.

llubi implementation is adjusted accordingly. `freeze` and `bitinsert`

    [3 lines not shown]
DeltaFile
+108-30llvm/test/tools/llubi/loadstore_le.ll
+103-25llvm/test/tools/llubi/loadstore_be.ll
+61-22llvm/tools/llubi/lib/Value.h
+50-32llvm/tools/llubi/lib/Context.cpp
+25-0llvm/test/tools/llubi/bitinsert_bitextract_le.ll
+25-0llvm/test/tools/llubi/bitinsert_bitextract_be.ll
+372-1096 files not shown
+419-12312 files

LLVM/project bcf88e3 — libc/hdr/types struct_ifaddrs.h, libc/include/llvm-libc-types struct_ifaddrs.h

[libc] Add <ifaddrs.h> and getifaddrs/freeifaddrs stubs (#241896)

Add the <ifaddrs.h> header, struct ifaddrs definition, and stub
implementations for getifaddrs() and freeifaddrs() (returning ENOSYS and
doing nothing, respectively).

The stubs live under src/ifaddrs/linux/ (matching net/if) so the real
netlink-based implementation can be filled in later. Since they don't do
anything useful yet, the header and entrypoints are gated on
LLVM_LIBC_ENABLE_EXPERIMENTAL_ENTRYPOINTS (on linux aarch64, riscv, and
x86_64, where the rest of our networking headers are enabled).

Assisted-by: Gemini
DeltaFile
+35-0libc/include/llvm-libc-types/struct_ifaddrs.h
+33-0libc/test/src/ifaddrs/linux/getifaddrs_test.cpp
+29-0libc/src/ifaddrs/linux/getifaddrs.cpp
+27-0libc/hdr/types/struct_ifaddrs.h
+26-0libc/src/ifaddrs/linux/freeifaddrs.cpp
+26-0libc/src/ifaddrs/linux/CMakeLists.txt
+176-017 files not shown
+321-023 files

LLVM/project 7caa9cb — llvm CMakeLists.txt

[SystemZ][z/OS] Disable threads on z/OS (#238203)

Recent uses of thread local in llvm have used dynamic initialization.
This is not supported on z/OS yet. This PR will disable thread support
for z/OS.
DeltaFile
+8-1llvm/CMakeLists.txt
+8-11 files

LLVM/project 97608ce — llvm/include/llvm/IR Intrinsics.td, llvm/test/Assembler auto_upgrade_coro_end_result.ll

[Verifier] Add `immarg` to unwind argument of `@llvm.coro.end.*` (#241870)

This is used to drive coroutine splitting and should only ever be an
immediate.

Fixes #241473
DeltaFile
+18-0llvm/test/Verifier/intrinsic-immarg.ll
+4-3mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
+3-3mlir/test/Target/LLVMIR/Import/intrinsic.ll
+3-3llvm/test/Assembler/auto_upgrade_coro_end_result.ll
+4-2llvm/include/llvm/IR/Intrinsics.td
+32-115 files

LLVM/project c506ad5 — clang/lib/Frontend InitPreprocessor.cpp, clang/test/OpenMP driver.c

[OpenMP] Finalize OpenMP 6.1, add 7.0 as development version
DeltaFile
+318-18llvm/lib/Frontend/OpenMP/OMPDescriptors.inc
+7-5flang/test/Driver/fopenmp-version.F90
+9-1llvm/include/llvm/Frontend/OpenMP/OMPDescriptors.h.inc
+4-2llvm/lib/Frontend/OpenMP/OMP.cpp
+3-0clang/test/OpenMP/driver.c
+3-0clang/lib/Frontend/InitPreprocessor.cpp
+344-264 files not shown
+352-2710 files

LLVM/project 6b8b562 — clang/include/clang/CIR/Dialect/IR CIRAttrs.td, clang/lib/CIR/CodeGen CIRGenModule.cpp

[CIR] Add relative_cxx_abi_vtables to lowering-options (#241040)

This is a first in quite a few patches that I intend to commit towards
getting us 'relative-vtable' support. I believe that CIR-Gen should
abstract this away, so I am going to move get_virtual_fn_addr to return
an abstract type instead. This patch will let LowerToLLVM handle all the
'heavy lifting' of figuring out the differences between pointer and
offset addresses.
DeltaFile
+30-0clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+6-2clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
+8-0clang/test/CIR/CodeGen/lowering-lang-options.cpp
+4-2clang/test/CIR/IR/lowering-lang-options.cir
+2-1clang/lib/CIR/CodeGen/CIRGenModule.cpp
+2-0clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerModule.cpp
+52-56 files

LLVM/project f6014b1 — llvm/test/CodeGen/SystemZ regcoal-subranges-update-remat.mir

[SystemZ][test] Fix mismatched copy-like operand sizes in MIR fixtures (#238381)

Fixing some register size mismatches on COPY instructions.

Came up with: https://github.com/llvm/llvm-project/pull/234959
DeltaFile
+2-2llvm/test/CodeGen/SystemZ/regcoal-subranges-update-remat.mir
+2-21 files

LLVM/project d973d1a — clang/lib/Headers hlx_hexagon_protos.h, libc/utils/docgen math.yaml

Merge branch 'main' into users/shiltian/infer-as-constexpr-cast-roots
DeltaFile
+1,457-1,437llvm/test/Transforms/Util/DeclareRuntimeLibcalls/aarch64.ll
+1,308-1,292llvm/test/Transforms/Util/DeclareRuntimeLibcalls/windows.ll
+1,208-1,190llvm/test/Transforms/Util/DeclareRuntimeLibcalls/ppc.ll
+1,086-1,074llvm/test/Transforms/Util/DeclareRuntimeLibcalls/bsd.ll
+1,945-0libc/utils/docgen/math.yaml
+1,822-0clang/lib/Headers/hlx_hexagon_protos.h
+8,826-4,9932,827 files not shown
+72,006-37,4252,833 files

LLVM/project c03d14a — compiler-rt/lib/csan csan_watch.h csan.cpp, compiler-rt/test/csan access-sizes.cpp

[csan] fixes for hexagon / 32-bit architectures (#241324)

For Consume(): cast peer PCs through uptr before converting them to
pointers.

For the access-sizes.cpp test case: use long long for the eight-byte
access case so ILP32 targets exercise the intended access size.
DeltaFile
+1-1compiler-rt/test/csan/access-sizes.cpp
+1-1compiler-rt/lib/csan/csan_watch.h
+1-1compiler-rt/lib/csan/csan.cpp
+3-33 files

LLVM/project 5b5ba91 — llvm/include/llvm/Transforms/IPO Attributor.h, llvm/lib/Transforms/IPO Attributor.cpp

[Attributor][NFC] Remember IPO amendable functions (#241064)

`isFunctionIPOAmendable` runs on every AA update. Compute whether a
function has an exact definition or is inlineable once, in
`initializeInformationCache`.

With the other pending Attributor compile-time changes, attributor-light
is 0.1-0.3% faster on CTMark (`opt` instructions); the full Attributor
is unchanged.

Co-authored-by: Matt Arsenault <Matthew.Arsenault at amd.com>
Assisted-by: Claude Opus 5.5
DeltaFile
+15-1llvm/include/llvm/Transforms/IPO/Attributor.h
+4-2llvm/lib/Transforms/IPO/Attributor.cpp
+19-32 files