These should be compatible with the ones the AMD OpenCL compiler defines.
http://reviews.llvm.org/D4507
Files:
lib/Basic/Targets.cpp
Index: lib/Basic/Targets.cpp
===================================================================
--- lib/Basic/Targets.cpp
+++ lib/Basic/Targets.cpp
@@ -1472,8 +1472,46 @@
class R600TargetInfo : public TargetInfo {
static const Builtin::Info BuiltinInfo[];
- /// \brief The GPU profiles supported by the R600 target.
+ /// \brief The specific GPU types supported by the R600 target.
enum GPUKind {
+ GPU_NONE = 0,
+ GPU_R600,
+ GPU_RV610,
+ GPU_RV620,
+ GPU_RV630,
+ GPU_RV635,
+ GPU_RS780,
+ GPU_RS880,
+ GPU_RV670,
+ GPU_RV710,
+ GPU_RV730,
+ GPU_RV740,
+ GPU_RV770, // XXX - 790?
+ GPU_PALM,
+ GPU_CEDAR,
+ GPU_SUMO,
+ GPU_SUMO2,
+ GPU_REDWOOD,
+ GPU_JUNIPER,
+ GPU_HEMLOCK,
+ GPU_CYPRESS,
+ GPU_BARTS,
+ GPU_TURKS,
+ GPU_CAICOS,
+ GPU_CAYMAN,
+ GPU_ARUBA,
+ GPU_TAHITI,
+ GPU_PITCAIRN,
+ GPU_VERDE,
+ GPU_OLAND,
+ GPU_BONAIRE,
+ GPU_KABINI,
+ GPU_KAVERI,
+ GPU_HAWAII
+ } GPU;
+
+ /// \brief The GPU profiles supported by the R600 target.
+ enum GPUGenerationKind {
GK_NONE,
GK_R600,
GK_R600_DOUBLE_OPS,
@@ -1485,17 +1523,135 @@
GK_CAYMAN,
GK_SOUTHERN_ISLANDS,
GK_SEA_ISLANDS
- } GPU;
+ } GPUGeneration;
+
+ static GPUGenerationKind getGenKind(GPUKind GPU) {
+ switch (GPU) {
+ case GPU_R600:
+ case GPU_RV610:
+ case GPU_RV620:
+ case GPU_RV630:
+ case GPU_RV635:
+ case GPU_RS780:
+ case GPU_RS880:
+ return GK_R600;
+ case GPU_RV670:
+ return GK_R600_DOUBLE_OPS;
+ case GPU_RV710:
+ case GPU_RV730:
+ return GK_R700;
+ case GPU_RV740:
+ case GPU_RV770:
+ return GK_R700_DOUBLE_OPS;
+ case GPU_PALM:
+ case GPU_CEDAR:
+ case GPU_SUMO:
+ case GPU_SUMO2:
+ case GPU_REDWOOD:
+ case GPU_JUNIPER:
+ return GK_EVERGREEN;
+ case GPU_HEMLOCK:
+ case GPU_CYPRESS:
+ return GK_EVERGREEN_DOUBLE_OPS;
+ case GPU_BARTS:
+ case GPU_TURKS:
+ case GPU_CAICOS:
+ return GK_NORTHERN_ISLANDS;
+ case GPU_CAYMAN:
+ case GPU_ARUBA:
+ return GK_CAYMAN;
+ case GPU_TAHITI:
+ case GPU_PITCAIRN:
+ case GPU_VERDE:
+ case GPU_OLAND:
+ return GK_SOUTHERN_ISLANDS;
+ case GPU_BONAIRE:
+ case GPU_KABINI:
+ case GPU_KAVERI:
+ case GPU_HAWAII:
+ return GK_SEA_ISLANDS;
+ default:
+ return GK_NONE;
+ }
+ }
+
+ // These are documented in the AMD OpenCL Programming guide for identifying
+ // which device is targeted.
+ static StringRef getAMDCompatDeviceMacro(GPUKind Kind) {
+ switch (Kind) {
+ case GPU_R600:
+ case GPU_RV610:
+ case GPU_RV620:
+ case GPU_RV630:
+ case GPU_RV635:
+ case GPU_RS780:
+ case GPU_RS880:
+ case GPU_RV670:
+ return "";
+ case GPU_RV710:
+ return "__ATI_RV710__";
+ case GPU_RV730:
+ return "__ATI_RV730__";
+ case GPU_RV740:
+ return "__ATI_RV740__";
+ case GPU_RV770:
+ return "__ATI_RV770__";
+ case GPU_PALM:
+ return "__Loveland__";
+ case GPU_CEDAR:
+ return "__Cedar__";
+ case GPU_SUMO:
+ return "__WinterPark__";
+ case GPU_SUMO2:
+ return "__BeaverCreek__";
+ case GPU_REDWOOD:
+ return "__Redwood__";
+ case GPU_JUNIPER:
+ return "__Juniper__";
+ case GPU_HEMLOCK:
+ case GPU_CYPRESS:
+ return "__Cypress__";
+ case GPU_BARTS:
+ return "__Barts__";
+ case GPU_TURKS:
+ return "__Turks__";
+ case GPU_CAICOS:
+ return "__Caicos__";
+ case GPU_CAYMAN:
+ return "__Cayman__";
+ case GPU_ARUBA:
+ return ""; // ???
+ case GPU_TAHITI:
+ return "__Tahiti__";
+ case GPU_PITCAIRN:
+ return "__Pitcairn__";
+ case GPU_VERDE:
+ return "__Capeverde__";
+ case GPU_OLAND:
+ return "__Oland__";
+ case GPU_BONAIRE:
+ return "__Bonaire__";
+ case GPU_KABINI:
+ case GPU_KAVERI:
+ return ""; // ???
+ case GPU_HAWAII:
+ return "__Hawaii__";
+ default:
+ return "";
+ }
+ }
public:
R600TargetInfo(const llvm::Triple &Triple)
- : TargetInfo(Triple), GPU(GK_R600) {
+ : TargetInfo(Triple),
+ GPU(GPU_NONE),
+ GPUGeneration(GK_NONE) {
DescriptionString = DescriptionStringR600;
AddrSpaceMap = &R600AddrSpaceMap;
UseAddrSpaceMapMangling = true;
}
- const char * getClobbers() const override {
+ const char *getClobbers() const override {
return "";
}
@@ -1525,6 +1681,14 @@
void getTargetDefines(const LangOptions &Opts,
MacroBuilder &Builder) const override {
Builder.defineMacro("__R600__");
+
+ if (GPU != GPU_NONE) {
+ Builder.defineMacro("__GPU__");
+
+ StringRef Macro = getAMDCompatDeviceMacro(GPU);
+ if (!Macro.empty())
+ Builder.defineMacro(Macro);
+ }
}
BuiltinVaListKind getBuiltinVaListKind() const override {
@@ -1533,47 +1697,48 @@
bool setCPU(const std::string &Name) override {
GPU = llvm::StringSwitch<GPUKind>(Name)
- .Case("r600" , GK_R600)
- .Case("rv610", GK_R600)
- .Case("rv620", GK_R600)
- .Case("rv630", GK_R600)
- .Case("rv635", GK_R600)
- .Case("rs780", GK_R600)
- .Case("rs880", GK_R600)
- .Case("rv670", GK_R600_DOUBLE_OPS)
- .Case("rv710", GK_R700)
- .Case("rv730", GK_R700)
- .Case("rv740", GK_R700_DOUBLE_OPS)
- .Case("rv770", GK_R700_DOUBLE_OPS)
- .Case("palm", GK_EVERGREEN)
- .Case("cedar", GK_EVERGREEN)
- .Case("sumo", GK_EVERGREEN)
- .Case("sumo2", GK_EVERGREEN)
- .Case("redwood", GK_EVERGREEN)
- .Case("juniper", GK_EVERGREEN)
- .Case("hemlock", GK_EVERGREEN_DOUBLE_OPS)
- .Case("cypress", GK_EVERGREEN_DOUBLE_OPS)
- .Case("barts", GK_NORTHERN_ISLANDS)
- .Case("turks", GK_NORTHERN_ISLANDS)
- .Case("caicos", GK_NORTHERN_ISLANDS)
- .Case("cayman", GK_CAYMAN)
- .Case("aruba", GK_CAYMAN)
- .Case("tahiti", GK_SOUTHERN_ISLANDS)
- .Case("pitcairn", GK_SOUTHERN_ISLANDS)
- .Case("verde", GK_SOUTHERN_ISLANDS)
- .Case("oland", GK_SOUTHERN_ISLANDS)
- .Case("bonaire", GK_SEA_ISLANDS)
- .Case("kabini", GK_SEA_ISLANDS)
- .Case("kaveri", GK_SEA_ISLANDS)
- .Case("hawaii", GK_SEA_ISLANDS)
- .Default(GK_NONE);
-
- if (GPU == GK_NONE) {
+ .Case("r600", GPU_R600)
+ .Case("rv610", GPU_RV610)
+ .Case("rv620", GPU_RV620)
+ .Case("rv630", GPU_RV630)
+ .Case("rv635", GPU_RV635)
+ .Case("rs780", GPU_RS780)
+ .Case("rs880", GPU_RS880)
+ .Case("rv670", GPU_RV670)
+ .Case("rv710", GPU_RV710)
+ .Case("rv730", GPU_RV730)
+ .Case("rv740", GPU_RV740)
+ .Case("rv770", GPU_RV770)
+ .Case("palm", GPU_PALM)
+ .Case("cedar", GPU_CEDAR)
+ .Case("sumo", GPU_SUMO)
+ .Case("sumo2", GPU_SUMO2)
+ .Case("redwood", GPU_REDWOOD)
+ .Case("juniper", GPU_JUNIPER)
+ .Case("hemlock", GPU_HEMLOCK)
+ .Case("cypress", GPU_CYPRESS)
+ .Case("barts", GPU_BARTS)
+ .Case("turks", GPU_TURKS)
+ .Case("caicos", GPU_CAICOS)
+ .Case("cayman", GPU_CAYMAN)
+ .Case("aruba", GPU_ARUBA)
+ .Case("tahiti", GPU_TAHITI)
+ .Case("pitcairn", GPU_PITCAIRN)
+ .Case("verde", GPU_VERDE)
+ .Case("oland", GPU_OLAND)
+ .Case("bonaire", GPU_BONAIRE)
+ .Case("kabini", GPU_KABINI)
+ .Case("kaveri", GPU_KAVERI)
+ .Case("hawaii", GPU_HAWAII)
+ .Default(GPU_NONE);
+
+ if (GPU == GPU_NONE)
return false;
- }
- // Set the correct data layout
- switch (GPU) {
+ GPUGeneration = getGenKind(GPU);
+
+ // Set the correct data layout.
+ switch (GPUGeneration) {
case GK_NONE:
case GK_R600:
case GK_R700:
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits