aboutsummaryrefslogtreecommitdiff
path: root/clang/tools/offload-arch/OffloadArch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/tools/offload-arch/OffloadArch.cpp')
-rw-r--r--clang/tools/offload-arch/OffloadArch.cpp36
1 files changed, 21 insertions, 15 deletions
diff --git a/clang/tools/offload-arch/OffloadArch.cpp b/clang/tools/offload-arch/OffloadArch.cpp
index 74be402..3c5131e 100644
--- a/clang/tools/offload-arch/OffloadArch.cpp
+++ b/clang/tools/offload-arch/OffloadArch.cpp
@@ -21,6 +21,7 @@ enum VendorName {
all,
amdgpu,
nvptx,
+ intel,
};
static cl::opt<VendorName>
@@ -28,7 +29,8 @@ static cl::opt<VendorName>
cl::init(all),
cl::values(clEnumVal(all, "Print all GPUs (default)"),
clEnumVal(amdgpu, "Only print AMD GPUs"),
- clEnumVal(nvptx, "Only print NVIDIA GPUs")));
+ clEnumVal(nvptx, "Only print NVIDIA GPUs"),
+ clEnumVal(intel, "Only print Intel GPUs")));
cl::opt<bool> Verbose("verbose", cl::desc("Enable verbose output"),
cl::init(false), cl::cat(OffloadArchCategory));
@@ -40,6 +42,7 @@ static void PrintVersion(raw_ostream &OS) {
int printGPUsByKFD();
int printGPUsByHIP();
int printGPUsByCUDA();
+int printGPUsByLevelZero();
static int printAMD() {
#ifndef _WIN32
@@ -51,6 +54,12 @@ static int printAMD() {
}
static int printNVIDIA() { return printGPUsByCUDA(); }
+static int printIntel() { return printGPUsByLevelZero(); }
+
+const std::array<std::pair<VendorName, function_ref<int()>>, 3> VendorTable{
+ {{VendorName::amdgpu, printAMD},
+ {VendorName::nvptx, printNVIDIA},
+ {VendorName::intel, printIntel}}};
int main(int argc, char *argv[]) {
cl::HideUnrelatedOptions(OffloadArchCategory);
@@ -68,20 +77,17 @@ int main(int argc, char *argv[]) {
return 0;
}
- // If this was invoked from the legacy symlinks provide the same behavior.
- bool AMDGPUOnly = Only == VendorName::amdgpu ||
- sys::path::stem(argv[0]).starts_with("amdgpu-arch");
- bool NVIDIAOnly = Only == VendorName::nvptx ||
- sys::path::stem(argv[0]).starts_with("nvptx-arch");
-
- int NVIDIAResult = 0;
- if (!AMDGPUOnly)
- NVIDIAResult = printNVIDIA();
+ // Support legacy binaries.
+ if (sys::path::stem(argv[0]).starts_with("amdgpu-arch"))
+ Only = VendorName::amdgpu;
+ if (sys::path::stem(argv[0]).starts_with("nvptx-arch"))
+ Only = VendorName::nvptx;
- int AMDResult = 0;
- if (!NVIDIAOnly)
- AMDResult = printAMD();
+ int Result = 1;
+ for (auto [Name, Func] : VendorTable) {
+ if (Only == VendorName::all || Only == Name)
+ Result &= Func();
+ }
- // We only failed if all cases returned an error.
- return AMDResult && NVIDIAResult;
+ return Result;
}