1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 04:22:57 +02:00
llvm-mirror/lib/CodeGen/SelectionDAG
Cong Hou 1e3109066e Detecte vector reduction operations just before instruction selection.
This patch detects vector reductions before instruction selection. Vector
reductions are vectorized reduction operations, and for such operations we have
freedom to reorganize the elements of the result as long as the reduction of them
stay unchanged. This will enable some reduction pattern recognition during
instruction combine such as SAD/dot-product on X86. A flag is added to
SDNodeFlags to mark those vector reduction nodes to be checked during instruction
combine.

To detect those vector reductions, we search def-use chains starting from the
given instruction, and check if all uses fall into two categories:

1. Reduction with another vector.
2. Reduction on all elements.

in which 2 is detected by recognizing the pattern that the loop vectorizer
generates to reduce all elements in the vector outside of the loop, which
includes several ShuffleVector and one ExtractElement instructions.


Differential revision: http://reviews.llvm.org/D15250

llvm-svn: 261070
2016-02-17 06:37:04 +00:00
..
CMakeLists.txt Rename TargetSelectionDAGInfo into SelectionDAGTargetInfo and move it to CodeGen/ 2016-01-27 16:32:26 +00:00
DAGCombiner.cpp [CodeGen] Document and use getConstant's splat-building feature. NFC. 2016-02-15 18:07:29 +00:00
FastISel.cpp [NFC] Replace several manual GEP loops with gep_type_iterator. 2016-01-20 00:26:52 +00:00
FunctionLoweringInfo.cpp Undo spurious change made in r256965 2016-01-07 04:31:35 +00:00
InstrEmitter.cpp [X86] Part 1 to fix x86-64 fp128 calling convention. 2015-12-03 22:02:40 +00:00
InstrEmitter.h [SDAG] Give InstrEmitter hidden visibility 2015-07-01 14:55:10 +00:00
LegalizeDAG.cpp [CodeGen] Prefer "if (SDValue R = ...)" to "if (R.getNode())". NFCI. 2016-02-09 22:54:12 +00:00
LegalizeFloatTypes.cpp Do not try to use i8 and i16 versions of FP_TO_U/SINT soft float library calls 2015-12-15 12:55:50 +00:00
LegalizeIntegerTypes.cpp [X86] Don't transform X << 1 to X + X during type legalization 2016-01-28 18:20:05 +00:00
LegalizeTypes.cpp Type legalizer for masked gather and scatter intrinsics. 2015-12-15 08:40:41 +00:00
LegalizeTypes.h SelectionDAG: Cleanup integer bin op promotion functions. 2015-12-19 17:18:43 +00:00
LegalizeTypesGeneric.cpp [X86] Part 1 to fix x86-64 fp128 calling convention. 2015-12-03 22:02:40 +00:00
LegalizeVectorOps.cpp [CodeGen] Document and use getConstant's splat-building feature. NFC. 2016-02-15 18:07:29 +00:00
LegalizeVectorTypes.cpp Type legalizer for masked gather and scatter intrinsics. 2015-12-15 08:40:41 +00:00
LLVMBuild.txt
ResourcePriorityQueue.cpp Fix some comment typos. 2015-08-08 18:27:36 +00:00
ScheduleDAGFast.cpp Replace uint16_t with the MCPhysReg typedef in many places. A lot of physical register arrays already use this typedef. 2015-12-05 07:13:35 +00:00
ScheduleDAGRRList.cpp rangify; NFCI 2016-02-03 22:44:14 +00:00
ScheduleDAGSDNodes.cpp Avoid overly large SmallPtrSet/SmallSet 2016-01-30 01:24:31 +00:00
ScheduleDAGSDNodes.h [SelectionDAG] Remove dead code. NFC. 2015-10-15 17:54:06 +00:00
ScheduleDAGVLIW.cpp Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:11:45 +00:00
SDNodeDbgValue.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
SelectionDAG.cpp [SelectionDAG] change getConstant() to use the input SDLoc when building splat vectors 2016-02-11 20:21:24 +00:00
SelectionDAGBuilder.cpp Detecte vector reduction operations just before instruction selection. 2016-02-17 06:37:04 +00:00
SelectionDAGBuilder.h SelectionDAG: Lower some range metadata to AssertZext 2016-02-08 16:28:19 +00:00
SelectionDAGDumper.cpp Avoid overly large SmallPtrSet/SmallSet 2016-01-30 01:24:31 +00:00
SelectionDAGISel.cpp Fix Clang-tidy readability-redundant-control-flow warnings; other minor fixes. 2016-02-02 18:20:45 +00:00
SelectionDAGPrinter.cpp Make the SelectionDAG graph printer use SDNode::PersistentId labels. 2015-10-27 23:09:03 +00:00
SelectionDAGTargetInfo.cpp Rename TargetSelectionDAGInfo into SelectionDAGTargetInfo and move it to CodeGen/ 2016-01-27 16:32:26 +00:00
StatepointLowering.cpp [StatepointLower] Use None instead of Optional<int>() 2016-02-05 23:40:04 +00:00
StatepointLowering.h [StatepointLowering] Support of the gc.relocates for invoke statepoints. 2015-05-20 11:37:25 +00:00
TargetLowering.cpp [Power PC] softening long double type 2016-02-04 14:43:50 +00:00