summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/TargetParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Support/TargetParser.cpp')
-rw-r--r--llvm/lib/Support/TargetParser.cpp50
1 files changed, 40 insertions, 10 deletions
diff --git a/llvm/lib/Support/TargetParser.cpp b/llvm/lib/Support/TargetParser.cpp
index 1f580378c01..2f154a55e05 100644
--- a/llvm/lib/Support/TargetParser.cpp
+++ b/llvm/lib/Support/TargetParser.cpp
@@ -22,6 +22,7 @@
using namespace llvm;
using namespace ARM;
using namespace AArch64;
+using namespace AMDGPU;
namespace {
@@ -947,6 +948,8 @@ bool llvm::AArch64::isX18ReservedByDefault(const Triple &TT) {
TT.isOSWindows();
}
+namespace {
+
struct GPUInfo {
StringLiteral Name;
StringLiteral CanonicalName;
@@ -954,11 +957,9 @@ struct GPUInfo {
unsigned Features;
};
-using namespace AMDGPU;
-static constexpr GPUInfo R600GPUs[26] = {
- // Name Canonical Kind Features
- // Name
- //
+constexpr GPUInfo R600GPUs[26] = {
+ // Name Canonical Kind Features
+ // Name
{{"r600"}, {"r600"}, GK_R600, FEATURE_NONE },
{{"rv630"}, {"r600"}, GK_R600, FEATURE_NONE },
{{"rv635"}, {"r600"}, GK_R600, FEATURE_NONE },
@@ -989,9 +990,9 @@ static constexpr GPUInfo R600GPUs[26] = {
// This table should be sorted by the value of GPUKind
// Don't bother listing the implicitly true features
-static constexpr GPUInfo AMDGCNGPUs[32] = {
- // Name Canonical Kind Features
- // Name
+constexpr GPUInfo AMDGCNGPUs[32] = {
+ // Name Canonical Kind Features
+ // Name
{{"gfx600"}, {"gfx600"}, GK_GFX600, FEATURE_FAST_FMA_F32},
{{"tahiti"}, {"gfx600"}, GK_GFX600, FEATURE_FAST_FMA_F32},
{{"gfx601"}, {"gfx601"}, GK_GFX601, FEATURE_NONE},
@@ -1026,8 +1027,7 @@ static constexpr GPUInfo AMDGCNGPUs[32] = {
{{"gfx906"}, {"gfx906"}, GK_GFX906, FEATURE_FAST_FMA_F32|FEATURE_FAST_DENORMAL_F32},
};
-static const GPUInfo *getArchEntry(AMDGPU::GPUKind AK,
- ArrayRef<GPUInfo> Table) {
+const GPUInfo *getArchEntry(AMDGPU::GPUKind AK, ArrayRef<GPUInfo> Table) {
GPUInfo Search = { {""}, {""}, AK, AMDGPU::FEATURE_NONE };
auto I = std::lower_bound(Table.begin(), Table.end(), Search,
@@ -1040,6 +1040,8 @@ static const GPUInfo *getArchEntry(AMDGPU::GPUKind AK,
return I;
}
+} // namespace
+
StringRef llvm::AMDGPU::getArchNameAMDGCN(GPUKind AK) {
if (const auto *Entry = getArchEntry(AK, AMDGCNGPUs))
return Entry->CanonicalName;
@@ -1092,3 +1094,31 @@ void AMDGPU::fillValidArchListR600(SmallVectorImpl<StringRef> &Values) {
for (const auto C : R600GPUs)
Values.push_back(C.Name);
}
+
+AMDGPU::IsaVersion AMDGPU::getIsaVersion(StringRef GPU) {
+ if (GPU == "generic")
+ return {7, 0, 0};
+
+ AMDGPU::GPUKind AK = parseArchAMDGCN(GPU);
+ if (AK == AMDGPU::GPUKind::GK_NONE)
+ return {0, 0, 0};
+
+ switch (AK) {
+ case GK_GFX600: return {6, 0, 0};
+ case GK_GFX601: return {6, 0, 1};
+ case GK_GFX700: return {7, 0, 0};
+ case GK_GFX701: return {7, 0, 1};
+ case GK_GFX702: return {7, 0, 2};
+ case GK_GFX703: return {7, 0, 3};
+ case GK_GFX704: return {7, 0, 4};
+ case GK_GFX801: return {8, 0, 1};
+ case GK_GFX802: return {8, 0, 2};
+ case GK_GFX803: return {8, 0, 3};
+ case GK_GFX810: return {8, 1, 0};
+ case GK_GFX900: return {9, 0, 0};
+ case GK_GFX902: return {9, 0, 2};
+ case GK_GFX904: return {9, 0, 4};
+ case GK_GFX906: return {9, 0, 6};
+ default: return {0, 0, 0};
+ }
+}
OpenPOWER on IntegriCloud