diff options
| author | Eric Christopher <echristo@gmail.com> | 2014-07-25 22:22:39 +0000 |
|---|---|---|
| committer | Eric Christopher <echristo@gmail.com> | 2014-07-25 22:22:39 +0000 |
| commit | ac4b69e40bfebe502c8bee936539b352b0c14fa2 (patch) | |
| tree | 54a5db122bb00b07484bb20b3dc8b32ddd955d12 /llvm/lib/Target/R600/AMDGPUSubtarget.cpp | |
| parent | b2ebf2a08b1c1bf1f7629a7ff6c1c28d38058e21 (diff) | |
| download | bcm5719-llvm-ac4b69e40bfebe502c8bee936539b352b0c14fa2.tar.gz bcm5719-llvm-ac4b69e40bfebe502c8bee936539b352b0c14fa2.zip | |
Move R600 subtarget dependent variables onto the subtarget.
No functional change.
llvm-svn: 213982
Diffstat (limited to 'llvm/lib/Target/R600/AMDGPUSubtarget.cpp')
| -rw-r--r-- | llvm/lib/Target/R600/AMDGPUSubtarget.cpp | 70 |
1 files changed, 45 insertions, 25 deletions
diff --git a/llvm/lib/Target/R600/AMDGPUSubtarget.cpp b/llvm/lib/Target/R600/AMDGPUSubtarget.cpp index e3c2a50ab82..6a09d4eb547 100644 --- a/llvm/lib/Target/R600/AMDGPUSubtarget.cpp +++ b/llvm/lib/Target/R600/AMDGPUSubtarget.cpp @@ -13,8 +13,11 @@ //===----------------------------------------------------------------------===// #include "AMDGPUSubtarget.h" +#include "R600ISelLowering.h" #include "R600InstrInfo.h" +#include "R600MachineScheduler.h" #include "SIInstrInfo.h" +#include "SIISelLowering.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallString.h" @@ -28,26 +31,23 @@ using namespace llvm; #define GET_SUBTARGETINFO_CTOR #include "AMDGPUGenSubtargetInfo.inc" -AMDGPUSubtarget::AMDGPUSubtarget(StringRef TT, StringRef GPU, StringRef FS) : - AMDGPUGenSubtargetInfo(TT, GPU, FS), - DevName(GPU), - Is64bit(false), - DumpCode(false), - R600ALUInst(false), - HasVertexCache(false), - TexVTXClauseSize(0), - Gen(AMDGPUSubtarget::R600), - FP64(false), - FP64Denormals(false), - FP32Denormals(false), - CaymanISA(false), - EnableIRStructurizer(true), - EnablePromoteAlloca(false), - EnableIfCvt(true), - WavefrontSize(0), - CFALUBug(false), - LocalMemorySize(0), - InstrItins(getInstrItineraryForCPU(GPU)) { +static std::string computeDataLayout(const AMDGPUSubtarget &ST) { + std::string Ret = "e-p:32:32"; + + if (ST.is64bit()) { + // 32-bit local, and region pointers. 64-bit private, global, and constant. + Ret += "-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-p24:64:64"; + } + + Ret += "-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256" + "-v512:512-v1024:1024-v2048:2048-n32:64"; + + return Ret; +} + +AMDGPUSubtarget & +AMDGPUSubtarget::initializeSubtargetDependencies(StringRef GPU, StringRef FS) { + // Determine default and user-specified characteristics // On SI+, we want FP64 denormals to be on by default. FP32 denormals can be // enabled, but some instructions do not respect them and they run at the // double precision rate, so don't enable by default. @@ -61,16 +61,36 @@ AMDGPUSubtarget::AMDGPUSubtarget(StringRef TT, StringRef GPU, StringRef FS) : ParseSubtargetFeatures(GPU, FullFS); + // FIXME: I don't think think Evergreen has any useful support for + // denormals, but should be checked. Should we issue a warning somewhere + // if someone tries to enable these? if (getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS) { - InstrInfo.reset(new R600InstrInfo(*this)); - - // FIXME: I don't think think Evergreen has any useful support for - // denormals, but should be checked. Should we issue a warning somewhere if - // someone tries to enable these? FP32Denormals = false; FP64Denormals = false; + } + return *this; +} + +AMDGPUSubtarget::AMDGPUSubtarget(StringRef TT, StringRef GPU, StringRef FS, + TargetMachine &TM) + : AMDGPUGenSubtargetInfo(TT, GPU, FS), DevName(GPU), Is64bit(false), + DumpCode(false), R600ALUInst(false), HasVertexCache(false), + TexVTXClauseSize(0), Gen(AMDGPUSubtarget::R600), FP64(false), + FP64Denormals(false), FP32Denormals(false), CaymanISA(false), + EnableIRStructurizer(true), EnablePromoteAlloca(false), EnableIfCvt(true), + WavefrontSize(0), CFALUBug(false), LocalMemorySize(0), + DL(computeDataLayout(initializeSubtargetDependencies(GPU, FS))), + FrameLowering(TargetFrameLowering::StackGrowsUp, + 64 * 16, // Maximum stack alignment (long16) + 0), + IntrinsicInfo(), InstrItins(getInstrItineraryForCPU(GPU)) { + + if (getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS) { + InstrInfo.reset(new R600InstrInfo(*this)); + TLInfo.reset(new R600TargetLowering(TM)); } else { InstrInfo.reset(new SIInstrInfo(*this)); + TLInfo.reset(new SITargetLowering(TM)); } } |

