diff options
author | Tom Stellard <[email protected]> | 2012-06-19 18:47:18 -0400 |
---|---|---|
committer | Tom Stellard <[email protected]> | 2012-06-21 20:42:06 +0000 |
commit | cd287301ec598d2811f3f85c03d23bae01be2359 (patch) | |
tree | ee21b535265591da3e0add2d5c5072d52a7a0247 /src/gallium/drivers/radeon/AMDGPUTargetMachine.h | |
parent | b73cf49c91b57d05795748da5803c3095ec25526 (diff) |
radeon/llvm: Use the VLIW Scheduler for R600->NI
It's not optimal, but it's better than the register pressure scheduler
that was previously being used. The VLIW scheduler currently ignores
all the complicated instruction groups restrictions and just tries to
fill the instruction groups with as many instructions as possible.
Though, it does know enough not to put two trans only instructions in
the same group.
We are able to ignore the instruction group restrictions in the LLVM
backend, because the finalizer in r600_asm.c will fix any illegal
instruction groups the backend generates.
Enabling the VLIW scheduler improved the run time for a sha1 compute
shader by about 50%. I'm not sure what the impact will be for graphics
shaders. I tested Lightsmark with the VLIW scheduler enabled and the
framerate was about the same, but it might help apps that use really
big shaders.
Diffstat (limited to 'src/gallium/drivers/radeon/AMDGPUTargetMachine.h')
-rw-r--r-- | src/gallium/drivers/radeon/AMDGPUTargetMachine.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/gallium/drivers/radeon/AMDGPUTargetMachine.h b/src/gallium/drivers/radeon/AMDGPUTargetMachine.h index 84a1ea330d3..b419a6f33f2 100644 --- a/src/gallium/drivers/radeon/AMDGPUTargetMachine.h +++ b/src/gallium/drivers/radeon/AMDGPUTargetMachine.h @@ -15,9 +15,9 @@ #define AMDGPU_TARGET_MACHINE_H #include "AMDGPUInstrInfo.h" +#include "AMDGPUSubtarget.h" #include "AMDILFrameLowering.h" #include "AMDILIntrinsicInfo.h" -#include "AMDILSubtarget.h" #include "R600ISelLowering.h" #include "llvm/ADT/OwningPtr.h" #include "llvm/Target/TargetData.h" @@ -28,12 +28,13 @@ MCAsmInfo* createMCAsmInfo(const Target &T, StringRef TT); class AMDGPUTargetMachine : public LLVMTargetMachine { - AMDILSubtarget Subtarget; + AMDGPUSubtarget Subtarget; const TargetData DataLayout; AMDILFrameLowering FrameLowering; AMDILIntrinsicInfo IntrinsicInfo; const AMDGPUInstrInfo * InstrInfo; AMDGPUTargetLowering * TLInfo; + const InstrItineraryData* InstrItins; bool mDump; public: @@ -50,13 +51,16 @@ public: return &IntrinsicInfo; } virtual const AMDGPUInstrInfo *getInstrInfo() const {return InstrInfo;} - virtual const AMDILSubtarget *getSubtargetImpl() const {return &Subtarget; } + virtual const AMDGPUSubtarget *getSubtargetImpl() const {return &Subtarget; } virtual const AMDGPURegisterInfo *getRegisterInfo() const { return &InstrInfo->getRegisterInfo(); } virtual AMDGPUTargetLowering * getTargetLowering() const { return TLInfo; } + virtual const InstrItineraryData* getInstrItineraryData() const { + return InstrItins; + } virtual const TargetData* getTargetData() const { return &DataLayout; } virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); virtual bool addPassesToEmitFile(PassManagerBase &PM, |