1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 12:33:33 +02:00
llvm-mirror/lib/Target/NVPTX
Jingyue Wu 5f36b4cd05 [NVPTX] expand extload/truncstore for vectors of floats
Summary:
According to PTX ISA:

For convenience, ld, st, and cvt instructions permit source and destination data operands to be wider than the instruction-type size, so that narrow values may be loaded, stored, and converted using regular-width registers. For example, 8-bit or 16-bit values may be held directly in 32-bit or 64-bit registers when being loaded, stored, or converted to other types and sizes. The operand type checking rules are relaxed for bit-size and integer (signed and unsigned) instruction types; floating-point instruction types still require that the operand type-size matches exactly, unless the operand is of bit-size type.

So, the ISA does not support load with extending/store with truncatation for floating numbers. This is reflected in setting the loadext/truncstore actions to expand in the code for floating numbers, but vectors of floating numbers are not taken care of.

As a result, loading a vector of floats followed by a fp_extend may be combined by DAGCombiner to a extload, and the extload may be lowered to NVPTXISD::LoadV2 with extending information. However, NVPTXISD::LoadV2 does not perform extending, and no extending instructions are inserted. Finally, PTX instructions with mismatched types are generated, like
ld.v2.f32 {%fd3, %fd4}, [%rd2]

This patch adds the correct actions for vectors of floats, so DAGCombiner would not create loads with extending, and correct code is generated.

Patched by Gang Hu. 

Test Plan: Test case attached.

Reviewers: jingyue

Reviewed By: jingyue

Subscribers: llvm-commits, jholewinski

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

llvm-svn: 241191
2015-07-01 21:32:42 +00:00
..
InstPrinter Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
MCTargetDesc Force relocation mode to be default, regardless of what is passed to the backend. 2015-06-30 17:18:00 +00:00
TargetInfo Prune redundant dependencies in LLVMBuild.txt. 2013-12-11 00:30:57 +00:00
cl_common_defines.h Update a couple of header inclusion guards 2014-05-31 21:26:09 +00:00
CMakeLists.txt Add NVPTXPeephole pass to reduce unnecessary address cast 2015-06-24 20:20:16 +00:00
LLVMBuild.txt Update libdeps in NVPTXCodeGen, since r225944. 2015-01-14 23:01:36 +00:00
Makefile
ManagedStringPool.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTX.h Add NVPTXPeephole pass to reduce unnecessary address cast 2015-06-24 20:20:16 +00:00
NVPTX.td [NVPTX] Associate a minimum PTX version for each SM architecture 2015-03-30 19:30:55 +00:00
NVPTXAllocaHoisting.cpp NVPTX: move NVPTXAllocaHoisting into the cpp file 2015-03-10 19:20:52 +00:00
NVPTXAllocaHoisting.h NVPTX: move NVPTXAllocaHoisting into the cpp file 2015-03-10 19:20:52 +00:00
NVPTXAsmPrinter.cpp Simplify the Mangler interface now that DataLayout is mandatory. 2015-06-23 13:59:29 +00:00
NVPTXAsmPrinter.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXAssignValidGlobalNames.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXFavorNonGenericAddrSpaces.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXFrameLowering.cpp [NVPTX] cleanups and refacotring in NVPTXFrameLowering.cpp 2015-06-30 21:28:31 +00:00
NVPTXFrameLowering.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXGenericToNVVM.cpp [opaque pointer type] More GEP IRBuilder API migrations... 2015-04-03 21:33:42 +00:00
NVPTXImageOptimizer.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXInstrFormats.td [NVPTX] Add more surface/texture intrinsics, including CUDA unified texture fetch 2014-07-17 11:59:04 +00:00
NVPTXInstrInfo.cpp [CodeGen] ArrayRef'ize cond/pred in various TII APIs. NFC. 2015-06-11 19:30:37 +00:00
NVPTXInstrInfo.h [CodeGen] ArrayRef'ize cond/pred in various TII APIs. NFC. 2015-06-11 19:30:37 +00:00
NVPTXInstrInfo.td Reapply r235977 "[DebugInfo] Add debug locations to constant SD nodes" 2015-04-28 14:05:47 +00:00
NVPTXIntrinsics.td NVPTX: support direct f16 <-> f64 conversions via intrinsics. 2014-07-18 08:30:10 +00:00
NVPTXISelDAGToDAG.cpp [NVPTX] roll forward r239082 2015-06-04 21:28:26 +00:00
NVPTXISelDAGToDAG.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXISelLowering.cpp [NVPTX] expand extload/truncstore for vectors of floats 2015-07-01 21:32:42 +00:00
NVPTXISelLowering.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXLowerAggrCopies.cpp Reduce dyn_cast<> to isa<> or cast<> where possible. 2015-04-10 11:24:51 +00:00
NVPTXLowerAggrCopies.h Move unreferenced passes into the cpp file 2015-03-09 15:50:58 +00:00
NVPTXLowerAlloca.cpp Add NVPTXLowerAlloca pass to convert alloca'ed memory to local address 2015-06-17 22:31:02 +00:00
NVPTXLowerKernelArgs.cpp [NVPTX] noop when kernel pointers are already global 2015-06-26 22:35:43 +00:00
NVPTXMachineFunctionInfo.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXMCExpr.cpp MC: Add target hook to control symbol quoting 2015-06-09 00:31:39 +00:00
NVPTXMCExpr.h MC: Add target hook to control symbol quoting 2015-06-09 00:31:39 +00:00
NVPTXPeephole.cpp [NVPTX] Move NVPTXPeephole after NVPTXPrologEpilogPass 2015-07-01 20:08:06 +00:00
NVPTXPrologEpilogPass.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXRegisterInfo.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXRegisterInfo.h Have getCalleeSavedRegs take a non-null MachineFunction all the 2015-03-11 21:41:28 +00:00
NVPTXRegisterInfo.td Add NVPTXPeephole pass to reduce unnecessary address cast 2015-06-24 20:20:16 +00:00
NVPTXReplaceImageHandles.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXSection.h Implement unique sections with an unique ID. 2015-04-04 18:02:01 +00:00
NVPTXSubtarget.cpp Replace string GNU Triples with llvm::Triple in MCSubtargetInfo and create*MCSubtargetInfo(). NFC. 2015-06-10 12:11:26 +00:00
NVPTXSubtarget.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXTargetMachine.cpp [NVPTX] Move NVPTXPeephole after NVPTXPrologEpilogPass 2015-07-01 20:08:06 +00:00
NVPTXTargetMachine.h Replace string GNU Triples with llvm::Triple in TargetMachine. NFC. 2015-06-11 19:41:26 +00:00
NVPTXTargetObjectFile.h Move alignment from MCSectionData to MCSection. 2015-05-21 19:20:38 +00:00
NVPTXTargetTransformInfo.cpp Divergence analysis for GPU programs 2015-04-10 05:03:50 +00:00
NVPTXTargetTransformInfo.h Divergence analysis for GPU programs 2015-04-10 05:03:50 +00:00
NVPTXUtilities.cpp Simplify boolean expressions with true and false using clang-tidy 2015-03-23 16:26:23 +00:00
NVPTXUtilities.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
NVPTXVector.td Reapply r235977 "[DebugInfo] Add debug locations to constant SD nodes" 2015-04-28 14:05:47 +00:00
NVVMReflect.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00