diff options
Diffstat (limited to 'clang/tools/offload-arch/OffloadArch.cpp')
-rw-r--r-- | clang/tools/offload-arch/OffloadArch.cpp | 36 |
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; } |