154 lines
2.9 KiB
C++
154 lines
2.9 KiB
C++
//===--- OffloadArch.h - Definition of offloading architectures --- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_BASIC_OFFLOADARCH_H
|
|
#define LLVM_CLANG_BASIC_OFFLOADARCH_H
|
|
|
|
namespace llvm {
|
|
class StringRef;
|
|
} // namespace llvm
|
|
|
|
namespace clang {
|
|
|
|
enum class OffloadArch {
|
|
UNUSED,
|
|
UNKNOWN,
|
|
// TODO: Deprecate and remove GPU architectures older than sm_52.
|
|
SM_20,
|
|
SM_21,
|
|
SM_30,
|
|
// This has a name conflict with sys/mac.h on AIX, rename it as a workaround.
|
|
SM_32_,
|
|
SM_35,
|
|
SM_37,
|
|
SM_50,
|
|
SM_52,
|
|
SM_53,
|
|
SM_60,
|
|
SM_61,
|
|
SM_62,
|
|
SM_70,
|
|
SM_72,
|
|
SM_75,
|
|
SM_80,
|
|
SM_86,
|
|
SM_87,
|
|
SM_88,
|
|
SM_89,
|
|
SM_90,
|
|
SM_90a,
|
|
SM_100,
|
|
SM_100a,
|
|
SM_101,
|
|
SM_101a,
|
|
SM_103,
|
|
SM_103a,
|
|
SM_110,
|
|
SM_110a,
|
|
SM_120,
|
|
SM_120a,
|
|
SM_121,
|
|
SM_121a,
|
|
GFX600,
|
|
GFX601,
|
|
GFX602,
|
|
GFX700,
|
|
GFX701,
|
|
GFX702,
|
|
GFX703,
|
|
GFX704,
|
|
GFX705,
|
|
GFX801,
|
|
GFX802,
|
|
GFX803,
|
|
GFX805,
|
|
GFX810,
|
|
GFX9_GENERIC,
|
|
GFX900,
|
|
GFX902,
|
|
GFX904,
|
|
GFX906,
|
|
GFX908,
|
|
GFX909,
|
|
GFX90a,
|
|
GFX90c,
|
|
GFX9_4_GENERIC,
|
|
GFX942,
|
|
GFX950,
|
|
GFX10_1_GENERIC,
|
|
GFX1010,
|
|
GFX1011,
|
|
GFX1012,
|
|
GFX1013,
|
|
GFX10_3_GENERIC,
|
|
GFX1030,
|
|
GFX1031,
|
|
GFX1032,
|
|
GFX1033,
|
|
GFX1034,
|
|
GFX1035,
|
|
GFX1036,
|
|
GFX11_GENERIC,
|
|
GFX1100,
|
|
GFX1101,
|
|
GFX1102,
|
|
GFX1103,
|
|
GFX1150,
|
|
GFX1151,
|
|
GFX1152,
|
|
GFX1153,
|
|
GFX12_GENERIC,
|
|
GFX1200,
|
|
GFX1201,
|
|
GFX1250,
|
|
GFX1251,
|
|
AMDGCNSPIRV,
|
|
Generic, // A processor model named 'generic' if the target backend defines a
|
|
// public one.
|
|
// Intel CPUs
|
|
GRANITERAPIDS,
|
|
// Intel GPUs
|
|
BMG_G21,
|
|
LAST,
|
|
|
|
CudaDefault = OffloadArch::SM_52,
|
|
HIPDefault = OffloadArch::GFX906,
|
|
};
|
|
|
|
static inline bool IsNVIDIAOffloadArch(OffloadArch A) {
|
|
return A >= OffloadArch::SM_20 && A < OffloadArch::GFX600;
|
|
}
|
|
|
|
static inline bool IsAMDOffloadArch(OffloadArch A) {
|
|
// Generic processor model is for testing only.
|
|
return A >= OffloadArch::GFX600 && A < OffloadArch::Generic;
|
|
}
|
|
|
|
static inline bool IsIntelCPUOffloadArch(OffloadArch Arch) {
|
|
return Arch >= OffloadArch::GRANITERAPIDS && Arch < OffloadArch::BMG_G21;
|
|
}
|
|
|
|
static inline bool IsIntelGPUOffloadArch(OffloadArch Arch) {
|
|
return Arch >= OffloadArch::BMG_G21 && Arch < OffloadArch::LAST;
|
|
}
|
|
|
|
static inline bool IsIntelOffloadArch(OffloadArch Arch) {
|
|
return IsIntelCPUOffloadArch(Arch) || IsIntelGPUOffloadArch(Arch);
|
|
}
|
|
|
|
const char *OffloadArchToString(OffloadArch A);
|
|
const char *OffloadArchToVirtualArchString(OffloadArch A);
|
|
|
|
// Convert a string to an OffloadArch enum value. Returns
|
|
// OffloadArch::UNKNOWN if the string is not recognized.
|
|
OffloadArch StringToOffloadArch(llvm::StringRef S);
|
|
|
|
} // namespace clang
|
|
|
|
#endif // LLVM_CLANG_BASIC_OFFLOADARCH_H
|