llvm-project/llvm/lib/CodeGen/SelectionDAG
Simon Pilgrim 89b89650f3 [SelectionDAG] Attempt to split BITREVERSE vector legalization into BSWAP and BITREVERSE stages
For BITREVERSE, bit shifting/masking every bit in a vector element is a very lengthy procedure.

If the input vector type is a whole multiple of bytes wide then we can split this into a BSWAP shuffle stage (to reverse at the byte level) and then a BITREVERSE stage applied to each byte. Most vector capable targets can efficiently BSWAP using shuffles resulting in a considerable reduction in instructions.

With this patch targets would only need to implement a target specific vXi8 BITREVERSE implementation to efficiently reverse most legal vector types.

Differential Revision: http://reviews.llvm.org/D19978

llvm-svn: 269290
2016-05-12 13:09:49 +00:00
..
CMakeLists.txt Rename TargetSelectionDAGInfo into SelectionDAGTargetInfo and move it to CodeGen/ 2016-01-27 16:32:26 +00:00
DAGCombiner.cpp Fix unused variable warning. 2016-05-07 20:19:59 +00:00
FastISel.cpp Swift Calling Convention: swifterror target-independent change. 2016-04-05 18:13:16 +00:00
FunctionLoweringInfo.cpp Swift Calling Convention: swifterror target-independent change. 2016-04-05 18:13:16 +00:00
InstrEmitter.cpp Sink DI metadata usage out of MachineInstr.h and MachineInstrBuilder.h 2016-04-14 18:29:59 +00:00
InstrEmitter.h Minor code cleanup. NFC. 2016-03-26 06:04:55 +00:00
LLVMBuild.txt
LegalizeDAG.cpp [PR27599] [SystemZ] [SelectionDAG] Fix extension of atomic cmpxchg result. 2016-05-10 16:49:04 +00:00
LegalizeFloatTypes.cpp [CodeGen] Round [SU]INT_TO_FP result when promoting from f16. 2016-05-06 00:58:00 +00:00
LegalizeIntegerTypes.cpp Remove unsafe AssertZext after promoting result of FP_TO_FP16 2016-03-24 14:06:03 +00:00
LegalizeTypes.cpp Unify XDEBUG and EXPENSIVE_CHECKS (into the latter), and add an option to the cmake build to enable them. 2016-04-29 15:22:48 +00:00
LegalizeTypes.h [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
LegalizeTypesGeneric.cpp [X86] Part 1 to fix x86-64 fp128 calling convention. 2015-12-03 22:02:40 +00:00
LegalizeVectorOps.cpp [SelectionDAG] Attempt to split BITREVERSE vector legalization into BSWAP and BITREVERSE stages 2016-05-12 13:09:49 +00:00
LegalizeVectorTypes.cpp fix typos in comments; NFC 2016-05-11 17:00:07 +00:00
ResourcePriorityQueue.cpp Fix some comment typos. 2015-08-08 18:27:36 +00:00
SDNodeDbgValue.h [NFC] Header cleanup 2016-04-18 09:17:29 +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
SelectionDAG.cpp SDAG: Have SelectNodeTo replace uses if it CSE's instead of morphing a node 2016-05-11 21:00:33 +00:00
SelectionDAGBuilder.cpp getelementptr instruction, support index vector of EVT. 2016-05-01 13:29:12 +00:00
SelectionDAGBuilder.h [SSP, 2/2] Create llvm.stackguard() intrinsic and lower it to LOAD_STACK_GUARD 2016-04-19 19:40:37 +00:00
SelectionDAGDumper.cpp AMDGPU: Implement canonicalize 2016-04-14 01:42:16 +00:00
SelectionDAGISel.cpp SDAG: Have SelectNodeTo replace uses if it CSE's instead of morphing a node 2016-05-11 21:00:33 +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 Introduce an GCRelocateInst class [NFC] 2016-04-12 18:05:10 +00:00
StatepointLowering.h [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
TargetLowering.cpp [TargetLowering] make helper function for SetCC + and optimizations (NFC) 2016-05-09 16:42:50 +00:00