1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 03:53:04 +02:00
llvm-mirror/lib/CodeGen/SelectionDAG
Sanjay Patel 6847ec5b33 [DAGCombiner] shrink/widen a vselect to match its condition operand size (PR14657)
We discussed shrinking/widening of selects in IR in D26556, and I'll try to get back to that
patch eventually. But I'm hoping that this transform is less iffy in the DAG where we can check
legality of the select that we want to produce.

A few things to note:

1. We can't wait until after legalization and do this generically because (at least in the x86
   tests from PR14657), we'll have PACKSS and bitcasts in the pattern.
2. This might benefit more of the SSE codegen if we lifted the legal-or-custom requirement, but
   that requires a closer look to make sure we don't end up worse.
3. There's a 'vblendv' opportunity that we're missing that results in andn/and/or in some cases. 
   That should be fixed next.
4. I'm assuming that AVX1 offers the worst of all worlds wrt uneven ISA support with multiple 
   legal vector sizes, but if there are other targets like that, we should add more tests.
5. There's a codegen miracle in the multi-BB tests from PR14657 (the gcc auto-vectorization tests):
   despite IR that is terrible for the target, this patch allows us to generate the optimal loop
   code because something post-ISEL is hoisting the splat extends above the vector loops.

Differential Revision: https://reviews.llvm.org/D32620

llvm-svn: 301781
2017-04-30 22:44:51 +00:00
..
CMakeLists.txt [CMake] NFC. Updating CMake dependency specifications 2016-11-17 04:36:50 +00:00
DAGCombiner.cpp [DAGCombiner] shrink/widen a vselect to match its condition operand size (PR14657) 2017-04-30 22:44:51 +00:00
FastISel.cpp PR32382: Fix emitting complex DWARF expressions. 2017-04-18 01:21:53 +00:00
FunctionLoweringInfo.cpp [SelectionDAG] Use KnownBits struct in DAG's computeKnownBits and simplifyDemandedBits 2017-04-28 05:31:46 +00:00
InstrEmitter.cpp Move value type list from TargetRegisterClass to TargetRegisterInfo 2017-04-24 19:51:12 +00:00
InstrEmitter.h
LegalizeDAG.cpp [APInt] Use inplace shift methods where possible. NFCI 2017-04-28 03:36:24 +00:00
LegalizeFloatTypes.cpp Revert "[APInt] Fix a few places that use APInt::getRawData to operate within the normal API." 2017-04-23 12:15:30 +00:00
LegalizeIntegerTypes.cpp Do not legalize large add with addc/adde, introduce addcarry and do it with uaddo/addcarry 2017-04-30 19:24:09 +00:00
LegalizeTypes.cpp [MVT][SVE] Scalable vector MVTs (3/3) 2017-04-20 13:54:09 +00:00
LegalizeTypes.h Do not legalize large add with addc/adde, introduce addcarry and do it with uaddo/addcarry 2017-04-30 19:24:09 +00:00
LegalizeTypesGeneric.cpp [SelectionDAG] Use getBuildVector helper where possible. NFCI 2017-04-25 15:10:47 +00:00
LegalizeVectorOps.cpp DAG: Do not scalarize fsub if fneg is legal 2017-02-15 22:02:42 +00:00
LegalizeVectorTypes.cpp [SelectionDAG] Use getBuildVector helper where possible. NFCI 2017-04-25 15:10:47 +00:00
LLVMBuild.txt
ResourcePriorityQueue.cpp Add iterator_range<regclass_iterator> to {Target,MC}RegisterInfo, NFC 2017-01-25 19:29:04 +00:00
ScheduleDAGFast.cpp
ScheduleDAGRRList.cpp [ARM] ScheduleDAGRRList::DelayForLiveRegsBottomUp must consider OptionalDefs 2017-04-23 06:58:08 +00:00
ScheduleDAGSDNodes.cpp Remove redundant call to GluedNodes.back() [NFC] 2017-02-19 16:56:18 +00:00
ScheduleDAGSDNodes.h [Target] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-01-11 01:45:03 +00:00
ScheduleDAGVLIW.cpp
SDNodeDbgValue.h
SelectionDAG.cpp Do not legalize large add with addc/adde, introduce addcarry and do it with uaddo/addcarry 2017-04-30 19:24:09 +00:00
SelectionDAGBuilder.cpp Use Argument::hasAttribute and AttributeList::ReturnIndex more 2017-04-28 18:37:16 +00:00
SelectionDAGBuilder.h [InlineCost] Improve the cost heuristic for Switch 2017-04-28 16:04:03 +00:00
SelectionDAGDumper.cpp Do not legalize large add with addc/adde, introduce addcarry and do it with uaddo/addcarry 2017-04-30 19:24:09 +00:00
SelectionDAGISel.cpp TargetLowering: Add finalizeLowering() function; NFC 2017-04-28 20:25:05 +00:00
SelectionDAGPrinter.cpp
SelectionDAGTargetInfo.cpp
StatepointLowering.cpp Use a pointer type for target frame indices during statepoint lowering 2017-04-27 17:17:16 +00:00
StatepointLowering.h
TargetLowering.cpp Make getParamAlignment use argument numbers 2017-04-28 20:34:27 +00:00