LLVM/project aaf879c — llvm/test/Transforms/LoopVectorize/VPlan vplan-printing.ll cse-loads.ll, llvm/test/Transforms/LoopVectorize/X86/CostModel masked-store-i64.ll masked-store-i32.ll

[VPlan] Pass alignment explicitly to widen load/store recipes (NFC). (#237639)

Replace alignment lookup from underlying IR to explicitly storing it for
the recipe.

Preparation for fixing a miscompile with incorrect alignment when
narrowing interleave groups.

NFC except for the printed VPlans.
DeltaFile
+46-46llvm/test/Transforms/LoopVectorize/VPlan/cse-loads.ll
+22-22llvm/test/Transforms/LoopVectorize/VPlan/vplan-printing.ll
+16-16llvm/test/Transforms/LoopVectorize/X86/CostModel/masked-store-i64.ll
+16-16llvm/test/Transforms/LoopVectorize/X86/CostModel/masked-store-i32.ll
+16-16llvm/test/Transforms/LoopVectorize/X86/CostModel/masked-load-i64.ll
+16-16llvm/test/Transforms/LoopVectorize/X86/CostModel/masked-load-i32.ll
+132-13217 files not shown
+253-23723 files

LLVM/project 9cc317f — llvm/lib/Transforms/Vectorize VPlanRecipes.cpp VPlanLowering.cpp

[VPlan] Store parent via ilist_parent, use iterator-only APIs (NFC) (#236659)

Store the parent VPBasicBlock of recipes in the ilist node via
ilist_parent<VPBasicBlock>, like Instruction/BasicBlock. This also gives
the list sentinel a parent, so any iterator into a recipe list,
including end(), knows its block.

Use this to simplify the APIs that took a block together with an
iterator, mirroring IRBuilder's removal of the separate insertion block.

PR: https://github.com/llvm/llvm-project/pull/236659
DeltaFile
+22-25llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+21-20llvm/lib/Transforms/Vectorize/VPlan.h
+16-24llvm/lib/Transforms/Vectorize/LoopVectorizationPlanner.h
+13-17llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
+14-15llvm/lib/Transforms/Vectorize/VPlanLowering.cpp
+10-16llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+96-1177 files not shown
+124-14813 files

LLVM/project a1ea4b1 — llvm/lib/Target/X86 X86ISelLowering.cpp, llvm/test/CodeGen/X86 vector-fshr-rot-sub128.ll vector-fshl-rot-sub128.ll

[X86] LowerRotate - directly use X86 non-uniform var-shift nodes for generic fallback (#237645)

Skip vector shift legalization and use the X86ISD::VSHLV/VSRLV nodes
directly to handle the RotAmt=0 case, so to correctly handle the out of
bounds shift by EltSizeInBits.

Fixes #236022
DeltaFile
+5-2llvm/lib/Target/X86/X86ISelLowering.cpp
+2-4llvm/test/CodeGen/X86/vector-fshr-rot-sub128.ll
+2-4llvm/test/CodeGen/X86/vector-fshl-rot-sub128.ll
+9-103 files

LLVM/project f6444d6 — llvm/lib/Target/Sparc SparcPassRegistry.def LeonPasses.h, llvm/test/CodeGen/SPARC newpm-pipeline.ll

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

Created using spr 1.3.7

[skip ci]
DeltaFile
+379-392llvm/lib/Target/Sparc/DelaySlotFiller.cpp
+92-0llvm/test/CodeGen/SPARC/newpm-pipeline.ll
+91-0llvm/lib/Target/Sparc/SparcCodeGenPassBuilder.cpp
+3-24llvm/lib/Target/Sparc/LeonPasses.h
+24-3llvm/lib/Target/Sparc/Sparc.h
+21-0llvm/lib/Target/Sparc/SparcPassRegistry.def
+610-4195 files not shown
+638-43211 files

LLVM/project 40eadf8 — llvm/lib/Target/Sparc Sparc.h LeonPasses.cpp, llvm/test/CodeGen/SPARC newpm-pipeline.ll

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+379-392llvm/lib/Target/Sparc/DelaySlotFiller.cpp
+93-0llvm/test/CodeGen/SPARC/newpm-pipeline.ll
+91-0llvm/lib/Target/Sparc/SparcCodeGenPassBuilder.cpp
+11-25llvm/lib/Target/Sparc/LeonPasses.h
+24-11llvm/lib/Target/Sparc/LeonPasses.cpp
+31-3llvm/lib/Target/Sparc/Sparc.h
+629-4315 files not shown
+674-43611 files

LLVM/project d5730c2 — llvm/lib/Transforms/IPO AttributorAttributes.cpp Attributor.cpp, llvm/test/Transforms/Attributor callsite-returned-type-mismatch.ll

Attributor: Don't use callee return attributes for mismatched call types (#231629)

A call site returned position took the state and attributes of the
callee's returned position, even if the call uses a different return
type
than the callee, e.g. calling a void function as returning ptr. This
asserted in AANonNull::isImpliedByIR on the non-pointer callee return
type, and put the callee's nofpclass on calls returning another FP type.
Ignore the callee's returned position, and its returned arguments, if
the
types differ.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+118-0llvm/test/Transforms/Attributor/callsite-returned-type-mismatch.ll
+6-2llvm/lib/Transforms/IPO/Attributor.cpp
+5-0llvm/lib/Transforms/IPO/AttributorAttributes.cpp
+129-23 files

LLVM/project a4667ce — llvm/lib/Target/Sparc SparcISelDAGToDAG.cpp SparcPassRegistry.def, llvm/test/CodeGen/SPARC newpm-pipeline.ll

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

Created using spr 1.3.7

[skip ci]
DeltaFile
+379-392llvm/lib/Target/Sparc/DelaySlotFiller.cpp
+92-0llvm/test/CodeGen/SPARC/newpm-pipeline.ll
+91-0llvm/lib/Target/Sparc/SparcCodeGenPassBuilder.cpp
+24-3llvm/lib/Target/Sparc/Sparc.h
+21-0llvm/lib/Target/Sparc/SparcPassRegistry.def
+9-2llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp
+616-3973 files not shown
+629-3999 files

LLVM/project c93f7a1 — llvm/lib/Target/Sparc SparcPassRegistry.def LeonPasses.h, llvm/test/CodeGen/SPARC newpm-pipeline.ll

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+379-392llvm/lib/Target/Sparc/DelaySlotFiller.cpp
+92-0llvm/test/CodeGen/SPARC/newpm-pipeline.ll
+91-0llvm/lib/Target/Sparc/SparcCodeGenPassBuilder.cpp
+3-24llvm/lib/Target/Sparc/LeonPasses.h
+24-3llvm/lib/Target/Sparc/Sparc.h
+21-0llvm/lib/Target/Sparc/SparcPassRegistry.def
+610-4195 files not shown
+638-43211 files

LLVM/project da50442 — llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer/X86 ordered-reduction-root-deleted.ll phis-small-groups-full-register.ll

[SLP]Postpone small phi groups to build full register vectors

Small phi groups vectorized in the full-width stage took lanes from
wider vectors, producing 2-wide fma accumulators instead of 4-wide.
Postpone them, then try the candidates in prefix-first order at full
width, so phis from different groups with matching leading operands
get vectorized together.

Fixes #47830

Assisted-by: Cursor

Reviewers: RKSimon, bababuck

Pull Request: https://github.com/llvm/llvm-project/pull/234997
DeltaFile
+27-39llvm/test/Transforms/SLPVectorizer/X86/split-node-num-operands.ll
+37-25llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+13-16llvm/test/Transforms/SLPVectorizer/X86/phis-small-groups-full-register.ll
+8-19llvm/test/Transforms/SLPVectorizer/X86/ordered-reduction-root-deleted.ll
+85-994 files

LLVM/project 270eed4 — llvm/lib/Transforms/Vectorize VectorizeOptions.td SLPVectorizer.cpp, llvm/lib/Transforms/Vectorize/SLPVectorizer SLPMemoryUtils.h SLPMemoryUtils.cpp

[SLP]Raise slp-schedule-budget to 200000, cut scheduling cost

Skip the rest of the region once a root store bundle's members
depend on each other and no runtime alias check retry can follow.
Do not re-add deps on recalculation, drop the dedup sets, cache the
may-write flag. NFC at equal budget.

Compile time effect:
https://llvm-compile-time-tracker.com/compare.php?from=be19c86852838a6fad20db9f24ff9390c230c0e3&to=cb56bde14279f9906ef8b9329d855340ebbdd6de&stat=instructions:u

Assisted-by: Cursor

Reviewers: RKSimon, bababuck

Pull Request: https://github.com/llvm/llvm-project/pull/233866
DeltaFile
+238-107llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+28-0llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPMemoryUtils.cpp
+5-0llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPMemoryUtils.h
+1-1llvm/lib/Transforms/Vectorize/VectorizeOptions.td
+272-1084 files

LLVM/project 6ef90da — lld/ELF SyntheticSections.cpp EhFrame.cpp, lld/test/ELF riscv-eh-frame-hdr-zero-range.s loongarch-eh-frame-hdr-zero-range.s

Revert "Reland "[ELF] Omit zero-range FDEs from .eh_frame_hdr" (#235793)"

This reverts commit dd82beb95eb78576045a8a4e32d6e310fa0045ba.
DeltaFile
+0-26lld/ELF/EhFrame.cpp
+1-11lld/ELF/SyntheticSections.cpp
+3-3lld/test/ELF/eh-frame-hdr-zero-range.s
+3-3lld/test/ELF/eh-frame-fde-encoding.s
+2-2lld/test/ELF/riscv-eh-frame-hdr-zero-range.s
+2-2lld/test/ELF/loongarch-eh-frame-hdr-zero-range.s
+11-473 files not shown
+12-529 files

LLVM/project 325fce4 — lld/ELF SyntheticSections.h SyntheticSections.cpp, lld/test/ELF eh-frame-hdr-sdata8.s

Revert "[ELF] Parallelize .eh_frame_hdr table by moving it to writeTo (#235799)"

This reverts commit ba6c0ce2bc5da1b004ec0ad418f5002372041927.
DeltaFile
+67-89lld/ELF/SyntheticSections.cpp
+8-9lld/ELF/SyntheticSections.h
+3-5lld/test/ELF/eh-frame-hdr-sdata8.s
+78-1033 files

LLVM/project d3d70e4 — llvm/lib/Transforms/Vectorize VPlanTransforms.cpp LoopVectorize.cpp, llvm/test/Transforms/LoopVectorize outer-loop-unsupported.ll bitinsert-bitextract.ll

[LV] Scalarize `bitextract` and `bitinsert`
DeltaFile
+197-0llvm/test/Transforms/LoopVectorize/bitinsert-bitextract.ll
+89-0llvm/test/Transforms/LoopVectorize/X86/bitinsert-bitextract-cost.ll
+62-0llvm/test/Transforms/LoopVectorize/outer-loop-unsupported.ll
+14-1llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+8-0llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+3-0llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+373-11 files not shown
+375-17 files

LLVM/project 99a148b — llvm/lib/CodeGen/SelectionDAG TargetLowering.cpp

[TargetLowering] Don't call willNotOverflowSub in expandABD for ABDU with non-negative inputs. (#237338)

If the inputs are non-negative, then the difference between them
can never overflow so we don't need to call willNotOverflowSub.
DeltaFile
+6-2llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+6-21 files

LLVM/project 9840966 — llvm/lib/CodeGen/GlobalISel LegalizerHelper.cpp, llvm/test/CodeGen/AArch64/GlobalISel legalize-fshr.mir legalize-fshl.mir

[GlobalISel] Don't set disjoint flag in lowerFunnelShiftAsShifts if the shift amount may be undef. (#237061)

lowerFunnelShiftAsShifts uses isNonZeroModBitWidthOrUndef to choose the
X << C | Y >> (BW - C) expansion. Allowing undef there is fine for
picking the expansion, but it does not justify the disjoint flag on the
G_OR. If an undef shift amount is chosen to be 0 modulo BW, the two
operands of the or may have common set bits, and the disjoint flag would
make the result poison.

Only set the disjoint flag on this path if every element of the shift
amount is a constant that is non-zero modulo the bitwidth.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+72-0llvm/test/CodeGen/AArch64/GlobalISel/legalize-fshr.mir
+72-0llvm/test/CodeGen/AArch64/GlobalISel/legalize-fshl.mir
+66-0llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-fshl-fshr-rv64.mir
+7-1llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+217-14 files

LLVM/project 385495a — llvm/lib/Target/RISCV RISCVISelLowering.cpp

[RISCV][P-ext] Split RV32 v2i32 riscv_pmerge code from v4i16 and v8i8. (#237358)

Lower using extract_vector_elt and build_pair rather than bitcasts and
extract_subvector. This is a more straightforward lowering and may
preserve more optimization opportunities.

Assisted-by: Claude
DeltaFile
+25-15llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+25-151 files

LLVM/project b0d5bf8 — llvm/lib/CodeGen/SelectionDAG SelectionDAGISel.cpp

[SelectionDAGISel] Const-correct the RecordedNodes argument of IsPredicateKnownToFail. NFC (#237508)
DeltaFile
+1-1llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+1-11 files

LLVM/project 8b254e8 — compiler-rt/lib/profile InstrProfilingPlatformGPU.c, compiler-rt/test/profile/GPU instrprof-hip-select-counters.hip instrprof-hip-variable-step.hip

[compiler-rt][profile] Sum lane-varying GPU counter increments (#235978)

The GPU profiling helper adds each active lane's contribution to a
shared counter. Its `step` argument is the amount that lane contributes.
For an ordinary block counter, every active lane has step 1. For a
select counter, step is 1 when that lane's condition is true and 0
otherwise.

For example, consider a 64-lane wave executing this select:

  result = (threadIdx.x % 2 == 0) ? a : b;

All 64 lanes are active, but even lanes have step 1 and odd lanes have
step 0. The counter should increase by 32. The old helper multiplies
the first active lane's step by the number of active lanes, so it adds
64 instead. Being active does not mean a lane's step is 1.

Compiler-generated counter steps are zero or one. Use a ballot to find
the lanes with step 1 and count its set bits. The first active lane adds
that count to the counter. Use the same count for the optional uniform
counter when the whole wave is active.
DeltaFile
+125-0compiler-rt/test/profile/GPU/instrprof-hip-variable-step.hip
+51-0compiler-rt/test/profile/GPU/instrprof-hip-select-counters.hip
+7-5compiler-rt/lib/profile/InstrProfilingPlatformGPU.c
+183-53 files

LLVM/project 2e5d9fe — libcxx/test CMakeLists.txt, libcxx/utils/libcxx/test params.py

[libc++][test] Forward LLVM_USE_LINKER to Lit test suites

Serialize LLVM_USE_LINKER as a use_linker Lit parameter in libcxx, libcxxabi, and libunwind so test binaries link with -fuse-ld=<linker> instead of falling back to the compiler's default system linker.

Assisted-by: Gemini
Pull-request: https://github.com/llvm/llvm-project/pull/237635
DeltaFile
+7-0libcxx/utils/libcxx/test/params.py
+4-0libunwind/test/CMakeLists.txt
+4-0libcxxabi/test/CMakeLists.txt
+4-0libcxx/test/CMakeLists.txt
+19-04 files

LLVM/project de658e3 — libcxx/test CMakeLists.txt, libcxx/utils/libcxx/test params.py

[spr] update

Created using spr 2.0.0-beta.2
DeltaFile
+7-0libcxx/utils/libcxx/test/params.py
+4-0libunwind/test/CMakeLists.txt
+4-0libcxxabi/test/CMakeLists.txt
+4-0libcxx/test/CMakeLists.txt
+19-04 files

LLVM/project 2482814 — clang/lib/CodeGen CGDebugInfo.cpp

[clang] Hash the main file only once for DWARF 5 checksums (#228926)

While looking for things that already has a cached result, I noticed
that the main file's DWARF 5 checksum is computed twice: once in
`CreateCompileUnit` and again in the first `getOrCreateFile()`, even
though the CU already has it.

It's a nice small win on debug builds (−0.72% on sqlite3, −0.17%
geomean) and it shouldn't change any behaviour:


https://llvm-compile-time-tracker.com/compare.php?from=018a46162a84070109760677031bcd636ed6026e&to=a62389e40c98a33e23395ea69c4dc495d8aec263&stat=instructions%3Au
DeltaFile
+3-0clang/lib/CodeGen/CGDebugInfo.cpp
+3-01 files

LLVM/project 82b757f — libcxx/test/extensions/gnu/hash specializations.verify.cpp

[libc++][test] Avoid assert() in gnu/hash/specializations.verify.cpp

PR: https://github.com/llvm/llvm-project/pull/237485

Assisted-by: Gemini
DeltaFile
+1-2libcxx/test/extensions/gnu/hash/specializations.verify.cpp
+1-21 files

LLVM/project 2ab8df3 — llvm/lib/Transforms/Scalar LowerMatrixIntrinsics.cpp, llvm/test/Transforms/LowerMatrixIntrinsics multiply-fused-loops.ll multiply-fused-differing-addr-spaces.ll

[Matrix] Align copies of fused load operands to the load's alignment. (#237471)

Make sure the alloca create by getNonAliasingPointer uses the load's
alignemnt, if smaller than the alloca alignemnt. Otherwise the alloca is
not aligned enough and the load is UB.
DeltaFile
+16-16llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-differing-addr-spaces.ll
+4-4llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops.ll
+2-0llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp
+22-203 files

LLVM/project bfbe7e0 — llvm/test/tools/llubi intr_matrix_transpose.ll, llvm/tools/llubi/lib Interpreter.cpp

[llubi] Add support for llvm.matrix.transpose. (#237457)

The input is treated as a column-major Rows * Cols matrix and the result
is its Cols * Rows transpose.

PR: https://github.com/llvm/llvm-project/pull/237457
DeltaFile
+15-0llvm/test/tools/llubi/intr_matrix_transpose.ll
+14-0llvm/tools/llubi/lib/Interpreter.cpp
+29-02 files

LLVM/project 6029bb7 — llvm/include/llvm/MC MCAsmInfo.h, llvm/lib/CodeGen/AsmPrinter AsmPrinter.cpp

[MC][NVPTX] Don't emit .addrsig for NVPTX (#200678)

PTX has no `.addrsig` directive, but AsmPrinter emits `.addrsig` and
`.addrsig_sym` whenever `TargetOptions::EmitAddrsig` is set, so `llc
-addrsig` produces PTX that ptxas rejects.
lld always sets `EmitAddrsig` for LTO, so this affects NVPTX bitcode
compiled with `ld.lld --lto-emit-asm` (#200679).

Add `MCAsmInfo::HasAddrsigDirective` and clear it for NVPTX.
NVPTX triples default to the ELF object format, so checking the object
format would not exclude them.

Co-authored-by: Fangrui Song <i at maskray.me>
DeltaFile
+9-0llvm/test/CodeGen/NVPTX/no-addrsig.ll
+5-0llvm/include/llvm/MC/MCAsmInfo.h
+1-1llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+1-0llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp
+16-14 files

LLVM/project 6f2c693 — lld/ELF InputFiles.cpp Driver.cpp, lld/test lit.cfg.py

[ELF] Support NVPTX bitcode with --lto-emit-asm and --lto-emit-llvm (#200679)

rustc links NVPTX bitcode with a custom llvm-link/opt/llc pipeline
(rust-lang/rust#156921), which it would like to replace with lld.
lld rejects nvptx/nvptx64 bitcode because it cannot infer an `e_machine`
from the triple.

Map nvptx/nvptx64 bitcode to `EM_CUDA`, which serves only as an internal
tag for the LTO pipeline, and report an error unless `--lto-emit-asm` or
`--lto-emit-llvm` is specified.
Kernels are referenced only by the CUDA driver at run time, so they must
be exported (e.g. `--export-dynamic-symbol`, or `-shared` with a version
script) or LTO deletes them.

Valid PTX also requires #200678, which stops emitting `.addrsig` for
NVPTX.

Co-authored-by: Fangrui Song <i at maskray.me>
DeltaFile
+52-0lld/test/ELF/lto/nvptx-bitcode.ll
+4-0lld/ELF/Driver.cpp
+3-0lld/ELF/InputFiles.cpp
+1-0lld/test/lit.cfg.py
+60-04 files

LLVM/project d640cb5 — llvm/lib/Target/AMDGPU AMDGPUAttributor.cpp

[NFC][AMDGPU] Don't create call site AACallEdges for direct calls

AAAMDGPUMinAGPRAlloc and AAAMDGPUNoLDSDMA asked for a call site AACallEdges for
every call that is not an intrinsic, only to get its callees. For a direct call
whose callee has no callback metadata, that callee is the only one, so use it
directly, like AACallEdgesFunction does since #232616. Calls to callback brokers
still use AACallEdges, because thebroker also calls the callback target.

On a generated module with 2,001 functions and 15,986 calls,
-passes=amdgpu-attributor creates 2,001 instead of 11,987 abstract attributes,
and the median wall time goes from 95 ms to 84 ms.

This PR was assisted by AI but I reviewed all the changes.
DeltaFile
+36-27llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp
+36-271 files

LLVM/project 6630551 — clang/lib/AST Decl.cpp

[AST] Avoid duplicate isOutOfLine() calls (NFC) (#237621)

This is fairly expensive, so make sure we only call it once.

Improves compile-time for C++ code, by -0.4% on the clang build.

Suggested by LLM. Original motivation was to reduce ASLR noise on
beman-execution.
DeltaFile
+3-2clang/lib/AST/Decl.cpp
+3-21 files

LLVM/project 608de88 — llvm/lib/Transforms/IPO AttributorAttributes.cpp

[NFC][Attributor] Reach fixpoint in call site AACallEdges for direct calls

A direct call whose callee has no callback metadata only calls its callee, so
its call site AACallEdges cannot change after initialization. Add the edge in
initialize and reach a fixpoint there, instead of updating the attribute twice
to find out. AACallEdgesFunction already skips the call site attribute for such
calls since #232616; both now share getOnlyCallee().

Other attributes still create call site AACallEdges for direct calls, e.g.,
AAInterFnReachability and the AMDGPU attributor. On a generated module with
2,001 functions and 15,986 calls, this removes all updates of call site
AACallEdges. The total number of updates goes from 304,263 to 272,291 with
-passes=attributor, from 207,815 to 175,843 with -passes=attributor-light, and
from 35,977 to 16,005 with -passes=amdgpu-attributor. The wall time does not
change measurably on that module, because these updates are cheap.

This PR was assisted by AI but I reviewed all the changes.
DeltaFile
+21-2llvm/lib/Transforms/IPO/AttributorAttributes.cpp
+21-21 files

LLVM/project 8105147 — llvm/lib/Target/AMDGPU SIISelLowering.cpp, llvm/test/CodeGen/AMDGPU shufflevector.v3f16.v2f16.ll shufflevector.v3bf16.v2bf16.ll

[AMDGPU] Allow legal shuffles of four 16-bit lanes

Preserve packed 16-bit pairs so lowering can use op_sel and
v_pk_mov_b32 instead of extracting each half into a separate register.
Keep scalarization for other vector shapes to avoid inhibiting load
narrowing or introducing extra register copies.
DeltaFile
+51-76llvm/test/CodeGen/AMDGPU/shufflevector.v3f16.v3f16.ll
+51-76llvm/test/CodeGen/AMDGPU/shufflevector.v3bf16.v3bf16.ll
+7-9llvm/test/CodeGen/AMDGPU/shufflevector.v3f16.v2f16.ll
+7-9llvm/test/CodeGen/AMDGPU/shufflevector.v3bf16.v2bf16.ll
+8-4llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+124-1745 files