LLVM/project 0762d0c — llvm/tools/llvm-strings CMakeLists.txt

[llvm-strings] Call xcrun instead of relying on preset variables (#242580)

Suggested by llvm-beanz as some CMake setups will not pre-set those
variables.
DeltaFile
+8-5llvm/tools/llvm-strings/CMakeLists.txt
+8-51 files

LLVM/project ce00ceb — clang/test/CIR/CodeGen call-conv-lowering-amdgpu-cxx-records.cpp call-conv-lowering-amdgpu-return-types.c, clang/test/CIR/CodeGenHIP call-conv-lowering-amdgpu-kernel-args.hip

add working test cases after rebase
DeltaFile
+340-10clang/test/CIR/CodeGen/call-conv-lowering-amdgpu-arg-types.c
+132-11clang/test/CIR/CodeGen/call-conv-lowering-amdgpu-return-types.c
+86-11clang/test/CIR/CodeGen/call-conv-lowering-amdgpu-cxx-records.cpp
+39-3clang/test/CIR/CodeGenHIP/call-conv-lowering-amdgpu-kernel-args.hip
+597-354 files

FreeBSD/src 12a57b0 — usr.sbin/auditdistd Makefile, usr.sbin/bhyve Makefile

auditdistd, bhyve: drop OPENSSL_API_COMPAT

Neither uses any OpenSSL function deprecated in 3.0 or later. Both build
with no deprecation warnings against OpenSSL 3.5 and 4.1 without it.
DeltaFile
+0-2usr.sbin/auditdistd/Makefile
+0-1usr.sbin/bhyve/Makefile
+0-32 files

LLVM/project 7d9bb8c — mlir/lib/Dialect/Arith/IR ValueBoundsOpInterfaceImpl.cpp, mlir/test/Dialect/Arith value-bounds-op-interface-impl.mlir

fix: arith.maxui had incorrect bounds if one operand is negative (#238048)

Value bounds for `arith.maxui(-1, 2)` said it's `>= 2` which is wrong,
because it's actually `-1`.
DeltaFile
+30-10mlir/test/Dialect/Arith/value-bounds-op-interface-impl.mlir
+12-9mlir/lib/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.cpp
+42-192 files

LLVM/project dc567b6 — llvm/lib/CodeGen/SelectionDAG DAGCombiner.cpp, llvm/test/CodeGen/AMDGPU fcopysign.f64.ll

DAG: Use shl of any_extend to place the sign bit when folding bitcast of fcopysign

When the sign operand is narrower than the result, only its sign bit is
used. Move it into place with a shift of an any_extend instead of a
sign_extend.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+7-14llvm/test/CodeGen/AMDGPU/fcopysign.f64.ll
+7-2llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+14-162 files

LLVM/project 8cf1824 — clang/docs ControlFlowIntegrity.md, llvm/docs XRay.md

[docs] Add Hexagon to CFI-ICall, and XRay arch lists (#240418)

Hexagon now supports the CFI indirect-call sanitizer, and XRay.
DeltaFile
+1-1llvm/docs/XRay.md
+1-1clang/docs/ControlFlowIntegrity.md
+2-22 files

LLVM/project 69245e3 — clang/docs ReleaseNotes.md, clang/include/clang/AST ASTTypeTraits.h

[clang][AST] Don't give `ObjCProtocolLoc` pointer identity in `DynTypedNode` (#237451)

`DynTypedNode` has stored `ObjCProtocolLoc` by value since the node was
added in 805f7a4fa4ce, but `NKI_ObjCProtocolLoc` was placed after
`NKI_LastKindWithoutPointerIdentity`, so `hasPointerIdentity()` returned
true for it. `getMemoizationData()` then returned (by chance?) the
stored `ObjCProtocolDecl` pointer. As a result, two references to the
same protocol at different locations compared equal through
`DynTypedNode`. This caused `ASTContext::getParents()` to behave
incorrectly.

This commit changes `ObjCProtocolLoc` to be considered as not having
pointer identity. Subsequently, we handle `ObjCProtocolLoc` in
`DynTypedNode::operator<`, `operator==` and `getHashValue`, using both
the protocol pointer and the source location.

To catch this class of mismatch at compile time, this commit also
introduces a `static_assert` to check that how it stores the node
matches `hasPointerIdentity()` for the node kind.
DeltaFile
+46-6clang/unittests/AST/ASTTypeTraitsTest.cpp
+39-4clang/include/clang/AST/ASTTypeTraits.h
+14-0clang/unittests/AST/ASTContextParentMapTest.cpp
+4-0clang/docs/ReleaseNotes.md
+1-1clang/lib/AST/ASTTypeTraits.cpp
+104-115 files

LLVM/project 7e87ece — clang/lib/CodeGen CGDebugInfo.h

[clang] Remove unused declarations in CGDebugInfo (NFC) (#239487)

SaveAndRestoreLocation: The class was removed on January 14, 2015 in
commit 66e4197f07f6a3fe178f2b220fce62a1889b5fe6, leaving its friend
declaration in CGDebugInfo dangling.

CGDebugInfo::OCLNDRangeDITy: The last use was removed on February 16,
2017 in commit 58984e7087bc530ac2fae06b3ef15a4f1bc118f9.

CGDebugInfo::Int8_4PackedTy and CGDebugInfo::UInt8_4PackedTy: These
fields were added via HLSLPackedTypes.def on September 30, 2026 in
commit 9488c46651de0fbec038e6b8578c1e651d89e576 without any uses.

Note that CGDebugInfo becomes fully defined in CGDebugInfo.cpp once we
remove the friend declaration for SaveAndRestoreLocation.  That in turn
causes -Wunused-private-field to diagnose the unused private fields
removed here.

Assisted-by: Antigravity
DeltaFile
+0-5clang/lib/CodeGen/CGDebugInfo.h
+0-51 files

LLVM/project 35cf117 — clang/test/Headers __clang_hip_math.hip, llvm/test/CodeGen/AMDGPU combine-carry-into-uadde-usube.ll

Merge branch 'main' into users/mrsidims/aarch64-narrow-two-source-shuffle-tests
DeltaFile
+1,280-19,139utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+5,483-1,952llvm/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir
+6,825-0utils/bazel/llvm-project-overlay/libc/src/__support/math/BUILD.bazel
+4,229-24llvm/test/CodeGen/AMDGPU/combine-carry-into-uadde-usube.ll
+3,674-0utils/bazel/llvm-project-overlay/libc/src/math/BUILD.bazel
+1,728-1,728clang/test/Headers/__clang_hip_math.hip
+23,219-22,8439,003 files not shown
+304,100-153,3029,009 files

LLVM/project 915f60f — llvm/test/CodeGen/AArch64 fixed-masked-scatter.ll, llvm/test/CodeGen/AMDGPU licm-regpressure-peak.mir

[MachineLICM] Track peak register pressure when hoisting

The pressure check in MachineLICM only looks at the estimates saved in
BackTrace. These record pressure at block boundaries, so they can miss an
earlier peak in the current BB or an ancestor BB. If pressure falls before the
candidate, the check can allow it to move even though its def then needs to stay
live across that earlier peak. This can push pressure beyond the limit and cause
spills.

This PR adds PeakPressure alongside RegPressure and saves the previous peak with
the existing boundary estimate in BackTrace. The pressure check considers the
current BB's peak and both saved estimates. Normal hoists adjust the current and
saved peaks, and scope exit restores the previous peak. Preheader scanning skips
peak updates and seeds the starting pressure from its final estimate.

Fixes LCOMPILER-3233.

This PR was assisted by AI but I reviewed all the changes.
DeltaFile
+412-412llvm/test/CodeGen/NVPTX/atomicrmw-elementwise-sm70.ll
+412-412llvm/test/CodeGen/NVPTX/atomicrmw-elementwise-sm60.ll
+263-263llvm/test/CodeGen/Thumb2/mve-gather-increment.ll
+134-192llvm/test/CodeGen/AArch64/fixed-masked-scatter.ll
+209-0llvm/test/CodeGen/AMDGPU/licm-regpressure-peak.mir
+92-108llvm/test/CodeGen/RISCV/rvv/pr165232.ll
+1,522-1,38715 files not shown
+2,172-1,77421 files

LLVM/project d901a1e — llvm/lib/CodeGen RegisterClassInfo.cpp, llvm/test/CodeGen/AMDGPU regpressure-stress-regalloc.mir av-split-dead-valno-crash.ll

[CodeGen] Honor -stress-regalloc in register pressure limits

RegisterClassInfo clips each allocation order for -stress-regalloc, but
computePSetLimit treats the removed entries as reserved registers. On
AMDGPU, their weight can exceed the target limit, so the underflow guard
returns the target limit and loses the stress restriction.

Use the weighted allocatable register count for the stress limit, bounded
by the target limit. Keep the normal calculation and zero-allocation
fallback.

Add a MIR test where hoisting a COPY needs a seventh VGPR unit. A stress
limit of six keeps it in the loop, while a limit of eight and the
unrestricted limit allow it. Update the affected AMDGPU stress test.

Validation: all 50 stress-regalloc tests pass with MachineLICM unchanged.
The new MIR test fails without the pressure-limit fix.

This PR was assisted by AI.
DeltaFile
+43-45llvm/test/CodeGen/AMDGPU/av-split-dead-valno-crash.ll
+83-0llvm/test/CodeGen/AMDGPU/regpressure-stress-regalloc.mir
+7-0llvm/lib/CodeGen/RegisterClassInfo.cpp
+133-453 files

FreeBSD/src afc7fc2 — sys/contrib/openzfs/include/sys dbuf.h, sys/contrib/openzfs/module/zfs dmu_direct.c dbuf.c

Fix direct reads of blocks pending free

Direct reads only check the on-disk block pointer for holes, so they
can read stale data after a block has been freed but before the free
has synced. Share buffered read hole detection with direct reads to
honor pending frees as well.

Keep cached data ahead of hole detection and preserve the transaction
ordering of block clone and direct write overrides. Retain the block
pointer recheck after dnode_block_freed() for concurrent syncing.

Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Wale Zhang <wale.zhang.ftd at gmail.com>
Closes #19633

Approved by:    kevans (mentor)

(cherry picked from commit 924b8c89c04e324649855b05986f686b58ca4cb9)
DeltaFile
+20-8sys/contrib/openzfs/module/zfs/dbuf.c
+1-1sys/contrib/openzfs/module/zfs/dmu_direct.c
+1-0sys/contrib/openzfs/include/sys/dbuf.h
+22-93 files

FreeBSD/src 78ca640 — sys/contrib/openzfs/module/zfs dbuf.c

dbuf: restore BP_IS_HOLE() recheck after dnode_block_freed()

Commit 79cf54582 ("Fix reads for blocks freed after being cloned")
reworked the level-0 check in dbuf_read_hole() and dropped the
BP_IS_HOLE() recheck that followed dnode_block_freed(), together with
the comment explaining it.  That recheck was not about overrides: it
closes a race with dnode_sync().

dnode_sync_free_ranges() drops dn_mtx, clears the bps through
dnode_sync_free_range_impl() -> free_blocks(), then retakes dn_mtx and
removes the range from dn_free_ranges.  For blkptrs held in the dnode
(dn_nlevels == 1), free_blocks() writes the bp without the parent's
db_rwlock, so holding that lock in dbuf_read() does not serialize
against it.  A reader that saw a non-hole bp, then waited on dn_mtx in
dnode_block_freed() until the range was removed, gets "not freed" while
the bp it is about to copy is already a hole (with HOLE_BIRTH, lsize
and birth preserved).  dbuf_read_impl() then hands that hole to
arc_read(): no child I/O is issued, checksum verification fails with
EINVAL, and without ZIO_FLAG_CANFAIL the pool is suspended.

    [24 lines not shown]
DeltaFile
+9-1sys/contrib/openzfs/module/zfs/dbuf.c
+9-11 files

FreeBSD/src fdd6b20 — sys/contrib/openzfs/module/zfs dmu.c

Fix double free when cloning a block with a pending free

dmu_read_l0_bps() captures the source block pointers for a clone
without consulting dnode_block_freed(). A block whose free is recorded
but not yet synced still has a valid on-disk pointer, so the clone
registers a BRT reference to a block about to be returned to the
allocator, and it is freed twice. On a debug build this trips the
metaslab double-free verifier; on a release build the space map is
silently corrupted.

Check for a pending free and return EAGAIN, as dbuf_read_hole() already
does for buffered reads. zfs_clone_range() waits a TXG and retries, by
which point the block reads as a hole.

Two cases need more than the plain check. A hole has nothing to free,
so guard with !BP_IS_HOLE(bp), otherwise a hole inside a pending free
range fails a FICLONE that master cloned. When the head dirty record
already overrode the BP, only frees after the override count against
it, so use dnode_block_freed_after(); dbuf_free_range() leaves the

    [17 lines not shown]
DeltaFile
+38-0sys/contrib/openzfs/module/zfs/dmu.c
+38-01 files

LLVM/project 82f48a7 — compiler-rt/lib/sanitizer_common sanitizer_linux.cpp, compiler-rt/lib/sanitizer_common/tests sanitizer_linux_test.cpp

[sanitizer] Use clock_nanosleep_time64 for 32-bit Linux delays (#241663)

internal_usleep passes libc's struct timespec directly to the nanosleep
syscall. On 32-bit Linux with time64 musl, that structure does not match
the legacy syscall layout.
    
Use clock_nanosleep_time64 when its syscall number is available, with
explicit 64-bit seconds and nanoseconds.

clock_nanosleep_time64 was introduced in Linux 5.1. On older kernels,
ENOSYS triggers a DCHECK in debug builds.
DeltaFile
+13-0compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+6-0compiler-rt/lib/sanitizer_common/tests/sanitizer_linux_test.cpp
+19-02 files

LLVM/project 8f671fe — llvm/lib/Frontend/OpenMP OMPIRBuilder.cpp

OpenMP: Use getOrInsertFunction init callback for runtime functions (#242564)

Use the new overload to set up the function on first use. The
MD_callback check is dropped since a newly created function will never
have metadata.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+19-38llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+19-381 files

LLVM/project 8954e3c — llvm/lib/Target/NVPTX NVPTXAsmPrinter.cpp, llvm/test/CodeGen/NVPTX globals_init.ll

[NVPTX] Handle vector splats nested in aggregate initializers (#229073)

A vector splat that is an element of an array or a member of a struct in
a global initializer is not emitted:

```llvm
@tab = constant [2 x <4 x float>] [<4 x float> splat (float 1.0),
                                   <4 x float> <float 1.0, float 2.0, float 3.0, float 4.0>]
```

With assertions `llc` stops at `llvm_unreachable("Unexpected Constant
type")` in `bufferLEByte`. Without assertions it exits 0 and the data is
wrong: the table above comes out as `{1,2,3,4}, {0,0,0,0}`, and `ptxas`
accepts it.

A splat is a vector-typed `ConstantFP` since #197427 (and a
`ConstantInt` with `-use-constant-int-for-fixed-length-splat`). #182544
handled one that is a global's whole initializer; a nested one goes
through `bufferLEByte`, which did not pass it on to

    [18 lines not shown]
DeltaFile
+25-88llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
+37-0llvm/test/CodeGen/NVPTX/globals_init.ll
+62-882 files

LLVM/project 51c93e5 — clang/lib/Sema SemaChecking.cpp

fix

Created using spr 1.3.7
DeltaFile
+5-5clang/lib/Sema/SemaChecking.cpp
+5-51 files

LLVM/project 113859b — llvm/include/llvm/CodeGen LiveIntervalCalc.h LiveInterval.h, llvm/lib/CodeGen LiveIntervalCalc.cpp LiveIntervals.cpp

CodeGen: Create register unit dead defs in slot order

computeRegUnitRange created dead defs in use list order, so each one
was inserted into the middle of the segment vector. To avoid the
quadratic cost, every register unit range was built through a std::set
of segments, costing a heap allocation per segment.

Sort the def slots first and append the dead defs in order instead,
and remove the segment set, since register units were its only user.
This also shrinks LiveRange by a pointer.

llc instructions:u:
  CTMark x86_64:                    -0.42%
  CTMark arm64:                     -0.32%
  Largest AMDGPU lit tests, gfx942: -0.24%

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+0-86llvm/lib/CodeGen/LiveInterval.cpp
+10-15llvm/lib/CodeGen/LiveIntervals.cpp
+1-21llvm/include/llvm/CodeGen/LiveInterval.h
+0-12llvm/lib/CodeGen/LiveIntervalCalc.cpp
+0-5llvm/include/llvm/CodeGen/LiveIntervalCalc.h
+11-1395 files

LLVM/project a87ef6b — clang/docs LanguageExtensions.md, clang/include/clang/Basic DiagnosticSemaKinds.td

[𝘀𝗽𝗿] changes to main this commit is based on

Created using spr 1.3.7

[skip ci]
DeltaFile
+39-0clang/lib/Sema/SemaDecl.cpp
+28-0clang/docs/LanguageExtensions.md
+22-0clang/test/CodeGen/oracle_function.c
+20-0clang/include/clang/Basic/DiagnosticSemaKinds.td
+15-0clang/test/Sema/attr-oracle-function.c
+10-0clang/lib/CodeGen/CodeGenFunction.cpp
+134-03 files not shown
+150-09 files

LLVM/project 66fe072 — clang/docs LanguageExtensions.md, clang/lib/CodeGen CGBuiltin.cpp

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+81-5clang/lib/Sema/SemaChecking.cpp
+77-0clang/test/CodeGen/builtin-speculative-load.c
+51-0clang/docs/LanguageExtensions.md
+39-0clang/lib/Sema/SemaDecl.cpp
+29-0clang/test/Sema/builtin-speculative-load.c
+23-0clang/lib/CodeGen/CGBuiltin.cpp
+300-58 files not shown
+389-514 files

LLVM/project 43ce91a — clang/test/CodeGen oracle_function.c

fix

Created using spr 1.3.7
DeltaFile
+13-6clang/test/CodeGen/oracle_function.c
+13-61 files

LLVM/project d1ea955 — llvm/lib/IR Verifier.cpp

Verifier: Check each metadata attachment of an instruction once

visitInstruction looked up about 30 metadata kinds for every
instruction, followed by another getAllMetadata call. Collect the set
once and switch over the kinds.

instructions in opt: consumer-typeset z08.bc -0.94%,
  kimwitu++ k.bc -0.64%, sqlite3 -0.43%, SPASS cnf.bc -0.09%.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+157-166llvm/lib/IR/Verifier.cpp
+157-1661 files

LLVM/project 092f2a1 — llvm/lib/IR Verifier.cpp

Verifier: Look up the AMDGPU metadata kinds once

visitInstruction looked up two AMDGPU metadata kinds by name for every
instruction. Look up their IDs when constructing the Verifier.

O3 instructions in opt:
consumer-typeset z08.bc -0.34%, kimwitu++ k.bc -0.22%, sqlite3 -0.15%.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+10-3llvm/lib/IR/Verifier.cpp
+10-31 files

LLVM/project 4269ff6 — llvm/lib/Transforms/IPO MemProfContextDisambiguation.cpp, llvm/test/ThinLTO/X86 memprof-kcfi.ll

[MemProf] Strip !kcfi_type metadata from instantiated function clones (#242532)

CloneFunction copies all function-level metadata onto newly instantiated
.memprof.N clones, including !kcfi_type. Under -fsanitize=kcfi, the
backend emits a KCFI type-hash preamble and __cfi_ symbol before every
function definition carrying !kcfi_type regardless of whether its
address is taken. Leaving !kcfi_type on .memprof.N clones adds code and
symbol-table overhead and makes those clones valid KCFI indirect-call
targets even though MemProf clones are only ever called directly.

Clear MD_kcfi_type on newly created clones in both createFunctionClones
and ModuleCallsiteContextGraph::cloneFunctionForCallsite, matching
external .memprof.N declarations which carry no !kcfi_type.

Assisted-by: Gemini
DeltaFile
+75-0llvm/test/ThinLTO/X86/memprof-kcfi.ll
+6-0llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
+81-02 files

LLVM/project f46e523 — llvm/lib/CodeGen/GlobalISel LoadStoreOpt.cpp, llvm/test/CodeGen/AArch64/GlobalISel store-merging.ll store-merging.mir

[GlobalISel] Don't merge stores across a store that can't be merged (#239627)

LoadStoreOpt leaves a store out of a merge when it may alias an
operation the merged store would be moved past, but it then merged the
remaining stores as if they were still adjacent. With stores to offsets
0, 4 and 8 where the store to 4 is left out, the stores to 0 and 8 were
merged into one 8-byte store at offset 0, which writes the value for
offset 8 to offset 4.

Merge the stores on each side of a store that is left out separately.

The first commit adds the tests with the current output.

Fixes #235467.

Assisted by Claude (Anthropic).
DeltaFile
+108-0llvm/test/CodeGen/AArch64/GlobalISel/store-merging.mir
+48-0llvm/test/CodeGen/AArch64/GlobalISel/store-merging.ll
+12-5llvm/lib/CodeGen/GlobalISel/LoadStoreOpt.cpp
+168-53 files

LLVM/project 9f618f4 — llvm/lib/TableGen Main.cpp, llvm/test/TableGen escape-dependency-filenames.td

[TableGen] correctly escape dependency filenames (#160834)

[TableGen] correctly escape dependency filenames

Currently, *-tblgen do not escape special characters in dependency
filenames. This can lead to unnecessary rebuilds when the filenames
contain characters that require escaping, as the build system may not
treat them correctly.

For instance, when building LLVM in a directory that contains spaces
("/home/user/repos/llvm project" in the example below), the build system
always rebuilds a large portion of the project despite nothing having
changed, due to an unescaped space in the dependency filename:

    $ ninja -C build -d explain
    ninja: Entering directory `build'
    ninja explain: /home/user/repos/llvm is dirty
    ...
    $ cat build/include/llvm/IR/IntrinsicsRISCV.h.d

    [14 lines not shown]
DeltaFile
+36-3llvm/lib/TableGen/Main.cpp
+39-0llvm/test/TableGen/escape-dependency-filenames.td
+75-32 files

LLVM/project 266b559 — utils/bazel/llvm-project-overlay/libc libc_build_rules.bzl

[bazel] Use label-like strings in libc_build_rules.bzl (#242570)

Downstream in Google, all labels are expected to look like real labels
so they can be detected with [standard bazel
libraries](https://github.com/bazel-contrib/buildtools/blob/496abbe0493db8e8ee6b763b0799701f356880be/labels/labels.go#L66).
It looks like other bits of the llvm-project-overlay go through similar
gymnastics:


https://github.com/llvm/llvm-project/blob/f2368ada4905d6003a7a6b7fd7acd99cfc65e8b9/utils/bazel/llvm-project-overlay/libc/test/src/math/libc_math_test_rules.bzl#L26

It is fairly convenient to be able to identify which strings are labels
just by checking which ones successfully parse, so this PR updates
`libc_build_rules.bzl` to conform with the existing convention.
DeltaFile
+2-2utils/bazel/llvm-project-overlay/libc/libc_build_rules.bzl
+2-21 files

LLVM/project de574ff — clang/docs ReleaseNotes.md, clang/lib/CodeGen CGExpr.cpp CodeGenModule.h

[Clang][CFI] Only normalize integer types `cfi-icall` metadata (#242466)

When using `-fsanitize-cfi-icall-experimental-normalize-integers`, its
normalization was applied unconditionally when creating metadata,
appending `.normalized` and normalizing parts of C++ class vtable
`!type` metadata, virtual member-pointer metadata, virtual call checks,
and `-fexperimental-call-graph-section` metadata

This would cause ThinLTO to see vtable `!type` identifiers that mismatch
RTTI type-infos. Best case, this blocked whole-program devirtualization,
but in the worst case (mixed use of normalization) it would cause WPD to
make unsound transforms. =[

Restricting the normalization and `.normalized` suffix strictly to
`cfi-icall` function type metadata fixes these issues.

Added both direct tests and a CFI test that actually uses ThinLTO and
would break without this.

Assisted-by: Antigravity with Gemini
DeltaFile
+157-0compiler-rt/test/cfi/normalize-integers-wpd.cpp
+87-0clang/test/CodeGenCXX/cfi-icall-normalize-vtable.cpp
+29-23clang/lib/CodeGen/CodeGenModule.cpp
+7-8clang/lib/CodeGen/CodeGenModule.h
+4-0clang/docs/ReleaseNotes.md
+1-1clang/lib/CodeGen/CGExpr.cpp
+285-326 files

LLVM/project 788354f — llvm/lib/Transforms/Scalar ConstraintElimination.cpp

rework comment
DeltaFile
+6-6llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+6-61 files