llvm-6502/include/llvm/CodeGen
Adam Nemet 8c8fe42a0d [VectorLegalizer/X86] Don't unvectorize fp_to_uint for v8f32->v8i16
Rather than LegalizeAction::Expand, this needs LegalizeAction::Promote to get
promoted to fp_to_sint v8f32->v8i32.  This is a legal operation on AVX.

For that to work properly, we also need to teach the legalizer about the
specific promotion required here.  The default vector promotion uses
bitcasting to a vector type of the same total size.  We want to promote the
vector element type, effectively widening the operation and then truncating
the result.  This is analogous to the current logic of how int_to_fp is
promoted.

The change also factors out some code from the int_to_fp promotion code to
ValueType::widenIntegerVectorElementType.  This is now shared between
int_to_fp and fp_to_int.

There is no longer need for the custom lowering of fp_to_sint f32->v8i16 in
X86.  It can now go through the new target-independent fp_to_*int promotion
logic.

I also checked that no other target uses Promote for these ops yet, so there
shouldn't be any unexpected change in behavior.

Fixes <rdar://problem/16202247>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204058 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-17 17:06:14 +00:00
..
PBQP Deleted copy-constructor/copy-assignment broke a buildbot. Removing while I 2014-03-17 01:51:51 +00:00
Analysis.h Replace '#include ValueTypes.h' with forward declarations. 2014-03-12 08:00:24 +00:00
AsmPrinter.h Accept Twine's to AsmPrinter::getTempSymbol (refactoring for an incoming change) 2014-03-11 23:12:08 +00:00
CalcSpillWeights.h CalcSpillWeights: allow overidding the spill weight normalizing function 2013-11-11 19:56:14 +00:00
CallingConvLower.h Replace '#include ValueTypes.h' with forward declarations. 2014-03-12 08:00:24 +00:00
CommandFlags.h Refactor TargetOptions initialization into a single place. 2014-02-19 17:09:35 +00:00
DAGCombine.h
DFAPacketizer.h
EdgeBundles.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
FastISel.h Replace '#include ValueTypes.h' with forward declarations. 2014-03-12 08:00:24 +00:00
FunctionLoweringInfo.h Replace '#include ValueTypes.h' with forward declarations. 2014-03-12 08:00:24 +00:00
GCMetadata.h [Layering] Move DebugLoc.h into the IR library. The implementation 2014-03-05 10:30:38 +00:00
GCMetadataPrinter.h
GCs.h Test commit: Remove trailing whitespace. 2014-03-10 22:24:07 +00:00
GCStrategy.h
IntrinsicLowering.h Rename some member variables from TD to DL. 2014-02-18 15:33:12 +00:00
ISDOpcodes.h R600: Fix extloads from i8 / i16 to i64. 2014-03-06 17:34:12 +00:00
JITCodeEmitter.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
LatencyPriorityQueue.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
LexicalScopes.h [Layering] Move DebugLoc.h into the IR library. The implementation 2014-03-05 10:30:38 +00:00
LinkAllAsmWriterComponents.h
LinkAllCodegenComponents.h
LiveInterval.h [C++11] Use std::tie to simplify compare operators. 2014-03-03 19:58:30 +00:00
LiveIntervalAnalysis.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
LiveIntervalUnion.h Rename LiveRange to LiveInterval::Segment 2013-10-10 21:28:43 +00:00
LivePhysRegs.h Convert register liveness tracking to work on a sub-register level instead of just register units. 2013-12-14 06:52:56 +00:00
LiveRangeEdit.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
LiveRegMatrix.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
LiveStackAnalysis.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
LiveVariables.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachineBasicBlock.h [C++11] Replace llvm::next and llvm::prior with std::next and std::prev. 2014-03-02 12:27:27 +00:00
MachineBlockFrequencyInfo.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachineBranchProbabilityInfo.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachineCodeEmitter.h [Layering] Move DebugLoc.h into the IR library. The implementation 2014-03-05 10:30:38 +00:00
MachineCodeInfo.h
MachineConstantPool.h
MachineDominators.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachineFrameInfo.h Check for dynamic allocas and inline asm that clobbers sp before building 2014-03-05 02:43:26 +00:00
MachineFunction.h [Layering] Move DebugLoc.h into the IR library. The implementation 2014-03-05 10:30:38 +00:00
MachineFunctionAnalysis.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachineFunctionPass.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachineInstr.h Replace PROLOG_LABEL with a new CFI_INSTRUCTION. 2014-03-07 06:08:31 +00:00
MachineInstrBuilder.h Replace PROLOG_LABEL with a new CFI_INSTRUCTION. 2014-03-07 06:08:31 +00:00
MachineInstrBundle.h
MachineJumpTableInfo.h
MachineLoopInfo.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachineMemOperand.h Print the address space of a MachineMemOperand 2013-12-14 00:24:02 +00:00
MachineModuleInfo.h MachineModuleInfo: Turn nested std::pairs into a proper struct. 2014-03-09 15:44:39 +00:00
MachineModuleInfoImpls.h
MachineOperand.h Replace PROLOG_LABEL with a new CFI_INSTRUCTION. 2014-03-07 06:08:31 +00:00
MachinePassRegistry.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachinePostDominators.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachineRegisterInfo.h Revert r203883 (which was more of a bandaid) and fix the real underlying 2014-03-14 05:02:18 +00:00
MachineRelocation.h [typo] An LLVM. 2013-08-16 23:30:19 +00:00
MachineScheduler.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachineSSAUpdater.h
MachineTraceMetrics.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
MachineValueType.h Separate out MVT in a separate header file: MachineValueType.h 2014-03-14 13:41:09 +00:00
MachORelocation.h
Passes.h [CodeGenPrepare] Move CodeGenPrepare into lib/CodeGen. 2014-02-22 00:07:45 +00:00
PseudoSourceValue.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
RegAllocPBQP.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
RegAllocRegistry.h
RegisterClassInfo.h
RegisterPressure.h Represent RegUnit liveness with LiveRange instance 2013-10-10 21:29:02 +00:00
RegisterScavenging.h Use SmallVectorImpl::iterator/const_iterator instead of SmallVector 2013-07-03 05:01:24 +00:00
ResourcePriorityQueue.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-08 06:31:39 +00:00
RuntimeLibcalls.h Fix filename in header comment 2013-11-16 15:40:54 +00:00
ScheduleDAG.h [C++11] Expand and eliminate the LLVM_ENUM_INT_TYPE() macro 2014-03-02 03:20:38 +00:00
ScheduleDAGInstrs.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
ScheduleDFS.h
ScheduleHazardRecognizer.h Add two additional hazard recognizer functions 2013-12-11 22:33:43 +00:00
SchedulerRegistry.h
ScoreboardHazardRecognizer.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
SelectionDAG.h IR: add a second ordering operand to cmpxhg for failure 2014-03-11 10:48:52 +00:00
SelectionDAGISel.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-08 06:31:39 +00:00
SelectionDAGNodes.h IR: add a second ordering operand to cmpxhg for failure 2014-03-11 10:48:52 +00:00
SlotIndexes.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
StackMapLivenessAnalysis.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
StackMaps.h [Stackmaps] Cleanup code. No functional change intended. 2014-02-10 23:30:26 +00:00
StackProtector.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00
TargetLoweringObjectFileImpl.h Remove shouldEmitUsedDirectiveFor. 2014-03-06 22:47:08 +00:00
TargetSchedule.h Fix known typos 2014-01-24 17:20:08 +00:00
ValueTypes.h [VectorLegalizer/X86] Don't unvectorize fp_to_uint for v8f32->v8i16 2014-03-17 17:06:14 +00:00
ValueTypes.td Implement aarch64 neon instruction set AdvSIMD (Across). 2013-10-05 08:22:10 +00:00
VirtRegMap.h [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-07 09:26:03 +00:00