diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index 7da7fad543d..5a91be44277 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -88,14 +88,28 @@ static std::string computeDataLayout(const Triple &TT) { return Ret; } +LLVM_READNONE +static StringRef getGPUOrDefault(const Triple &TT, StringRef GPU) { + if (!GPU.empty()) + return GPU; + + // HSA only supports CI+, so change the default GPU to a CI for HSA. + if (TT.getArch() == Triple::amdgcn) + return (TT.getOS() == Triple::AMDHSA) ? "kaveri" : "tahiti"; + + return ""; +} + AMDGPUTargetMachine::AMDGPUTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, TargetOptions Options, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OptLevel) - : LLVMTargetMachine(T, computeDataLayout(TT), TT, CPU, FS, Options, RM, CM, + : LLVMTargetMachine(T, computeDataLayout(TT), TT, + getGPUOrDefault(TT, CPU), FS, Options, RM, CM, OptLevel), - TLOF(createTLOF(getTargetTriple())), Subtarget(TT, CPU, FS, *this), + TLOF(createTLOF(getTargetTriple())), + Subtarget(TT, getTargetCPU(), FS, *this), IntrinsicInfo() { setRequiresStructuredCFG(true); initAsmInfo(); |