forked from OSchip/llvm-project
R600: Move DataLayout to AMDGPUTargetMachine
This is a follow up to r227113. It is now required to use the amdgcn target for SI and newer GPUs. llvm-svn: 227316
This commit is contained in:
parent
d99fb956a3
commit
40ce8af4a5
|
@ -59,20 +59,6 @@ AMDGPUSubtarget::initializeSubtargetDependencies(StringRef TT, StringRef GPU, St
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string computeDataLayout(const AMDGPUSubtarget &ST) {
|
|
||||||
std::string Ret = "e-p:32:32";
|
|
||||||
|
|
||||||
if (ST.is64bit()) {
|
|
||||||
// 32-bit private, local, and region pointers. 64-bit 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(StringRef TT, StringRef GPU, StringRef FS,
|
AMDGPUSubtarget::AMDGPUSubtarget(StringRef TT, StringRef GPU, StringRef FS,
|
||||||
TargetMachine &TM)
|
TargetMachine &TM)
|
||||||
: AMDGPUGenSubtargetInfo(TT, GPU, FS), DevName(GPU), Is64bit(false),
|
: AMDGPUGenSubtargetInfo(TT, GPU, FS), DevName(GPU), Is64bit(false),
|
||||||
|
@ -83,12 +69,14 @@ AMDGPUSubtarget::AMDGPUSubtarget(StringRef TT, StringRef GPU, StringRef FS,
|
||||||
EnablePromoteAlloca(false), EnableIfCvt(true),
|
EnablePromoteAlloca(false), EnableIfCvt(true),
|
||||||
EnableLoadStoreOpt(false), WavefrontSize(0), CFALUBug(false), LocalMemorySize(0),
|
EnableLoadStoreOpt(false), WavefrontSize(0), CFALUBug(false), LocalMemorySize(0),
|
||||||
EnableVGPRSpilling(false),
|
EnableVGPRSpilling(false),
|
||||||
DL(computeDataLayout(initializeSubtargetDependencies(TT, GPU, FS))),
|
|
||||||
FrameLowering(TargetFrameLowering::StackGrowsUp,
|
FrameLowering(TargetFrameLowering::StackGrowsUp,
|
||||||
64 * 16, // Maximum stack alignment (long16)
|
64 * 16, // Maximum stack alignment (long16)
|
||||||
0),
|
0),
|
||||||
InstrItins(getInstrItineraryForCPU(GPU)),
|
InstrItins(getInstrItineraryForCPU(GPU)),
|
||||||
TargetTriple(TT) {
|
TargetTriple(TT) {
|
||||||
|
|
||||||
|
initializeSubtargetDependencies(TT, GPU, FS);
|
||||||
|
|
||||||
if (getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS) {
|
if (getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS) {
|
||||||
InstrInfo.reset(new R600InstrInfo(*this));
|
InstrInfo.reset(new R600InstrInfo(*this));
|
||||||
TLInfo.reset(new R600TargetLowering(TM));
|
TLInfo.reset(new R600TargetLowering(TM));
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include "R600ISelLowering.h"
|
#include "R600ISelLowering.h"
|
||||||
#include "llvm/ADT/StringExtras.h"
|
#include "llvm/ADT/StringExtras.h"
|
||||||
#include "llvm/ADT/StringRef.h"
|
#include "llvm/ADT/StringRef.h"
|
||||||
#include "llvm/IR/DataLayout.h"
|
|
||||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||||
|
|
||||||
#define GET_SUBTARGETINFO_HEADER
|
#define GET_SUBTARGETINFO_HEADER
|
||||||
|
@ -67,7 +66,6 @@ private:
|
||||||
int LocalMemorySize;
|
int LocalMemorySize;
|
||||||
bool EnableVGPRSpilling;
|
bool EnableVGPRSpilling;
|
||||||
|
|
||||||
DataLayout DL;
|
|
||||||
AMDGPUFrameLowering FrameLowering;
|
AMDGPUFrameLowering FrameLowering;
|
||||||
std::unique_ptr<AMDGPUTargetLowering> TLInfo;
|
std::unique_ptr<AMDGPUTargetLowering> TLInfo;
|
||||||
std::unique_ptr<AMDGPUInstrInfo> InstrInfo;
|
std::unique_ptr<AMDGPUInstrInfo> InstrInfo;
|
||||||
|
@ -79,10 +77,6 @@ public:
|
||||||
AMDGPUSubtarget &initializeSubtargetDependencies(StringRef TT, StringRef GPU,
|
AMDGPUSubtarget &initializeSubtargetDependencies(StringRef TT, StringRef GPU,
|
||||||
StringRef FS);
|
StringRef FS);
|
||||||
|
|
||||||
// FIXME: This routine needs to go away. See comments in
|
|
||||||
// AMDGPUTargetMachine.h.
|
|
||||||
const DataLayout *getDataLayout() const { return &DL; }
|
|
||||||
|
|
||||||
const AMDGPUFrameLowering *getFrameLowering() const override {
|
const AMDGPUFrameLowering *getFrameLowering() const override {
|
||||||
return &FrameLowering;
|
return &FrameLowering;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,12 +50,28 @@ static MachineSchedRegistry
|
||||||
SchedCustomRegistry("r600", "Run R600's custom scheduler",
|
SchedCustomRegistry("r600", "Run R600's custom scheduler",
|
||||||
createR600MachineScheduler);
|
createR600MachineScheduler);
|
||||||
|
|
||||||
|
static std::string computeDataLayout(StringRef TT) {
|
||||||
|
Triple Triple(TT);
|
||||||
|
std::string Ret = "e-p:32:32";
|
||||||
|
|
||||||
|
if (Triple.getArch() == Triple::amdgcn) {
|
||||||
|
// 32-bit private, local, and region pointers. 64-bit 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;
|
||||||
|
}
|
||||||
|
|
||||||
AMDGPUTargetMachine::AMDGPUTargetMachine(const Target &T, StringRef TT,
|
AMDGPUTargetMachine::AMDGPUTargetMachine(const Target &T, StringRef TT,
|
||||||
StringRef CPU, StringRef FS,
|
StringRef CPU, StringRef FS,
|
||||||
TargetOptions Options, Reloc::Model RM,
|
TargetOptions Options, Reloc::Model RM,
|
||||||
CodeModel::Model CM,
|
CodeModel::Model CM,
|
||||||
CodeGenOpt::Level OptLevel)
|
CodeGenOpt::Level OptLevel)
|
||||||
: LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OptLevel),
|
: LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OptLevel),
|
||||||
|
DL(computeDataLayout(TT)),
|
||||||
TLOF(new TargetLoweringObjectFileELF()),
|
TLOF(new TargetLoweringObjectFileELF()),
|
||||||
Subtarget(TT, CPU, FS, *this), IntrinsicInfo() {
|
Subtarget(TT, CPU, FS, *this), IntrinsicInfo() {
|
||||||
setRequiresStructuredCFG(true);
|
setRequiresStructuredCFG(true);
|
||||||
|
|
|
@ -29,6 +29,9 @@ namespace llvm {
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
class AMDGPUTargetMachine : public LLVMTargetMachine {
|
class AMDGPUTargetMachine : public LLVMTargetMachine {
|
||||||
|
private:
|
||||||
|
const DataLayout DL;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TargetLoweringObjectFile *TLOF;
|
TargetLoweringObjectFile *TLOF;
|
||||||
AMDGPUSubtarget Subtarget;
|
AMDGPUSubtarget Subtarget;
|
||||||
|
@ -42,7 +45,7 @@ public:
|
||||||
// FIXME: This is currently broken, the DataLayout needs to move to
|
// FIXME: This is currently broken, the DataLayout needs to move to
|
||||||
// the target machine.
|
// the target machine.
|
||||||
const DataLayout *getDataLayout() const override {
|
const DataLayout *getDataLayout() const override {
|
||||||
return getSubtargetImpl()->getDataLayout();
|
return &DL;
|
||||||
}
|
}
|
||||||
const AMDGPUSubtarget *getSubtargetImpl() const override {
|
const AMDGPUSubtarget *getSubtargetImpl() const override {
|
||||||
return &Subtarget;
|
return &Subtarget;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
; Make sure we don't try to form FMAX_LEGACY nodes with f64
|
; Make sure we don't try to form FMAX_LEGACY nodes with f64
|
||||||
|
|
||||||
declare i32 @llvm.r600.read.tidig.x() #1
|
declare i32 @llvm.r600.read.tidig.x() #1
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
|
|
||||||
declare i32 @llvm.r600.read.tidig.x() #1
|
declare i32 @llvm.r600.read.tidig.x() #1
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s
|
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s
|
||||||
; RUN: llc -march=r600 -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s
|
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s
|
||||||
|
|
||||||
declare i1 @llvm.AMDGPU.class.f32(float, i32) #1
|
declare i1 @llvm.AMDGPU.class.f32(float, i32) #1
|
||||||
declare i1 @llvm.AMDGPU.class.f64(double, i32) #1
|
declare i1 @llvm.AMDGPU.class.f64(double, i32) #1
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
; RUN: llc -march=r600 -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
; XUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
|
; XUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
|
||||||
; FIXME: Evergreen broken
|
; FIXME: Evergreen broken
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
; RUN: llc -march=r600 -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
; XUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
|
; XUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
|
||||||
; FIXME: cypress is broken because the bigger testcases spill and it's not implemented
|
; FIXME: cypress is broken because the bigger testcases spill and it's not implemented
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
; RUN: llc -march=r600 -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
|
; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
|
||||||
|
|
||||||
; FUNC-LABEL: {{^}}zextload_global_i32_to_i64:
|
; FUNC-LABEL: {{^}}zextload_global_i32_to_i64:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
; RUN: llc -march=r600 -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
|
; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
|
||||||
|
|
||||||
; FUNC-LABEL: {{^}}zextload_global_i8_to_i32:
|
; FUNC-LABEL: {{^}}zextload_global_i8_to_i32:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; RUN: llc < %s -mtriple=r600--amdhsa -mcpu=kaveri | FileCheck --check-prefix=HSA %s
|
; RUN: llc < %s -mtriple=amdgcn--amdhsa -mcpu=kaveri | FileCheck --check-prefix=HSA %s
|
||||||
|
|
||||||
; HSA: {{^}}simple:
|
; HSA: {{^}}simple:
|
||||||
; HSA: .section .hsa.version
|
; HSA: .section .hsa.version
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
; RUN: llc < %s -march=r600 -mcpu=SI -verify-machineinstrs | FileCheck %s
|
; RUN: llc < %s -march=amdgcn -mcpu=SI -verify-machineinstrs | FileCheck %s
|
||||||
; RUN: llc < %s -march=r600 -mcpu=tonga -verify-machineinstrs | FileCheck %s
|
; RUN: llc < %s -march=amdgcn -mcpu=tonga -verify-machineinstrs | FileCheck %s
|
||||||
|
|
||||||
; CHECK: {{^}}inline_asm:
|
; CHECK: {{^}}inline_asm:
|
||||||
; CHECK: s_endpgm
|
; CHECK: s_endpgm
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s
|
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s
|
||||||
|
|
||||||
declare i1 @llvm.AMDGPU.class.f32(float, i32) #1
|
declare i1 @llvm.AMDGPU.class.f32(float, i32) #1
|
||||||
declare i1 @llvm.AMDGPU.class.f64(double, i32) #1
|
declare i1 @llvm.AMDGPU.class.f64(double, i32) #1
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
; RUN: llc < %s -march=r600 --mcpu=redwood | FileCheck %s --check-prefix=R600-CHECK
|
; RUN: llc < %s -march=r600 --mcpu=redwood | FileCheck %s --check-prefix=R600-CHECK
|
||||||
; RUN: llc < %s -march=r600 --mcpu=SI -verify-machineinstrs| FileCheck %s --check-prefix=SI-CHECK
|
; RUN: llc < %s -march=amdgcn --mcpu=SI -verify-machineinstrs| FileCheck %s --check-prefix=SI-CHECK
|
||||||
; RUN: llc < %s -march=r600 --mcpu=tonga -verify-machineinstrs| FileCheck %s --check-prefix=SI-CHECK
|
; RUN: llc < %s -march=amdgcn --mcpu=tonga -verify-machineinstrs| FileCheck %s --check-prefix=SI-CHECK
|
||||||
|
|
||||||
; R600-CHECK-LABEL: {{^}}sqrt_f32:
|
; R600-CHECK-LABEL: {{^}}sqrt_f32:
|
||||||
; R600-CHECK: RECIPSQRT_CLAMPED * T{{[0-9]\.[XYZW]}}, KC0[2].Z
|
; R600-CHECK: RECIPSQRT_CLAMPED * T{{[0-9]\.[XYZW]}}, KC0[2].Z
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
|
|
||||||
declare i32 @llvm.r600.read.tidig.x() nounwind readnone
|
declare i32 @llvm.r600.read.tidig.x() nounwind readnone
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
;RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck --check-prefix=SI --check-prefix=FUNC %s
|
;RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck --check-prefix=SI --check-prefix=FUNC %s
|
||||||
;RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck --check-prefix=EG --check-prefix=FUNC %s
|
;RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck --check-prefix=EG --check-prefix=FUNC %s
|
||||||
|
|
||||||
;FUNC-LABEL: {{^}}test_sdiv:
|
;FUNC-LABEL: {{^}}test_sdiv:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs -mattr=+load-store-opt -enable-misched < %s | FileCheck --check-prefix=CHECK %s
|
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs -mattr=+load-store-opt -enable-misched < %s | FileCheck --check-prefix=CHECK %s
|
||||||
; RUN: llc -march=r600 -mcpu=bonaire -verify-machineinstrs -mattr=+load-store-opt -enable-misched < %s | FileCheck --check-prefix=CHECK %s
|
; RUN: llc -march=amdgcn -mcpu=bonaire -verify-machineinstrs -mattr=+load-store-opt -enable-misched < %s | FileCheck --check-prefix=CHECK %s
|
||||||
|
|
||||||
; This test is for a bug in the machine scheduler where stores without
|
; This test is for a bug in the machine scheduler where stores without
|
||||||
; an underlying object would be moved across the barrier. In this
|
; an underlying object would be moved across the barrier. In this
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
; RUN: llc -march=r600 -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
|
||||||
|
|
||||||
; FUNC-LABEL {{^}}sextload_i1_to_i32_trunc_cmp_eq_0:
|
; FUNC-LABEL {{^}}sextload_i1_to_i32_trunc_cmp_eq_0:
|
||||||
; SI: buffer_load_ubyte [[LOAD:v[0-9]+]]
|
; SI: buffer_load_ubyte [[LOAD:v[0-9]+]]
|
||||||
|
|
Loading…
Reference in New Issue