llvm-project/llvm/lib/CodeGen/SelectionDAG
Craig Topper a533e87792 [X86][SelectionDAGBuilder] Move the hack for handling MMX shift by i32 intrinsics into the X86 backend.
This intrinsics should be shift by immediate, but gcc allows any
i32 scalar and clang needs to match that. So we try to detect the
non-constant case and move the data from an integer register to an
MMX register.

Previously this was done by creating a v2i32 build_vector and
bitcast in SelectionDAGBuilder. This had to be done early since
v2i32 isn't a legal type. The bitcast+build_vector would be DAG
combined to X86ISD::MMX_MOVW2D which isel will turn into a
GPR->MMX MOVD.

This commit just moves the whole thing to lowering and emits
the X86ISD::MMX_MOVW2D directly to avoid the illegal type. The
test changes just seem to be due to nodes being linearized in a
different order.

llvm-svn: 372535
2019-09-23 01:05:33 +00:00
..
CMakeLists.txt
DAGCombiner.cpp [DAG][X86] Convert isNegatibleForFree/GetNegatedExpression to a target hook (PR42863) 2019-09-19 15:02:47 +00:00
FastISel.cpp [FastISel] Fix insertion of unconditional branches during FastISel 2019-09-20 13:22:59 +00:00
FunctionLoweringInfo.cpp Finish moving TargetRegisterInfo::isVirtualRegister() and friends to llvm::Register as started by r367614. NFC 2019-08-01 23:27:28 +00:00
InstrEmitter.cpp [TargetRegisterInfo] Remove SVT argument from getCommonSubClass. 2019-09-13 05:24:37 +00:00
InstrEmitter.h [SelectionDAG] Enhance the simplification of `copyto` from `implicit-def`. 2019-05-27 18:26:29 +00:00
LLVMBuild.txt Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
LegalizeDAG.cpp [LegalizeTypes] Remove code for softening a float type to itself. 2019-09-12 05:55:14 +00:00
LegalizeFloatTypes.cpp [LegalizeTypes] Remove code for softening a float type to itself. 2019-09-12 05:55:14 +00:00
LegalizeIntegerTypes.cpp [Intrinsic] Add the llvm.umul.fix.sat intrinsic 2019-09-07 12:16:14 +00:00
LegalizeTypes.cpp [LegalizeTypes] Remove code for softening a float type to itself. 2019-09-12 05:55:14 +00:00
LegalizeTypes.h [LegalizeTypes] Remove code for softening a float type to itself. 2019-09-12 05:55:14 +00:00
LegalizeTypesGeneric.cpp [LegalizeTypes] Remove code for softening a float type to itself. 2019-09-12 05:55:14 +00:00
LegalizeVectorOps.cpp [SelectionDAG] Remove ISD::FP_ROUND_INREG 2019-09-09 17:54:44 +00:00
LegalizeVectorTypes.cpp [SDAG] Update generic code to conservatively check for isAtomic in addition to isVolatile 2019-09-12 22:49:17 +00:00
ResourcePriorityQueue.cpp Implementation of asm-goto support in LLVM 2019-02-08 20:48:56 +00:00
SDNodeDbgValue.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ScheduleDAGFast.cpp Finish moving TargetRegisterInfo::isVirtualRegister() and friends to llvm::Register as started by r367614. NFC 2019-08-01 23:27:28 +00:00
ScheduleDAGRRList.cpp Finish moving TargetRegisterInfo::isVirtualRegister() and friends to llvm::Register as started by r367614. NFC 2019-08-01 23:27:28 +00:00
ScheduleDAGSDNodes.cpp Apply llvm-prefer-register-over-unsigned from clang-tidy to LLVM 2019-08-15 19:22:08 +00:00
ScheduleDAGSDNodes.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ScheduleDAGVLIW.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
SelectionDAG.cpp [SelectionDAG] computeKnownBits/ComputeNumSignBits - cleanup demanded/unknown paths. NFCI. 2019-09-22 18:47:12 +00:00
SelectionDAGAddressAnalysis.cpp [DAGCombiner] Unify Lifetime and memory Op aliasing. 2019-03-27 14:14:46 +00:00
SelectionDAGBuilder.cpp [X86][SelectionDAGBuilder] Move the hack for handling MMX shift by i32 intrinsics into the X86 backend. 2019-09-23 01:05:33 +00:00
SelectionDAGBuilder.h [llvm] Migrate llvm::make_unique to std::make_unique 2019-08-15 15:54:37 +00:00
SelectionDAGDumper.cpp [SelectionDAG] Remove ISD::FP_ROUND_INREG 2019-09-09 17:54:44 +00:00
SelectionDAGISel.cpp Change TargetLibraryInfo analysis passes to always require Function 2019-09-07 03:09:36 +00:00
SelectionDAGPrinter.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
SelectionDAGTargetInfo.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
StatepointLowering.cpp [Statepoints] Fix overalignment of loads in no-realign-stack functions 2019-08-02 20:17:37 +00:00
StatepointLowering.h [FastISel] Fix crash for gc.relocate lowring 2019-04-05 05:41:08 +00:00
TargetLowering.cpp [SelectionDAG][Mips][Sparc] Don't allow SimplifyDemandedBits to constant fold TargetConstant nodes to a Constant. 2019-09-20 16:49:51 +00:00