LLVM/project 024a691llvm/lib/Transforms/Vectorize VPlanTransforms.cpp, llvm/test/Transforms/LoopVectorize/AArch64 vector-reverse.ll

[VPlan] Pull out reverses and splice.lefts from elementwise operations (#199234)

InstCombine pulls reverses up and out of operations, e.g.
`binop(reverse(x), reverse(y)) -> reverse(binop(x,y))`. This reduces the
overall number of reverses, and also allows the `reverse(reverse(x))`
combine to kick in much more.

This implements the same canonicalization in VPlan which allows for more
vectorization due to cost model improvements, and generally handles more
cases when there's predication involved. 

If we have a reversed load and reversed store whose stores are now
eliminated, we will be left with just two reversed masks on the load and
store. But with EVL tail folding this will leave behind a
`splice.right(ops(splice.left(...)))` pair on the value from memory.

InstCombine can fold away a pair of `vp.reverse(ops(vp.reverse(...)))`,
but it can't fold a pair of splices. So to prevent regressions we also
have to pull splice.lefts like `ops(splice.left(poison, x, evl)) ->

    [2 lines not shown]
DeltaFile
+139-54llvm/test/Transforms/LoopVectorize/ARM/tail-folding-counting-down.ll
+86-55llvm/test/Transforms/LoopVectorize/X86/masked_load_store.ll
+36-36llvm/test/Transforms/LoopVectorize/PowerPC/optimal-epilog-vectorization.ll
+18-50llvm/test/Transforms/LoopVectorize/RISCV/riscv-vector-reverse.ll
+66-0llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+18-12llvm/test/Transforms/LoopVectorize/AArch64/vector-reverse.ll
+363-20712 files not shown
+401-26618 files

LLVM/project 2f07e6bclang/include/clang/AST TypeBase.h, clang/lib/AST Type.cpp

[Clang] Fix missing vtable for `dynamic_cast<FinalClass &>(*this)` in a function template (#207349)

This is a follow-up to #202594, which fixed a pointer cast, but not
a reference cast. Surprisingly, `CXXDynamicCastExpr::getType()`
for a reference cast is a `RecordType` and not a `ReferenceType`.

How this happens:
In `Sema::BuildCXXNamedCast`, a `CastOperation Op` variable
is constructed. The `CastOperation` constructor initializes
`ResultType(destType.getNonLValueExprType(S.Context))`
where `QualType::getNonLValueExprType` turns a `ReferenceType` into
a `RecordType`. `Sema::BuildCXXNamedCast` then passes `Op.ResultType`
to `CXXDynamicCastExpr::Create`.
DeltaFile
+14-0clang/test/CodeGenCXX/dynamic-cast-exact.cpp
+4-1clang/lib/Sema/SemaTemplateInstantiate.cpp
+1-1clang/include/clang/AST/TypeBase.h
+1-1clang/lib/AST/Type.cpp
+20-34 files

LLVM/project 5f33a29llvm/lib/Transforms/Vectorize VPlanValue.h VPlanTransforms.cpp

[VPlan] Introduce VPConstant VPIRValue (NFC) (#207387)

There a gap in the VPIRValue class hierarchy, where constant live-ins
are absent, when this is in fact a very common case. The motivation of
introducing this new class is to refine optimizations to account for the
fact that non-constant live-ins need broadcast.
DeltaFile
+19-5llvm/lib/Transforms/Vectorize/VPlanValue.h
+3-4llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+22-92 files

LLVM/project d582a7dflang-rt/lib/runtime io-api-server.cpp

[flang-rt] Fix io-api-server when building for arm64ec (#207998)
DeltaFile
+5-0flang-rt/lib/runtime/io-api-server.cpp
+5-01 files

LLVM/project dd37265llvm/include/llvm/Transforms/Utils Local.h BasicBlockUtils.h, llvm/lib/CodeGen CodeGenPrepare.cpp

[CodeGenPrepare] Cache known-live PHIs when deleting dead PHI chains (#207191)

This patch fixes a compile-time issue in CodeGenPrepare for huge
functions.

`DeleteDeadPHIs` may repeatedly prove overlapping PHI chains non-dead.
For very large functions, many PHIs can share the same non-dead def-use
suffix, causing the same suffix to be scanned many times.

Add an `KnownNonDeadPHIs` cache to `RecursivelyDeleteDeadPHINode`
and `DeleteDeadPHIs`. When a chain is proven non-dead, visited PHIs are
recorded so later queries can stop once they reach one of them.

This reduces the pathological CodeGenPrepare case from ~30mins to ~30s.
DeltaFile
+14-5llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
+16-3llvm/lib/Transforms/Utils/Local.cpp
+5-4llvm/include/llvm/Transforms/Utils/Local.h
+4-3llvm/include/llvm/Transforms/Utils/BasicBlockUtils.h
+2-1llvm/lib/CodeGen/CodeGenPrepare.cpp
+41-165 files

LLVM/project 0b8d6efflang/lib/Optimizer/OpenMP HostOpFiltering.cpp, flang/test/Lower/OpenMP function-filtering-4.f90 host-eval.f90

[Flang][MLIR][OpenMP] Move host op filtering to the omp dialect

The MLIR pass that removes operations exclusively intended for the host
from OpenMP target offload modules is currently defined as part of
Flang. However, this is a feature that would benefit from being reusable
by other frontends, as removing such operations is a requirement for all
OpenMP target device modules prior to LLVM IR translation.

By moving the `omp-host-op-filtering` pass out of Flang, it had to be
updated to work on a lower-level LLVM dialect-based representation,
rather than FIR. This simplified some of the existing edge cases, such
as `fir.declare` ops and `fir.boxchar` type handling. In addition, new
function arguments are introduced as placeholders and return values from
host-only functions are removed, producing a cleaner result and
simplifying the pass as compared to previously.

As a result of a later execution of this pass, dynamic dispatch of host
functions via dispatch table using `fir.dispatch`, `fir.type_info` and
`fir.dt_entry` ops would break due to the removal of `fir.dt_entry`

    [6 lines not shown]
DeltaFile
+0-560flang/test/Transforms/OpenMP/function-filtering-host-ops.mlir
+500-0mlir/test/Dialect/OpenMP/host-op-filtering.mlir
+0-422flang/lib/Optimizer/OpenMP/HostOpFiltering.cpp
+292-0mlir/lib/Dialect/OpenMP/Transforms/HostOpFiltering.cpp
+63-0flang/test/Lower/OpenMP/function-filtering-4.f90
+18-32flang/test/Lower/OpenMP/host-eval.f90
+873-1,0147 files not shown
+920-1,04613 files

LLVM/project fdfdcb6flang/lib/Optimizer/OpenMP HostOpFiltering.cpp, flang/test/Transforms/OpenMP function-filtering-host-ops.mlir

[Flang][MLIR][OpenMP] Fix declare_target globals visibility

This patch introduces various changes to the handling of
`declare_target` global variables in Flang:
- Non-`declare_target` globals are unconditionally made "internal" when
  compiling for an OpenMP offload target. This prevents potential symbol
  redefinition issues related to globals that don't actually exist on the
  device.
- Local SAVE variables handling for OpenMP offloading programs is fixed to
  prevent their associated "internal" linkage from producing broken
  device code for `declare_target enter(...)`.
- When globals are indirectly accessed from the target device (e.g.
  `declare_target link(...)`), the associated and unused full-storage
  global is marked with "internal" linkage to facilitate later removal.
- `declare_target device_type(host) enter(...)` variables are set to
  external linkage when compiling for a target device, causing linker
  errors if accessed. This mirrors Clang's behavior.
DeltaFile
+252-0mlir/test/Target/LLVMIR/omptarget-declare-target-all-device-types-device.mlir
+44-9mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
+20-5flang/lib/Optimizer/OpenMP/HostOpFiltering.cpp
+17-4flang/test/Transforms/OpenMP/function-filtering-host-ops.mlir
+1-0mlir/test/Target/LLVMIR/omptarget-declare-target-llvm-device.mlir
+334-185 files

LLVM/project cd85482llvm/lib/Target/AArch64 AArch64MacroFusion.cpp, llvm/test/CodeGen/AArch64 misched-fusion-arith-cbz.mir misched-fusion-arith-cbz.ll

[AArch64] Add missing arithmetic to arith+cb(n)z clustering (#203721)

This patch adds a few missing opcodes for arithmetic+CB(N)Z clustering.
Most of them complement an already existing rr/rs variant for
pre/post-RA coverage. The only one which is completely new is ORN which
I think can be reasonably expected to behave similarly on AArch64
targets.
DeltaFile
+506-0llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.mir
+144-0llvm/test/CodeGen/AArch64/misched-fusion-arith-cbz.ll
+10-0llvm/lib/Target/AArch64/AArch64MacroFusion.cpp
+660-03 files

LLVM/project 293a55cllvm/test/CodeGen/AArch64/GlobalISel inline-memcpy.mir inline-memmove.mir

[GlobalISel][AArch64] Remove IRs from inline-{memcpy,memmove} tests (NFC) (#208066)
DeltaFile
+62-111llvm/test/CodeGen/AArch64/GlobalISel/inline-memcpy.mir
+43-85llvm/test/CodeGen/AArch64/GlobalISel/inline-memmove.mir
+105-1962 files

LLVM/project dcf1b8fclang/include/clang/AST DeclFriend.h, clang/lib/AST ASTImporter.cpp

[Clang] support friend declarations with a dependent nested-name-specifier (#191268)

Fixes #104057

---

This patch adds support for friend declarations with a dependent NNS
DeltaFile
+658-105clang/lib/Sema/SemaAccess.cpp
+257-10clang/test/CXX/temp/temp.decls/temp.friend/p5.cpp
+131-90clang/lib/Sema/SemaDeclCXX.cpp
+137-58clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+24-101clang/include/clang/AST/DeclFriend.h
+92-18clang/lib/AST/ASTImporter.cpp
+1,299-38235 files not shown
+1,822-59241 files

LLVM/project eb4690cflang/include/flang/Evaluate tools.h, flang/lib/Evaluate tools.cpp

[flang][Lower] Add alternative real expression lowering (#207371)

This is opt-in by an engineering option and disabled by default.

In section 10.1.5.2.4 of the 2023 Fortran standard "Evaluation of
numerical intrinsic operations", the standard explicitly allows
alternate mathematically equivalent lowerings. For example the source
expression X + Y + Z could be evaluated (X + Y) + Z, X + (Y + Z) or even
(X + Z) + Y, etc.

The open source benchmark SNBone shows significantly better results with
classic flang because classic flang emits real arithmetic expressions in
a different order. In the case of this benchmark it reduces dependency
depth for instructions issued to the vector unit, allowing for more of
the arithmetic to be parallelised over multiple vector execution units
in the ALU.

The lowering added by this patch tries to mimic the way classic flang
orders instructions for these expressions. I did not read any classic

    [32 lines not shown]
DeltaFile
+748-0flang/test/Lower/split-sum-expression-tree-lowering.f90
+148-0flang/lib/Evaluate/tools.cpp
+21-0flang/include/flang/Evaluate/tools.h
+16-1flang/lib/Lower/Bridge.cpp
+1-0flang/lib/Lower/ConvertExprToHLFIR.cpp
+934-15 files

LLVM/project e1f7b53lld/COFF Driver.cpp, lld/test/COFF arm64x-hybridobj.s

[LLD][COFF] Add support for multi-arch ARM64X object files (#207868)
DeltaFile
+98-0lld/test/COFF/arm64x-hybridobj.s
+12-0lld/COFF/Driver.cpp
+110-02 files

LLVM/project 9ab13dcmlir/lib/Conversion/ComplexToSPIRV ComplexToSPIRV.cpp, mlir/test/Conversion/ComplexToSPIRV complex-to-spirv.mlir

[mlir][ComplexToSPIRV] Add lowering for complex.eq and complex.neq (#206279)
DeltaFile
+40-0mlir/test/Conversion/ComplexToSPIRV/complex-to-spirv.mlir
+34-0mlir/lib/Conversion/ComplexToSPIRV/ComplexToSPIRV.cpp
+74-02 files

LLVM/project 17b27e7llvm/lib/Target/AArch64 AArch64TargetTransformInfo.cpp AArch64Processors.td, llvm/test/Analysis/CostModel/AArch64 mul.ll

[AArch64] Increase the relative cost of vector i64 multiply on Neoverse V3ae. (#207723)

The throughput of vector nxv2i64 multiplies on neoverse v3ae is 1/2, compared
to the throughput of 2 for integer multiplies. This large difference can mean
it is more profitable than normal to use scalar loops as opposed to vectorization.

This adds a subtarget feature that increases the cost multiple by 4 for 64bit
vector multiplies for specific CPUs. The cost model of llvm does not mean that
we can model throughputs correctly, but this should help. The same feature is
added to N2 as it has a similar difference between vector and scalar multiply
cost throughputs.
DeltaFile
+81-34llvm/test/Analysis/CostModel/AArch64/mul.ll
+12-3llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+4-2llvm/lib/Target/AArch64/AArch64Processors.td
+5-0llvm/lib/Target/AArch64/AArch64Features.td
+102-394 files

LLVM/project cab8babllvm/lib/Transforms/Vectorize VPlanTransforms.cpp

[VPlan] Forbid CSE'ing writes (NFC) (#207443)

CSE'ing two identical writes does not consider the fact that there could
be another write that writes an aliasing memory location. Fix the
potential miscompile. Note that there is currently no miscompile, as we
never remove a write, but the patch has the benefit of not processing
writes unnecessarily.
DeltaFile
+2-4llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+2-41 files

LLVM/project 9b2d699clang/include/clang/Basic DiagnosticSemaKinds.td, clang/lib/Sema SemaAMDGPU.cpp SemaDeclCXX.cpp

Update implementation
DeltaFile
+19-13clang/test/SemaCXX/amdgpu-barrier.cpp
+19-13clang/test/SemaHIP/amdgpu-barrier.hip
+12-13clang/lib/Sema/SemaAMDGPU.cpp
+7-8clang/include/clang/Basic/DiagnosticSemaKinds.td
+13-0clang/lib/Sema/SemaDeclCXX.cpp
+9-1clang/test/CodeGenHIP/amdgpu-barrier-type.hip
+79-482 files not shown
+82-518 files

LLVM/project f37d895llvm/lib/Target/AArch64 AArch64SchedC1Nano.td, llvm/test/CodeGen/AArch64 shuffle-tbl34.ll

rebase

Created using spr 1.3.8-wip
DeltaFile
+20,241-21,265llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+5,013-5,520llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.512bit.ll
+1,371-1,626llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.320bit.ll
+1,268-939llvm/lib/Target/AArch64/AArch64SchedC1Nano.td
+635-973llvm/test/CodeGen/AMDGPU/bf16.ll
+735-454llvm/test/CodeGen/AArch64/shuffle-tbl34.ll
+29,263-30,7771,409 files not shown
+67,110-53,2481,415 files

LLVM/project 5f8b466llvm/lib/Target/AArch64 AArch64SchedC1Nano.td, llvm/test/CodeGen/AArch64 shuffle-tbl34.ll

[spr] changes introduced through rebase

Created using spr 1.3.8-wip

[skip ci]
DeltaFile
+20,241-21,265llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+5,013-5,520llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.512bit.ll
+1,371-1,626llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.320bit.ll
+1,268-939llvm/lib/Target/AArch64/AArch64SchedC1Nano.td
+635-973llvm/test/CodeGen/AMDGPU/bf16.ll
+735-454llvm/test/CodeGen/AArch64/shuffle-tbl34.ll
+29,263-30,7771,409 files not shown
+67,110-53,2481,415 files

LLVM/project 74e44e4llvm/test/tools/llvm-ar arm64x-hybridobj.yaml, llvm/test/tools/llvm-lib arm64x-hybridobj.yaml

[llvm-readobj][llvm-ar][COFF] Use exclude for .obj.arm64ec section in tests (NFC) (#208116)

For consistency with #207612.
DeltaFile
+3-4llvm/test/tools/llvm-readobj/COFF/arm64x-hybridobj.yaml
+1-1llvm/test/tools/llvm-ar/arm64x-hybridobj.yaml
+1-1llvm/test/tools/llvm-lib/arm64x-hybridobj.yaml
+5-63 files

LLVM/project 2955351llvm/lib/Target/RISCV RISCVISelLowering.cpp RISCVInstrInfoP.td, llvm/test/CodeGen/RISCV rvp-reverse.ll

[RISCV][P-ext] Improve codegen for packed reverse intrinsics (#207575)

This patch improves the codegen for vector reverse for RVP.
DeltaFile
+14-54llvm/test/CodeGen/RISCV/rvp-reverse.ll
+50-0llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+11-0llvm/lib/Target/RISCV/RISCVInstrInfoP.td
+75-543 files

LLVM/project 475cef6llvm/lib/CodeGen/SelectionDAG TargetLowering.cpp, llvm/test/CodeGen/AMDGPU amdgcn.bitcast.1024bit.ll amdgcn.bitcast.512bit.ll

[SelectionDAG][AMDGPU] Preserve known bits for demoted sret pointers (#203468)

AMDGPU marks sret pointers with high-zero known bits so stores can be
folded into MUBUF base+offset addressing. Explicit sret arguments keep
this information through an AssertZext, but implicit sret lowering
passes the hidden return pointer through `DemoteRegister` as a
`CopyToReg/CopyFromReg` pair, where the fact is not visible to
SelectionDAG known-bits queries.

Add a `TargetLowering` hook for sret pointer known bits and use a shared
helper to materialize those bits as an `AssertZext` for both explicit
and demoted sret pointers.


Validated with llvm-test-depends, the AMDGPU function-returns test, and
the full llvm/test/CodeGen suite.

Assisted-by: Codex


    [2 lines not shown]
DeltaFile
+17,697-18,587llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+4,011-4,454llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.512bit.ll
+823-1,034llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.320bit.ll
+635-973llvm/test/CodeGen/AMDGPU/bf16.ll
+200-401llvm/test/CodeGen/AMDGPU/function-returns.ll
+25-3llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+23,391-25,4526 files not shown
+23,421-25,48012 files

LLVM/project 3fc15b5llvm/lib/Analysis HashRecognize.cpp, llvm/test/Analysis/HashRecognize cyclic-redundancy-check.ll

[HashRecognize] Make `LHSAux` null if it is dead (#207231)

HashRecognize detects big-endian CRC loops with auxiliary data where the
bitwidth of `LHS` exceeds that of `LHSAux`. However, in this case,
`LHSAux` is zero-extended for the most significant bit check in each
iteration, and as such is effectively dead. Later optimization may even
miscompile in this case: for example, in the included
`crc16.be.tc8.zext.data` and `crc16.be.tc8.misalign` test cases,
`optimizeCRCLoop` emits `lshr i8 %crc.data.indexer, 8`, thereby creating
poison.

Since `LHSAux` is dead in this case, the user should receive a null
`LHSAux` instead.
DeltaFile
+92-2llvm/test/Transforms/LoopIdiom/cyclic-redundancy-check.ll
+46-1llvm/test/Analysis/HashRecognize/cyclic-redundancy-check.ll
+12-1llvm/lib/Analysis/HashRecognize.cpp
+150-43 files

LLVM/project 787dfd1llvm/lib/CodeGen/SelectionDAG SelectionDAGISel.cpp

[spr] initial version

Created using spr 1.3.8-wip
DeltaFile
+0-1llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+0-11 files

LLVM/project 764645bllvm/include/llvm/CodeGen TargetLowering.h, llvm/lib/CodeGen/SelectionDAG TargetLowering.cpp

[SDAG][X86] Support shrinking target-independent nodes (#206721)

X86 generally tries to shrink operations to work on smaller vector sizes
if possible. This happens in
SimplifyDemandedVectorEltsForTargetNode() for target-specific opcodes,
but it's currently not possible to do this for generic opcodes.

This introduces a getPreferredShrunkVectorSize() TLI hook to allow
shrinking generic ops based on demanded elements.

The primary motivation for this is to avoid regressions due to
https://github.com/llvm/llvm-project/pull/188489, which uplifts a
previously x86-specific node to become target-independent.

This PR enables the shrinking for fsub and fmul as examples.
Unfortunately, for many other ops we get various regressions, mostly
because horizontal operations are no longer formed.
DeltaFile
+27-0llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+26-0llvm/lib/Target/X86/X86ISelLowering.cpp
+9-9llvm/test/CodeGen/X86/vector-reduce-fmul-fast.ll
+8-8llvm/test/CodeGen/X86/avx512-intrinsics-fast-isel.ll
+13-0llvm/include/llvm/CodeGen/TargetLowering.h
+6-6llvm/test/CodeGen/X86/vector-narrow-binop.ll
+89-232 files not shown
+93-248 files

LLVM/project 302f7aallvm/lib/Transforms/Vectorize VectorCombine.cpp, llvm/test/Transforms/VectorCombine/X86 shuffle-of-binops-i1.ll

[VectorCombine] Fold concat(binop(a,c), binop(b,d)) -> binop(concat(a,b), concat(c,d)) for i1 vectors (#206087)

Fixes #205707 

`VectorCombine::foldShuffleOfBinops` rewrites `shuffle(binop(a,c),
binop(b,d))` into `binop(shuffle(a,b), shuffle(c,d))` but only when the
new form is strictly cheaper. For concat shuffles of i1 vectors, both
forms have equal cost, so the transform was silently rejected.

This fix allows the equal-cost transform when both binops are single-use
`BinaryOperators` (not icmps, to avoid widening narrow AVX-512
comparisons), canonicalising the IR to a wider binop.

The motivating case is AVX-512 mask operations: `NOT(concat(XOR(a,c),
XOR(b,d)))` becomes `NOT(XOR(concat(a,b), concat(c,d)))`, which the
backend naturally selects as `kxnorq`, reducing `kxord + kxord +
kunpckdq + knotq` (4 instructions) to `kunpckdq + kunpckdq + kxnorq` (3
instructions).
DeltaFile
+60-0llvm/test/Transforms/VectorCombine/X86/shuffle-of-binops-i1.ll
+11-0llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+71-02 files

LLVM/project 3451dd2llvm/lib/Target/AArch64 AArch64ISelLowering.cpp, llvm/test/CodeGen/AArch64 sve-select.ll fcmp.ll

[AArch64] Fold any/sign-extend of CSET. (#207414)

This is useful to enable selecting i64 CSETM when legalisation places an
extend between a CSET and sext_inreg.
DeltaFile
+22-44llvm/test/CodeGen/AArch64/sve-select.ll
+10-15llvm/test/CodeGen/AArch64/fcmp.ll
+8-14llvm/test/CodeGen/AArch64/arm64-fp128.ll
+10-0llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+2-6llvm/test/CodeGen/AArch64/sme-aarch64-svcount.ll
+2-4llvm/test/CodeGen/AArch64/arm64-neon-v1i1-setcc.ll
+54-831 files not shown
+55-857 files

LLVM/project 32d06afllvm/test/CodeGen/Thumb2 vqabs.ll vqneg.ll

[ARM][MVE] Tests for new sqabs and sqneg tests. NFC (#208180)
DeltaFile
+48-3llvm/test/CodeGen/Thumb2/vqabs.ll
+33-0llvm/test/CodeGen/Thumb2/vqneg.ll
+81-32 files

LLVM/project 529c7d5llvm/include/llvm/IR PassManagerInternal.h

[IR][NFC] Make PassConcept immovable (#208167)

PassConcept is only ever created as a unique_ptr when added to the pass
list of a pass manager. The instances are never copied or moved. Due to
inheritance, this also wouldn't work anyway. Explicitly forbid
copying/moving and remove the dead functions.

Preliminary work for removing the vtable from PassConcept/PassModel.
DeltaFile
+7-15llvm/include/llvm/IR/PassManagerInternal.h
+7-151 files

LLVM/project df1de1bclang/lib/CodeGen BackendUtil.cpp

[spr] initial version

Created using spr 1.3.8-wip
DeltaFile
+1-0clang/lib/CodeGen/BackendUtil.cpp
+1-01 files

LLVM/project e118783llvm/lib/Target/AArch64 AArch64ISelLowering.cpp, llvm/test/CodeGen/AArch64 div-i256.ll sbc-add-constant.ll

[AArch64][DAG] Port adde and sube combine to AArch64 (#202227)

Same principles apply in AArch64 as they do in ARM.
DeltaFile
+357-368llvm/test/CodeGen/AArch64/div-i256.ll
+60-0llvm/test/CodeGen/AArch64/sbc-add-constant.ll
+30-3llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+447-3713 files