LLVM/project d0dc3b0libcxx/include/__iterator static_packed_bounded_iter.h, libcxx/test/libcxx/iterators/static_packed_bounded_iter dereference.pass.cpp ctor.pass.cpp

[libc++] Add a compact, bounded iterator (#208271)

- By taking advantage of unused alignment bits for a pointer of type `T`
and the static capacity known at compile time, we can make a compact
bounded iterator who's size == `sizeof(T*)` by stuffing a counter inside
those bits.
- This new iterator type is `static_packed_bounded_iterator<class _Ptr, size_t _RangeCapacity>` and is only valid if:
  - `_Ptr` is a pointer 
- `_RangeCapacity` is <= `(1 << (bit_width(alignof(T)) - 1)) - 1`. The
extra -1 is required, because we need to represent the end position past
the last element.

---------

Co-authored-by: Louis Dionne <ldionne.2 at gmail.com>
DeltaFile
+239-0libcxx/include/__iterator/static_packed_bounded_iter.h
+114-0libcxx/test/libcxx/iterators/static_packed_bounded_iter/arithmetic.pass.cpp
+99-0libcxx/test/libcxx/iterators/static_packed_bounded_iter/comparison.pass.cpp
+75-0libcxx/test/libcxx/iterators/static_packed_bounded_iter/assert.pass.cpp
+57-0libcxx/test/libcxx/iterators/static_packed_bounded_iter/ctor.pass.cpp
+54-0libcxx/test/libcxx/iterators/static_packed_bounded_iter/dereference.pass.cpp
+638-05 files not shown
+731-011 files

LLVM/project 27eb381clang-tools-extra/clang-tidy/modernize UseNullptrCheck.h UseNullptrCheck.cpp, clang-tools-extra/docs ReleaseNotes.md

[clang-tidy] Add detection of decltype(nullptr) => std::nullptr_t to modernize-use-nullptr (#224591)

Hidden behind an option switch, but on by default.
DeltaFile
+35-1clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.cpp
+20-0clang-tools-extra/docs/clang-tidy/checks/modernize/use-nullptr.rst
+20-0clang-tools-extra/test/clang-tidy/checkers/modernize/use-nullptr-t.cpp
+5-0clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.h
+4-0clang-tools-extra/docs/ReleaseNotes.md
+1-1clang-tools-extra/test/clang-tidy/checkers/modernize/use-nullptr.cpp
+85-26 files

LLVM/project c2e0c82llvm/lib/Target/RISCV RISCVInstrInfo.td, llvm/lib/Target/RISCV/AsmParser RISCVAsmParser.cpp

[RISCV] Add UImmLsbZeroAsmOperand class to use isUImmShifted<N, S> as the PredicateMethod. NFC (#224789)

Allows us to remove some wrappers from RISCVAsmParser.
DeltaFile
+0-20llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
+7-2llvm/lib/Target/RISCV/RISCVInstrInfo.td
+7-222 files

LLVM/project ffe4693llvm/include/llvm/CodeGen ISDOpcodes.h

[SelectionDAG] Document that UADDO/USUBO_CARRRY follow getBooleanContents. NFC (#224764)

Use 'true' instead of '1'.

Follow up from post commit discussion in #223396.
DeltaFile
+5-4llvm/include/llvm/CodeGen/ISDOpcodes.h
+5-41 files

LLVM/project 51d2905llvm/lib/CodeGen/SelectionDAG DAGCombiner.cpp

[DAGCombiner] Restrict combineOrOfSetCCToUSUBOCarry to ZeroOrOneBooleanContent. (#224759)

We need to ensure the carry in matches boolean contents. We are checking
MaskedValueIsZero which is only valid for ZeroOrOneBooleanContent.

We could check ComputeNumSignBits for ZeroOrNegativeOneBooleanContent,
but no in tree target supports USUBO_CARRY and
ZeroOrNegativeOneBooleanContent.

This was an oversight in #223396 due to incorrect documentation for
USUBO_CARRY. I will fix that in a separate patch.
DeltaFile
+6-3llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+6-31 files

LLVM/project 66155d8llvm/include/llvm/CodeGen ISDOpcodes.h

[SelectionDAG] Document that ISD::ADDE/SUBE/ADDC/SUBC use glue. NFC (#224765)
DeltaFile
+6-6llvm/include/llvm/CodeGen/ISDOpcodes.h
+6-61 files

LLVM/project 3ae5ba8flang/lib/Semantics check-omp-syntax.cpp, flang/test/Semantics/OpenMP uses-allocators-version51.f90 uses-allocators-version50.f90

[flang][OpenMP] Reword some diagnostic messages, NFC

Instead of "something...something in OpenMP vX.Y on SOME clause" say
"something...something on SOME clause in OpenMP vX.Y".
DeltaFile
+4-4flang/test/Semantics/OpenMP/map-modifiers-v60.f90
+4-4flang/lib/Semantics/check-omp-syntax.cpp
+3-3flang/test/Semantics/OpenMP/uses-allocators-version50.f90
+3-3flang/test/Semantics/OpenMP/to-clause-v45.f90
+3-3flang/test/Semantics/OpenMP/from-clause-v45.f90
+2-2flang/test/Semantics/OpenMP/uses-allocators-version51.f90
+19-194 files not shown
+24-2410 files

LLVM/project fa360c3llvm/lib/Transforms/Scalar ConstraintElimination.cpp, llvm/test/Transforms/ConstraintElimination usub-with-overflow.ll uadd-with-overflow.ll

[ConstraintElim] Simplify all overflow intrinsics using isKnownNoWrap. (#224848)

Use isKnownNoWrap overload added in
https://github.com/llvm/llvm-project/pull/224758 to simplify all
supported overflowing math intrinsics.

Enables additional simplifications in a few more cases in 
https://github.com/dtcxzyw/llvm-opt-benchmark-nightly/pull/1368.

And more simplifications in Swift, which uses overflow intrinsics
extensively.

Compile-time impact in the noise:
https://llvm-compile-time-tracker.com/compare.php?from=7a02bcc9189b467efbb071ab25d99273fefc54da&to=9a224fd59f971aa94b0e3509dcceae3bffb7ec81&stat=instructions:u

PR: https://github.com/llvm/llvm-project/pull/224848
DeltaFile
+96-0llvm/test/Transforms/ConstraintElimination/mul-with-overflow.ll
+71-0llvm/test/Transforms/ConstraintElimination/uadd-with-overflow.ll
+18-34llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+11-22llvm/test/Transforms/ConstraintElimination/usub-with-overflow.ll
+196-564 files

LLVM/project 5250048llvm/lib/Target/Mips MipsSEInstrInfo.cpp MipsSEFrameLowering.cpp, llvm/test/CodeGen/Mips/cconv return-struct.ll callee-saved.ll

[Mips] Fix O32 lowering on 64-bit CPUs (#224937)

Use 32-bit GPR lowering for O32 while preserving the selected ISA and
FPR mode. Handle FP64 transfers through the stack when high-half moves
are unavailable.
DeltaFile
+124-0llvm/test/CodeGen/Mips/cconv/o32-mips64.ll
+63-0llvm/test/CodeGen/Mips/cconv/o32-fp64-gpr-moves.ll
+8-20llvm/lib/Target/Mips/MipsSEFrameLowering.cpp
+8-8llvm/test/CodeGen/Mips/cconv/callee-saved.ll
+6-6llvm/lib/Target/Mips/MipsSEInstrInfo.cpp
+4-4llvm/test/CodeGen/Mips/cconv/return-struct.ll
+213-3813 files not shown
+247-6719 files

LLVM/project 5640ecfllvm/lib/Target/AMDGPU R600InstrInfo.h GCNRegPressure.h, llvm/lib/Target/AMDGPU/MCTargetDesc AMDGPUInstPrinter.h

[AMDGPU] Remove dead function and method declarations (NFC) (#224889)

createLowerWWMCopiesPass:
Added on July 28, 2023 in commit
4d42e8b5d1fa87e49768d100dd1bc53515391e89 without a definition or any
callers.

createAMDGPUReserveWWMRegsPass:
Added on September 30, 2024 in commit
ac0f64f06d67a93817ccd9a3c529ad40920115c9 without a definition or any
callers.

createAMDGPUStructurizeCFGPass:
The definition and callers were removed on June 19, 2013 in commit
d46fce11412636ec9cca038e1f2b1addf1690f00.

AMDGPUTargetLowering::LowerSTORE:
The definition was split into R600TargetLowering::LowerSTORE and
SITargetLowering::LowerSTORE on February 11, 2016 in commit

    [55 lines not shown]
DeltaFile
+0-25llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.h
+0-8llvm/lib/Target/AMDGPU/GCNSchedStrategy.h
+0-5llvm/lib/Target/AMDGPU/GCNSubtarget.h
+0-4llvm/lib/Target/AMDGPU/AMDGPULibFunc.h
+0-3llvm/lib/Target/AMDGPU/R600InstrInfo.h
+0-3llvm/lib/Target/AMDGPU/GCNRegPressure.h
+0-486 files not shown
+0-5812 files

LLVM/project 6fbd0a3llvm/include/llvm/TargetParser AMDGPUTargetParser.h, llvm/lib/Target/AMDGPU AMDGPUAsmPrinter.cpp

[AMDGPU] Return zero LDS encoding granularity for dummy targets

Remove the redundant early return and assertion from getLDSEncodingGranule. Return zero when the target has no encoding granularity feature, and document and test the result for unknown and legacy generic targets.

Keep the existing 256-byte default in the assembly printer so compiling without a GPU still produces valid LDS sizes. Test default-target Mesa and PAL encodings and HSA metadata.

Change-Id: Ia0c69a0d7ce2858b31ee64100d37ae34bba6c42c
DeltaFile
+28-0llvm/test/CodeGen/AMDGPU/lds-size-default-device.ll
+10-4llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
+1-9llvm/lib/TargetParser/AMDGPUTargetParser.cpp
+2-2llvm/unittests/TargetParser/TargetParserTest.cpp
+1-0llvm/include/llvm/TargetParser/AMDGPUTargetParser.h
+42-155 files

LLVM/project 5318943llvm/docs/TableGen BackEnds.md BackEnds.rst, llvm/test/CodeGen/RISCV/rvv vector-interleave.ll vector-interleave-fixed.ll

Rebase, minor improvements/fixes

Created using spr 1.3.7
DeltaFile
+11,197-135llvm/test/CodeGen/RISCV/rvv/vector-interleave-fixed.ll
+1,847-1,277llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
+2,412-0llvm/docs/TableGen/ProgRef.md
+0-2,287llvm/docs/TableGen/ProgRef.rst
+0-1,213llvm/docs/TableGen/BackEnds.rst
+1,126-0llvm/docs/TableGen/BackEnds.md
+16,582-4,9121,632 files not shown
+58,448-29,9881,638 files

LLVM/project 0b44c51llvm/lib/CodeGen/SelectionDAG LegalizeIntegerTypes.cpp, llvm/test/CodeGen/AArch64 sve-vector-interleave-legalize.ll

[SDAG] Handle widened operands for scalable PromoteIntRes_CONCAT_VECTORS (#224274)
DeltaFile
+135-0llvm/test/CodeGen/AArch64/sve-vector-interleave-legalize.ll
+17-27llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
+152-272 files

LLVM/project 0de53b0llvm/lib/Target/LoongArch LoongArchMemoryBarrierOpt.cpp, llvm/test/CodeGen/LoongArch memory-barrier-opt.ll

[LoongArch] Drop asm part from memory barrier optimization pass (#223656)

Drop the inline asm part from #218597, which violates inline assembly
semantics.
DeltaFile
+74-724llvm/test/CodeGen/LoongArch/memory-barrier-opt.ll
+4-142llvm/lib/Target/LoongArch/LoongArchMemoryBarrierOpt.cpp
+78-8662 files

LLVM/project fbc2226llvm/include/llvm/CodeGen TargetInstrInfo.h, llvm/lib/CodeGen MachineVerifier.cpp

CodeGen: Pass instruction and operand index to isPCRelRegisterOperandLegal (#219420)

Replace the MachineOperand argument to the
TargetInstrInfo::isPCRelRegisterOperandLegal hook with the containing
instruction and operand index. The M68k implementation only used the
operand
to recover its parent instruction and operand number, so this drops the
dependence on MachineOperand::getParent().

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+8-10llvm/lib/Target/M68k/M68kInstrInfo.cpp
+5-3llvm/include/llvm/CodeGen/TargetInstrInfo.h
+2-1llvm/lib/Target/M68k/M68kInstrInfo.h
+1-1llvm/lib/CodeGen/MachineVerifier.cpp
+16-154 files

LLVM/project 04865d4llvm/lib/Target/M68k M68kInstrData.td, llvm/test/CodeGen/M68k inline-asm.ll

[M68k] Add Imm source for MOVE to CCR/SR (#207590)

closes #165077, just adds the imm addressing mode to MOVE to SR/CCR
DeltaFile
+16-0llvm/test/CodeGen/M68k/inline-asm.ll
+2-2llvm/lib/Target/M68k/M68kInstrData.td
+4-0llvm/test/MC/M68k/Data/Classes/MxMoveSR.s
+4-0llvm/test/MC/M68k/Data/Classes/MxMoveCCR.s
+26-24 files

LLVM/project dc1522bflang/test/Semantics/OpenMP requires09.f90 requires08.f90

[flang][OpenMP] Add -fopenmp-version flag to several tests

The default OpenMP version in flang is 3.1. A number of tests use features
added in later versions. They currently pass because the version validity
is not enforced in many cases. Set the OpenMP version explicitly to avoid
failures when the checks become more strict.
DeltaFile
+1-1flang/test/Semantics/OpenMP/requires09.f90
+1-1flang/test/Semantics/OpenMP/requires08.f90
+1-1flang/test/Semantics/OpenMP/requires07.f90
+1-1flang/test/Semantics/OpenMP/requires06.f90
+1-1flang/test/Semantics/OpenMP/requires03.f90
+1-1flang/test/Semantics/OpenMP/requires02.f90
+6-613 files not shown
+19-1919 files

LLVM/project e11e18dllvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer/AArch64 externally-used-copyables.ll

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+127-71llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+110-19llvm/test/Transforms/SLPVectorizer/AMDGPU/elementwise-fma-operand1.ll
+26-10llvm/test/Transforms/SLPVectorizer/SystemZ/non-power-2-subvector-extract.ll
+7-6llvm/test/Transforms/SLPVectorizer/AArch64/externally-used-copyables.ll
+8-4llvm/test/Transforms/SLPVectorizer/RISCV/strided-loads-with-external-indices.ll
+5-5llvm/test/Transforms/SLPVectorizer/RISCV/non-commutative-second-arg-only-copyable.ll
+283-1153 files not shown
+290-1229 files

LLVM/project 1e469c7llvm/lib/Target/RISCV RISCVInstrInfoXCV.td, llvm/test/MC/RISCV/corev XCVsimd-invalid.s XCVsimd.s

[RISCV] Fix immediate operand ranges for XCVsimd instructions (#224876)

See link:

-
https://docs.openhwgroup.org/projects/cv32e40p-user-manual/en/latest/instruction_set_extensions.html#simd-bit-manipulation-operations
-
https://docs.openhwgroup.org/projects/cv32e40p-user-manual/en/latest/instruction_set_extensions.html#simd-shuffle-and-pack-operations
DeltaFile
+63-64llvm/test/MC/RISCV/corev/XCVsimd.s
+35-36llvm/test/MC/RISCV/corev/XCVsimd-invalid.s
+14-7llvm/lib/Target/RISCV/RISCVInstrInfoXCV.td
+112-1073 files

LLVM/project 35a11e0orc-rt/lib/bedrock/sys/posix SocketHandle.cpp PageSize.cpp

[orc-rt] Drop emacs mode lines from .cpp files. (#224928)

These aren't needed for .cpp files where emacs can infer the mode from
the file extension.
DeltaFile
+1-1orc-rt/lib/bedrock/sys/posix/SocketHandle.cpp
+1-1orc-rt/lib/bedrock/sys/posix/PageSize.cpp
+1-1orc-rt/lib/bedrock/sys/posix/Memory.cpp
+1-1orc-rt/lib/bedrock/sys/posix/DynamicLibrary.cpp
+4-44 files

LLVM/project f28f0ballvm/lib/Target/X86 X86InstrInfo.cpp, llvm/test/CodeGen/X86/apx optimize-compare-multipred.mir

[X86][APX] Fix EFLAGS reuse across cycles (#223613)

optimizeCompareInstr's multi-predecessor NF reuse (added in
ab39c491430e) did not scan the below-CmpInstr region of CmpMBB when
CmpMBB was on a CFG cycle: that region is on the back-edge path but is
scanned by neither the caller nor the helper's predecessor walk. A
non-NF-convertible EFLAGS clobber there (e.g. an unrelated CMP feeding a
JCC, as in the reproducer below with VUCOMISS/CTEST/COPY-\$eflags) still
let the helper delete the redundant compare and mark \$eflags live-in on
CmpMBB. That broke the reused EFLAGS on iteration 2+ and tripped
X86FlagsCopyLowering's SuccMBB == TestMBB self-loop check with a fatal
report_fatal_error when a preexisting COPY \$eflags save/restore sat in
the cycle.

Reproducer: https://godbolt.org/z/s58j5zxqd

Detect CmpMBB on a cycle via a forward-reachability BFS on its
successors and, when so, scan from just after CmpInstr to the block's
end: bail on any non-NF-convertible EFLAGS clobber, stage NF-convertible

    [10 lines not shown]
DeltaFile
+323-0llvm/test/CodeGen/X86/apx/optimize-compare-multipred.mir
+41-8llvm/lib/Target/X86/X86InstrInfo.cpp
+364-82 files

LLVM/project 18397d8llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/lib/Transforms/Vectorize/SLPVectorizer SLPUtils.h SLPUtils.cpp

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+123-599llvm/test/Transforms/PhaseOrdering/X86/avg.ll
+20-136llvm/test/Transforms/SLPVectorizer/X86/extracted-subfields.ll
+133-0llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp
+128-2llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+9-0llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.h
+2-5llvm/test/Transforms/PhaseOrdering/AArch64/scalarize-load-ext-extract.ll
+415-7421 files not shown
+416-7477 files

LLVM/project 99da24bllvm/lib/Target/X86 X86ISelLowering.cpp

[X86] getPSHUFShuffleMask - use PSHUFD/LW/HW decodes directly. NFC. (#224900)

Don't bother going through getTargetShuffleMask and checking for a
repeated lane mask when all we care about is the mask[4] permute mask -
PSHUFLW/HW don't even need the full 128-bit lane mask!
DeltaFile
+4-23llvm/lib/Target/X86/X86ISelLowering.cpp
+4-231 files

LLVM/project 3357938llvm/include/llvm/Analysis ScalarEvolutionExpressions.h

[SCEV] Increase RewriteMap default size (NFC). (#224864)

The old automatic default of 4 inline buckets meant that in practice we
were frequently hitting the grow path to 64 buckets, causing unnecessary
memory traffic.

SCEVRewriteVisitor is used each time loop guards are applied and the new
default improves compile-time slightly for SCEV-heavy workloads. Geomean
improves by -0.03%, but mafft and lencod see bigger wins:

https://llvm-compile-time-tracker.com/compare.php?from=7c55ad084c8b1503cafa42c60d88bff65919c9fa&to=c1f14fba38c4cd7b282709d8bd9481d28642b2c6&stat=instructions:u

It mostly makes applying loop guards cheaper, making it easier to use in
more places in the future.

PR: https://github.com/llvm/llvm-project/pull/224864
DeltaFile
+1-1llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h
+1-11 files

LLVM/project 5363b70llvm/test/Transforms/SLPVectorizer/PowerPC extracted-subfields-be.ll, llvm/test/Transforms/SLPVectorizer/X86 extracted-subfields.ll

[SLP][NFC]Add extra tests for bitcasts-based vectorization, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/224916
DeltaFile
+120-0llvm/test/Transforms/SLPVectorizer/PowerPC/extracted-subfields-be.ll
+74-4llvm/test/Transforms/SLPVectorizer/X86/extracted-subfields.ll
+194-42 files

LLVM/project aa6b03eclang/lib/AST/ByteCode InterpState.cpp Compiler.cpp, clang/lib/Serialization ASTReaderDecl.cpp

[clang][bytecode] Notify bytecode interpreter after deserializing constant global declarations (#198062)

The problem looks something like this:

```c++
extern const int m;
constexpr int getm() { return m; }

const int m = 12;
static_assert(getm() == 12);
```

The generated bytecode for `getm()` references a global variable stored
in `interp::Program`. This variable is uninitialized when the bytecode
is generated, but since it's extern, that's not diagnosed (because it
might be initialized later).

When we parse the redeclaration of `m` on line 4, we evaluate its
initializer via `Expr::EvaluateAsInitializer`, which makes the bytecode

    [15 lines not shown]
DeltaFile
+25-0clang/test/AST/ByteCode/module-redecl1.cpp
+20-1clang/lib/AST/ByteCode/Program.cpp
+19-0clang/lib/AST/ByteCode/Compiler.cpp
+15-3clang/lib/AST/ByteCode/InterpState.cpp
+11-1clang/lib/Serialization/ASTReaderDecl.cpp
+8-0clang/test/Modules/pr102360.cppm
+98-59 files not shown
+131-615 files

LLVM/project 67cb38cllvm/lib/Transforms/HipStdPar HipStdPar.cpp, llvm/test/Transforms/HipStdPar math-fixup.ll

[HIPSTDPAR] Add `sincos` support (#224620)

The math fixup pass for `hipstdpar` only supported standard library math
functions. Due to #194616, combining `sin` + `cos` into `sincos` becomes
possible, so whilst `sincos` itself is not (yet) a standard library
interface, it has to be handled as well. This extends the set of covered
intrinsics to include it.
DeltaFile
+15-0llvm/test/Transforms/HipStdPar/math-fixup.ll
+1-0llvm/lib/Transforms/HipStdPar/HipStdPar.cpp
+16-02 files

LLVM/project 6e505dbclang/test/Parser decltype-crash.cpp

[clang][test] Add regression test for invalid 'int decltype {}' (#224855)

The parser crash on `int decltype {}` was fixed by #211221, but the test
it added only covers the `= 0` forms. Add the brace-init form reported
in the issue.

Fixes #165246
DeltaFile
+5-0clang/test/Parser/decltype-crash.cpp
+5-01 files

LLVM/project 2ef9033clang/lib/AST/ByteCode DynamicAllocator.h InterpState.h

[clang][bytecode] Use InterpState's allocator in DynamicAllocator (#224893)

This saves us yet another BumpPtrAllocator.
DeltaFile
+5-3clang/lib/AST/ByteCode/InterpState.h
+3-3clang/lib/AST/ByteCode/DynamicAllocator.h
+8-62 files

LLVM/project bfd1ec2llvm/lib/Target/PowerPC PPCMIPeephole.cpp, llvm/test/CodeGen/PowerPC peephole-elim-extsw-subreg-input.mir

PPC: Fold 64-bit zero-extending word load feeding extsw subregister

A gprc LWZ/LWZX feeding EXTSW_32_64 is rewritten into a sign-extending
LWA/LWAX load. Extend the same fold to the 64-bit zero-extending word
loads LWZ8/LWZX8 when the EXTSW_32_64 reads their sub_32 subregister,
producing a single LWA/LWAX instead of a redundant lwz+extsw pair.

Co-authored-by: Claude (Claude Opus 4.8, claude-opus-4-8) <noreply at anthropic.com>
DeltaFile
+17-18llvm/test/CodeGen/PowerPC/peephole-elim-extsw-subreg-input.mir
+11-3llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
+28-212 files