llvm-project/llvm/lib/CodeGen/GlobalISel
Amara Emerson 95ac3d15e9 [AArch64][GlobalISel] Add G_VECREDUCE fewerElements support for full scalarization.
For some reductions like G_VECREDUCE_OR on AArch64, we need to scalarize
completely if the source is <= 64b. This change adds support for that in
the legalizer. If the source has a pow-2 num elements, then we can do
a tree reduction using the scalar operation in the individual elements.
Otherwise, we just create a sequential chain of operations.

For AArch64, we only need to scalarize if the input is <64b. If it's great than
64b then we can first do a fewElements step to 64b, taking advantage of vector
instructions until we reach the point of scalarization.

I also had to relax the verifier checks for reductions because the intrinsics
support <1 x EltTy> types, which we lower to scalars for GlobalISel.

Differential Revision: https://reviews.llvm.org/D108276
2021-08-19 16:38:52 -07:00
..
CMakeLists.txt [globalisel][legalizer] Separate the deprecated LegalizerInfo from the current one 2021-06-01 13:23:48 -07:00
CSEInfo.cpp [GISel] Print better error messages for missing Combiner Observer calls 2021-07-01 15:18:18 -07:00
CSEMIRBuilder.cpp [GlobalISel] Constant fold G_SITOFP and G_UITOFP in CSEMIRBuilder 2021-07-27 11:27:58 +01:00
CallLowering.cpp GlobalISel: Remove some mystery code that clears isReturned 2021-07-19 20:21:05 -04:00
Combiner.cpp [GISel] Print better error messages for missing Combiner Observer calls 2021-07-01 15:18:18 -07:00
CombinerHelper.cpp [GlobalISel] Add combine for PTR_ADD with regbanks 2021-08-17 13:58:16 +02:00
GISelChangeObserver.cpp GlobalISel: Use Register 2020-08-19 13:45:31 -04:00
GISelKnownBits.cpp [GlobalISel][KnownBits] Implement G_CTPOP 2021-08-06 09:48:39 -07:00
GlobalISel.cpp
IRTranslator.cpp [GlobalISel] Add IRTranslator support for G_ISNAN 2021-08-18 10:48:10 -07:00
InlineAsmLowering.cpp [AArch64] Legalize MVT::i64x8 in DAG isel lowering 2021-07-31 09:51:28 +01:00
InstructionSelect.cpp [AArch64][GlobalISel] Enable use of the optsize predicate in the selector. 2021-03-02 12:55:51 -08:00
InstructionSelector.cpp [GlobalISel] Add missing operand update when copy is required 2021-01-20 10:32:52 +01:00
LegacyLegalizerInfo.cpp [GlobalISel] NFC: Change LLT::vector to take ElementCount. 2021-06-24 11:26:12 +01:00
LegalityPredicates.cpp GlobalISel: Use LLT in memory legality queries 2021-06-30 17:44:13 -04:00
LegalizeMutations.cpp [GlobalISel] NFC: Change LLT::vector to take ElementCount. 2021-06-24 11:26:12 +01:00
Legalizer.cpp [GlobalISel] Add a new artifact combiner for unmerge which looks through general artifact expressions. 2021-07-09 22:35:00 -07:00
LegalizerHelper.cpp [AArch64][GlobalISel] Add G_VECREDUCE fewerElements support for full scalarization. 2021-08-19 16:38:52 -07:00
LegalizerInfo.cpp GlobalISel: Use LLT in memory legality queries 2021-06-30 17:44:13 -04:00
Localizer.cpp [CodeGen] Use range-based for loops (NFC) 2021-02-20 21:46:02 -08:00
LostDebugLocObserver.cpp Give helpers internal linkage. NFC. 2020-04-25 11:50:52 +02:00
MachineIRBuilder.cpp CodeGen: Store LLT instead of uint64_t in MachineMemOperand 2021-06-29 17:38:51 -04:00
RegBankSelect.cpp [GlobalISel] Fix crash in RBS with a non-generic IMPLICIT_DEF. 2021-03-24 23:08:51 -07:00
RegisterBank.cpp [GlobalISel] Use ListSeparator (NFC) 2021-02-04 21:18:04 -08:00
RegisterBankInfo.cpp [CodeGen] Use llvm::append_range (NFC) 2021-01-21 19:59:46 -08:00
Utils.cpp [GlobalISel] Constant fold G_SITOFP and G_UITOFP in CSEMIRBuilder 2021-07-27 11:27:58 +01:00