diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Basic/Targets/AMDGPU.cpp | 124 | ||||
| -rw-r--r-- | clang/lib/Basic/Targets/AMDGPU.h | 218 | ||||
| -rw-r--r-- | clang/test/Driver/amdgpu-macros.cl | 222 | ||||
| -rw-r--r-- | clang/test/Misc/target-invalid-cpu-note.c | 2 | 
4 files changed, 384 insertions, 182 deletions
| diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp index 17ae336505b..a4c0b42f767 100644 --- a/clang/lib/Basic/Targets/AMDGPU.cpp +++ b/clang/lib/Basic/Targets/AMDGPU.cpp @@ -157,49 +157,62 @@ bool AMDGPUTargetInfo::initFeatureMap(      const std::vector<std::string> &FeatureVec) const {    // XXX - What does the member GPU mean if device name string passed here? -  if (getTriple().getArch() == llvm::Triple::amdgcn) { +  if (isAMDGCN(getTriple())) {      if (CPU.empty()) -      CPU = "tahiti"; +      CPU = "gfx600";      switch (parseAMDGCNName(CPU).Kind) { -    case GK_GFX6: -    case GK_GFX7: -      break; - -    case GK_GFX9: +    case GK_GFX902: +    case GK_GFX900:        Features["gfx9-insts"] = true;        LLVM_FALLTHROUGH; -    case GK_GFX8: -      Features["s-memrealtime"] = true; +    case GK_GFX810: +    case GK_GFX803: +    case GK_GFX802: +    case GK_GFX801:        Features["16-bit-insts"] = true;        Features["dpp"] = true; +      Features["s-memrealtime"] = true; +      break; +    case GK_GFX704: +    case GK_GFX703: +    case GK_GFX702: +    case GK_GFX701: +    case GK_GFX700: +    case GK_GFX601: +    case GK_GFX600:        break; -      case GK_NONE:        return false;      default: -      llvm_unreachable("unhandled subtarget"); +      llvm_unreachable("Unhandled GPU!");      }    } else {      if (CPU.empty())        CPU = "r600";      switch (parseR600Name(CPU).Kind) { -    case GK_R600: -    case GK_R700: -    case GK_EVERGREEN: -    case GK_NORTHERN_ISLANDS: -      break; -    case GK_R600_DOUBLE_OPS: -    case GK_R700_DOUBLE_OPS: -    case GK_EVERGREEN_DOUBLE_OPS:      case GK_CAYMAN: +    case GK_CYPRESS: +    case GK_RV770: +    case GK_RV670:        // TODO: Add fp64 when implemented.        break; -    case GK_NONE: -      return false; +    case GK_TURKS: +    case GK_CAICOS: +    case GK_BARTS: +    case GK_SUMO: +    case GK_REDWOOD: +    case GK_JUNIPER: +    case GK_CEDAR: +    case GK_RV730: +    case GK_RV710: +    case GK_RS880: +    case GK_R630: +    case GK_R600: +      break;      default: -      llvm_unreachable("unhandled subtarget"); +      llvm_unreachable("Unhandled GPU!");      }    } @@ -210,6 +223,7 @@ void AMDGPUTargetInfo::adjustTargetOptions(const CodeGenOptions &CGOpts,                                             TargetOptions &TargetOpts) const {    bool hasFP32Denormals = false;    bool hasFP64Denormals = false; +  GPUInfo CGOptsGPU = parseGPUName(TargetOpts.CPU);    for (auto &I : TargetOpts.FeaturesAsWritten) {      if (I == "+fp32-denormals" || I == "-fp32-denormals")        hasFP32Denormals = true; @@ -218,46 +232,52 @@ void AMDGPUTargetInfo::adjustTargetOptions(const CodeGenOptions &CGOpts,    }    if (!hasFP32Denormals)      TargetOpts.Features.push_back( -        (Twine(hasFullSpeedFMAF32(TargetOpts.CPU) && !CGOpts.FlushDenorm +        (Twine(CGOptsGPU.HasFastFMAF && !CGOpts.FlushDenorm                     ? '+'                     : '-') +           Twine("fp32-denormals"))              .str());    // Always do not flush fp64 or fp16 denorms. -  if (!hasFP64Denormals && hasFP64) +  if (!hasFP64Denormals && CGOptsGPU.HasFP64)      TargetOpts.Features.push_back("+fp64-fp16-denormals");  }  constexpr AMDGPUTargetInfo::GPUInfo AMDGPUTargetInfo::InvalidGPU; -constexpr AMDGPUTargetInfo::GPUInfo AMDGPUTargetInfo::R600Names[]; -constexpr AMDGPUTargetInfo::GPUInfo AMDGPUTargetInfo::AMDGCNNames[]; +constexpr AMDGPUTargetInfo::GPUInfo AMDGPUTargetInfo::R600GPUs[]; +constexpr AMDGPUTargetInfo::GPUInfo AMDGPUTargetInfo::AMDGCNGPUs[]; +  AMDGPUTargetInfo::GPUInfo AMDGPUTargetInfo::parseR600Name(StringRef Name) {    const auto *Result = llvm::find_if( -      R600Names, [Name](const GPUInfo &GPU) { return GPU.Name == Name; }); +      R600GPUs, [Name](const GPUInfo &GPU) { return GPU.Name == Name; }); -  if (Result == std::end(R600Names)) +  if (Result == std::end(R600GPUs))      return InvalidGPU;    return *Result;  }  AMDGPUTargetInfo::GPUInfo AMDGPUTargetInfo::parseAMDGCNName(StringRef Name) { -  const auto *Result = -      llvm::find_if(AMDGCNNames, [Name](const GPUInfo &GPU) { -        return GPU.Name == Name; -      }); +  const auto *Result = llvm::find_if( +      AMDGCNGPUs, [Name](const GPUInfo &GPU) { return GPU.Name == Name; }); -  if (Result == std::end(AMDGCNNames)) +  if (Result == std::end(AMDGCNGPUs))      return InvalidGPU;    return *Result;  } +AMDGPUTargetInfo::GPUInfo AMDGPUTargetInfo::parseGPUName(StringRef Name) const { +  if (isAMDGCN(getTriple())) +    return parseAMDGCNName(Name); +  else +    return parseR600Name(Name); +} +  void AMDGPUTargetInfo::fillValidCPUList(      SmallVectorImpl<StringRef> &Values) const { -  if (getTriple().getArch() == llvm::Triple::amdgcn) -    llvm::for_each(AMDGCNNames, [&Values](const GPUInfo &GPU) { +  if (isAMDGCN(getTriple())) +    llvm::for_each(AMDGCNGPUs, [&Values](const GPUInfo &GPU) {                     Values.emplace_back(GPU.Name);});    else -    llvm::for_each(R600Names, [&Values](const GPUInfo &GPU) { +    llvm::for_each(R600GPUs, [&Values](const GPUInfo &GPU) {                     Values.emplace_back(GPU.Name);});  } @@ -273,22 +293,10 @@ void AMDGPUTargetInfo::setAddressSpaceMap(bool DefaultIsPrivate) {  AMDGPUTargetInfo::AMDGPUTargetInfo(const llvm::Triple &Triple,                                     const TargetOptions &Opts) -  : TargetInfo(Triple), -    GPU(isAMDGCN(Triple) ? AMDGCNNames[0] : parseR600Name(Opts.CPU)), -    hasFP64(false), hasFMAF(false), hasLDEXPF(false), -    AS(isGenericZero(Triple)) { -  if (getTriple().getArch() == llvm::Triple::amdgcn) { -    hasFP64 = true; -    hasFMAF = true; -    hasLDEXPF = true; -  } -  if (getTriple().getArch() == llvm::Triple::r600) { -    if (GPU.Kind == GK_EVERGREEN_DOUBLE_OPS || GPU.Kind == GK_CAYMAN) { -      hasFMAF = true; -    } -  } +  : TargetInfo(Triple), AS(isGenericZero(Triple)), +    GPU(isAMDGCN(Triple) ? AMDGCNGPUs[0] : parseR600Name(Opts.CPU)) {    auto IsGenericZero = isGenericZero(Triple); -  resetDataLayout(getTriple().getArch() == llvm::Triple::amdgcn +  resetDataLayout(isAMDGCN(getTriple())                        ? (IsGenericZero ? DataLayoutStringSIGenericIsZero                                         : DataLayoutStringSIPrivateIsZero)                        : DataLayoutStringR600); @@ -327,7 +335,7 @@ void AMDGPUTargetInfo::getTargetDefines(const LangOptions &Opts,    Builder.defineMacro("__AMD__");    Builder.defineMacro("__AMDGPU__"); -  if (getTriple().getArch() == llvm::Triple::amdgcn) +  if (isAMDGCN(getTriple()))      Builder.defineMacro("__AMDGCN__");    else      Builder.defineMacro("__R600__"); @@ -335,10 +343,16 @@ void AMDGPUTargetInfo::getTargetDefines(const LangOptions &Opts,    if (GPU.Kind != GK_NONE)      Builder.defineMacro(Twine("__") + Twine(GPU.CanonicalName) + Twine("__")); -  if (hasFMAF) +  // TODO: __HAS_FMAF__, __HAS_LDEXPF__, __HAS_FP64__ are deprecated and will be +  // removed in the near future. +  if (GPU.HasFMAF)      Builder.defineMacro("__HAS_FMAF__"); -  if (hasLDEXPF) +  if (GPU.HasFastFMAF) +    Builder.defineMacro("FP_FAST_FMAF"); +  if (GPU.HasLDEXPF)      Builder.defineMacro("__HAS_LDEXPF__"); -  if (hasFP64) +  if (GPU.HasFP64)      Builder.defineMacro("__HAS_FP64__"); +  if (GPU.HasFastFMA) +    Builder.defineMacro("FP_FAST_FMA");  } diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 8e4ccc500f7..b39f6c9ab0a 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -47,101 +47,139 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo {      }    }; -  /// \brief The GPU profiles supported by the AMDGPU target. -  enum GPUKind { -    GK_NONE, +  /// \brief GPU kinds supported by the AMDGPU target. +  enum GPUKind : uint32_t { +    // Not specified processor. +    GK_NONE = 0, + +    // R600-based processors.      GK_R600, -    GK_R600_DOUBLE_OPS, -    GK_R700, -    GK_R700_DOUBLE_OPS, -    GK_EVERGREEN, -    GK_EVERGREEN_DOUBLE_OPS, -    GK_NORTHERN_ISLANDS, +    GK_R630, +    GK_RS880, +    GK_RV670, +    GK_RV710, +    GK_RV730, +    GK_RV770, +    GK_CEDAR, +    GK_CYPRESS, +    GK_JUNIPER, +    GK_REDWOOD, +    GK_SUMO, +    GK_BARTS, +    GK_CAICOS,      GK_CAYMAN, -    GK_GFX6, -    GK_GFX7, -    GK_GFX8, -    GK_GFX9 +    GK_TURKS, + +    GK_R600_FIRST = GK_R600, +    GK_R600_LAST = GK_TURKS, + +    // AMDGCN-based processors. +    GK_GFX600, +    GK_GFX601, +    GK_GFX700, +    GK_GFX701, +    GK_GFX702, +    GK_GFX703, +    GK_GFX704, +    GK_GFX801, +    GK_GFX802, +    GK_GFX803, +    GK_GFX810, +    GK_GFX900, +    GK_GFX902, + +    GK_AMDGCN_FIRST = GK_GFX600, +    GK_AMDGCN_LAST = GK_GFX902,    };    struct GPUInfo {      llvm::StringLiteral Name;      llvm::StringLiteral CanonicalName;      AMDGPUTargetInfo::GPUKind Kind; +    bool HasFMAF; +    bool HasFastFMAF; +    bool HasLDEXPF; +    bool HasFP64; +    bool HasFastFMA;    }; -  GPUInfo GPU; - -  static constexpr GPUInfo InvalidGPU = {{""}, {""}, GK_NONE}; -  static constexpr GPUInfo R600Names[26] = { -      {{"r600"},    {"r600"},    GK_R600}, -      {{"rv630"},   {"r600"},    GK_R600}, -      {{"rv635"},   {"r600"},    GK_R600}, -      {{"r630"},    {"r630"},    GK_R600}, -      {{"rs780"},   {"rs880"},   GK_R600}, -      {{"rs880"},   {"rs880"},   GK_R600}, -      {{"rv610"},   {"rs880"},   GK_R600}, -      {{"rv620"},   {"rs880"},   GK_R600}, -      {{"rv670"},   {"rv670"},   GK_R600_DOUBLE_OPS}, -      {{"rv710"},   {"rv710"},   GK_R700}, -      {{"rv730"},   {"rv730"},   GK_R700}, -      {{"rv740"},   {"rv770"},   GK_R700_DOUBLE_OPS}, -      {{"rv770"},   {"rv770"},   GK_R700_DOUBLE_OPS}, -      {{"cedar"},   {"cedar"},   GK_EVERGREEN}, -      {{"palm"},    {"cedar"},   GK_EVERGREEN}, -      {{"cypress"}, {"cypress"}, GK_EVERGREEN_DOUBLE_OPS}, -      {{"hemlock"}, {"cypress"}, GK_EVERGREEN_DOUBLE_OPS}, -      {{"juniper"}, {"juniper"}, GK_EVERGREEN}, -      {{"redwood"}, {"redwood"}, GK_EVERGREEN}, -      {{"sumo"},    {"sumo"},    GK_EVERGREEN}, -      {{"sumo2"},   {"sumo"},    GK_EVERGREEN}, -      {{"barts"},   {"barts"},   GK_NORTHERN_ISLANDS}, -      {{"caicos"},  {"caicos"},  GK_NORTHERN_ISLANDS}, -      {{"turks"},   {"turks"},   GK_NORTHERN_ISLANDS}, -      {{"aruba"},   {"cayman"},  GK_CAYMAN}, -      {{"cayman"},  {"cayman"},  GK_CAYMAN}, +  static constexpr GPUInfo InvalidGPU = +    {{""}, {""}, GK_NONE, false, false, false, false, false}; +  static constexpr GPUInfo R600GPUs[26] = { +  // Name         Canonical    Kind        Has    Has    Has    Has    Has +  //              Name                     FMAF   Fast   LDEXPF FP64   Fast +  //                                              FMAF                 FMA +    {{"r600"},    {"r600"},    GK_R600,    false, false, false, false, false}, +    {{"rv630"},   {"r600"},    GK_R600,    false, false, false, false, false}, +    {{"rv635"},   {"r600"},    GK_R600,    false, false, false, false, false}, +    {{"r630"},    {"r630"},    GK_R630,    false, false, false, false, false}, +    {{"rs780"},   {"rs880"},   GK_RS880,   false, false, false, false, false}, +    {{"rs880"},   {"rs880"},   GK_RS880,   false, false, false, false, false}, +    {{"rv610"},   {"rs880"},   GK_RS880,   false, false, false, false, false}, +    {{"rv620"},   {"rs880"},   GK_RS880,   false, false, false, false, false}, +    {{"rv670"},   {"rv670"},   GK_RV670,   false, false, false, false, false}, +    {{"rv710"},   {"rv710"},   GK_RV710,   false, false, false, false, false}, +    {{"rv730"},   {"rv730"},   GK_RV730,   false, false, false, false, false}, +    {{"rv740"},   {"rv770"},   GK_RV770,   false, false, false, false, false}, +    {{"rv770"},   {"rv770"},   GK_RV770,   false, false, false, false, false}, +    {{"cedar"},   {"cedar"},   GK_CEDAR,   false, false, false, false, false}, +    {{"palm"},    {"cedar"},   GK_CEDAR,   false, false, false, false, false}, +    {{"cypress"}, {"cypress"}, GK_CYPRESS, true,  false, false, false, false}, +    {{"hemlock"}, {"cypress"}, GK_CYPRESS, true,  false, false, false, false}, +    {{"juniper"}, {"juniper"}, GK_JUNIPER, false, false, false, false, false}, +    {{"redwood"}, {"redwood"}, GK_REDWOOD, false, false, false, false, false}, +    {{"sumo"},    {"sumo"},    GK_SUMO,    false, false, false, false, false}, +    {{"sumo2"},   {"sumo"},    GK_SUMO,    false, false, false, false, false}, +    {{"barts"},   {"barts"},   GK_BARTS,   false, false, false, false, false}, +    {{"caicos"},  {"caicos"},  GK_BARTS,   false, false, false, false, false}, +    {{"aruba"},   {"cayman"},  GK_CAYMAN,  true,  false, false, false, false}, +    {{"cayman"},  {"cayman"},  GK_CAYMAN,  true,  false, false, false, false}, +    {{"turks"},   {"turks"},   GK_TURKS,   false, false, false, false, false},    }; -  static constexpr GPUInfo AMDGCNNames[30] = { -      {{"gfx600"},    {"gfx600"}, GK_GFX6}, -      {{"tahiti"},    {"gfx600"}, GK_GFX6}, -      {{"gfx601"},    {"gfx601"}, GK_GFX6}, -      {{"hainan"},    {"gfx601"}, GK_GFX6}, -      {{"oland"},     {"gfx601"}, GK_GFX6}, -      {{"pitcairn"},  {"gfx601"}, GK_GFX6}, -      {{"verde"},     {"gfx601"}, GK_GFX6}, -      {{"gfx700"},    {"gfx700"}, GK_GFX7}, -      {{"kaveri"},    {"gfx700"}, GK_GFX7}, -      {{"gfx701"},    {"gfx701"}, GK_GFX7}, -      {{"hawaii"},    {"gfx701"}, GK_GFX7}, -      {{"gfx702"},    {"gfx702"}, GK_GFX7}, -      {{"gfx703"},    {"gfx703"}, GK_GFX7}, -      {{"kabini"},    {"gfx703"}, GK_GFX7}, -      {{"mullins"},   {"gfx703"}, GK_GFX7}, -      {{"gfx704"},    {"gfx704"}, GK_GFX7}, -      {{"bonaire"},   {"gfx704"}, GK_GFX7}, -      {{"gfx801"},    {"gfx801"}, GK_GFX8}, -      {{"carrizo"},   {"gfx801"}, GK_GFX8}, -      {{"gfx802"},    {"gfx802"}, GK_GFX8}, -      {{"iceland"},   {"gfx802"}, GK_GFX8}, -      {{"tonga"},     {"gfx802"}, GK_GFX8}, -      {{"gfx803"},    {"gfx803"}, GK_GFX8}, -      {{"fiji"},      {"gfx803"}, GK_GFX8}, -      {{"polaris10"}, {"gfx803"}, GK_GFX8}, -      {{"polaris11"}, {"gfx803"}, GK_GFX8}, -      {{"gfx810"},    {"gfx810"}, GK_GFX8}, -      {{"stoney"},    {"gfx810"}, GK_GFX8}, -      {{"gfx900"},    {"gfx900"}, GK_GFX9}, -      {{"gfx902"},    {"gfx902"}, GK_GFX9}, +  static constexpr GPUInfo AMDGCNGPUs[30] = { +  // Name           Canonical    Kind        Has   Has    Has    Has   Has +  //                Name                     FMAF  Fast   LDEXPF FP64  Fast +  //                                               FMAF                FMA +    {{"gfx600"},    {"gfx600"},  GK_GFX600,  true, true,  true,  true, true}, +    {{"tahiti"},    {"gfx600"},  GK_GFX600,  true, true,  true,  true, true}, +    {{"gfx601"},    {"gfx601"},  GK_GFX601,  true, false, true,  true, true}, +    {{"hainan"},    {"gfx601"},  GK_GFX601,  true, false, true,  true, true}, +    {{"oland"},     {"gfx601"},  GK_GFX601,  true, false, true,  true, true}, +    {{"pitcairn"},  {"gfx601"},  GK_GFX601,  true, false, true,  true, true}, +    {{"verde"},     {"gfx601"},  GK_GFX601,  true, false, true,  true, true}, +    {{"gfx700"},    {"gfx700"},  GK_GFX700,  true, false, true,  true, true}, +    {{"kaveri"},    {"gfx700"},  GK_GFX700,  true, false, true,  true, true}, +    {{"gfx701"},    {"gfx701"},  GK_GFX701,  true, true,  true,  true, true}, +    {{"hawaii"},    {"gfx701"},  GK_GFX701,  true, true,  true,  true, true}, +    {{"gfx702"},    {"gfx702"},  GK_GFX702,  true, true,  true,  true, true}, +    {{"gfx703"},    {"gfx703"},  GK_GFX703,  true, false, true,  true, true}, +    {{"kabini"},    {"gfx703"},  GK_GFX703,  true, false, true,  true, true}, +    {{"mullins"},   {"gfx703"},  GK_GFX703,  true, false, true,  true, true}, +    {{"gfx704"},    {"gfx704"},  GK_GFX704,  true, false, true,  true, true}, +    {{"bonaire"},   {"gfx704"},  GK_GFX704,  true, false, true,  true, true}, +    {{"gfx801"},    {"gfx801"},  GK_GFX801,  true, true,  true,  true, true}, +    {{"carrizo"},   {"gfx801"},  GK_GFX801,  true, true,  true,  true, true}, +    {{"gfx802"},    {"gfx802"},  GK_GFX802,  true, false, true,  true, true}, +    {{"iceland"},   {"gfx802"},  GK_GFX802,  true, false, true,  true, true}, +    {{"tonga"},     {"gfx802"},  GK_GFX802,  true, false, true,  true, true}, +    {{"gfx803"},    {"gfx803"},  GK_GFX803,  true, false, true,  true, true}, +    {{"fiji"},      {"gfx803"},  GK_GFX803,  true, false, true,  true, true}, +    {{"polaris10"}, {"gfx803"},  GK_GFX803,  true, false, true,  true, true}, +    {{"polaris11"}, {"gfx803"},  GK_GFX803,  true, false, true,  true, true}, +    {{"gfx810"},    {"gfx810"},  GK_GFX810,  true, false, true,  true, true}, +    {{"stoney"},    {"gfx810"},  GK_GFX810,  true, false, true,  true, true}, +    {{"gfx900"},    {"gfx900"},  GK_GFX900,  true, true,  true,  true, true}, +    {{"gfx902"},    {"gfx902"},  GK_GFX900,  true, true,  true,  true, true},    }; -  bool hasFP64 : 1; -  bool hasFMAF : 1; -  bool hasLDEXPF : 1; -  const AddrSpace AS; +  static GPUInfo parseR600Name(StringRef Name); -  static bool hasFullSpeedFMAF32(StringRef GPUName) { -    return parseAMDGCNName(GPUName).Kind >= GK_GFX9; -  } +  static GPUInfo parseAMDGCNName(StringRef Name); + +  GPUInfo parseGPUName(StringRef Name) const; + +  const AddrSpace AS; +  GPUInfo GPU;    static bool isAMDGCN(const llvm::Triple &TT) {      return TT.getArch() == llvm::Triple::amdgcn; @@ -157,12 +195,10 @@ public:    void adjust(LangOptions &Opts) override;    uint64_t getPointerWidthV(unsigned AddrSpace) const override { -    if (GPU.Kind <= GK_CAYMAN) +    if (GPU.Kind <= GK_R600_LAST)        return 32; - -    if (AddrSpace == AS.Private || AddrSpace == AS.Local) { +    if (AddrSpace == AS.Private || AddrSpace == AS.Local)        return 32; -    }      return 64;    } @@ -278,10 +314,6 @@ public:      return TargetInfo::CharPtrBuiltinVaList;    } -  static GPUInfo parseR600Name(StringRef Name); - -  static GPUInfo parseAMDGCNName(StringRef Name); -    bool isValidCPUName(StringRef Name) const override {      if (getTriple().getArch() == llvm::Triple::amdgcn)        return GK_NONE != parseAMDGCNName(Name).Kind; @@ -297,7 +329,7 @@ public:      else        GPU = parseR600Name(Name); -    return GPU.Kind != GK_NONE; +    return GK_NONE != GPU.Kind;    }    void setSupportedOpenCLOpts() override { @@ -305,16 +337,16 @@ public:      Opts.support("cl_clang_storage_class_specifiers");      Opts.support("cl_khr_icd"); -    if (hasFP64) +    if (GPU.HasFP64)        Opts.support("cl_khr_fp64"); -    if (GPU.Kind >= GK_EVERGREEN) { +    if (GPU.Kind >= GK_CEDAR) {        Opts.support("cl_khr_byte_addressable_store");        Opts.support("cl_khr_global_int32_base_atomics");        Opts.support("cl_khr_global_int32_extended_atomics");        Opts.support("cl_khr_local_int32_base_atomics");        Opts.support("cl_khr_local_int32_extended_atomics");      } -    if (GPU.Kind >= GK_GFX6) { +    if (GPU.Kind >= GK_AMDGCN_FIRST) {        Opts.support("cl_khr_fp16");        Opts.support("cl_khr_int64_base_atomics");        Opts.support("cl_khr_int64_extended_atomics"); diff --git a/clang/test/Driver/amdgpu-macros.cl b/clang/test/Driver/amdgpu-macros.cl index 1776bd8668a..a047a7cee50 100644 --- a/clang/test/Driver/amdgpu-macros.cl +++ b/clang/test/Driver/amdgpu-macros.cl @@ -28,30 +28,116 @@  // RUN: %clang -E -dM -target r600 -mcpu=sumo2 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,SUMO %s  // RUN: %clang -E -dM -target r600 -mcpu=barts %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,BARTS %s  // RUN: %clang -E -dM -target r600 -mcpu=caicos %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,CAICOS %s -// RUN: %clang -E -dM -target r600 -mcpu=turks %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,TURKS %s  // RUN: %clang -E -dM -target r600 -mcpu=aruba %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,CAYMAN %s  // RUN: %clang -E -dM -target r600 -mcpu=cayman %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,CAYMAN %s +// RUN: %clang -E -dM -target r600 -mcpu=turks %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,TURKS %s + +// R600-NOT:    #define FP_FAST_FMA 1 +// R630-NOT:    #define FP_FAST_FMA 1 +// RS880-NOT:   #define FP_FAST_FMA 1 +// RV670-NOT:   #define FP_FAST_FMA 1 +// RV710-NOT:   #define FP_FAST_FMA 1 +// RV730-NOT:   #define FP_FAST_FMA 1 +// RV770-NOT:   #define FP_FAST_FMA 1 +// CEDAR-NOT:   #define FP_FAST_FMA 1 +// CYPRESS-NOT: #define FP_FAST_FMA 1 +// JUNIPER-NOT: #define FP_FAST_FMA 1 +// REDWOOD-NOT: #define FP_FAST_FMA 1 +// SUMO-NOT:    #define FP_FAST_FMA 1 +// BARTS-NOT:   #define FP_FAST_FMA 1 +// CAICOS-NOT:  #define FP_FAST_FMA 1 +// CAYMAN-NOT:  #define FP_FAST_FMA 1 +// TURKS-NOT:   #define FP_FAST_FMA 1 + +// R600-NOT:    #define FP_FAST_FMAF 1 +// R630-NOT:    #define FP_FAST_FMAF 1 +// RS880-NOT:   #define FP_FAST_FMAF 1 +// RV670-NOT:   #define FP_FAST_FMAF 1 +// RV710-NOT:   #define FP_FAST_FMAF 1 +// RV730-NOT:   #define FP_FAST_FMAF 1 +// RV770-NOT:   #define FP_FAST_FMAF 1 +// CEDAR-NOT:   #define FP_FAST_FMAF 1 +// CYPRESS-NOT: #define FP_FAST_FMAF 1 +// JUNIPER-NOT: #define FP_FAST_FMAF 1 +// REDWOOD-NOT: #define FP_FAST_FMAF 1 +// SUMO-NOT:    #define FP_FAST_FMAF 1 +// BARTS-NOT:   #define FP_FAST_FMAF 1 +// CAICOS-NOT:  #define FP_FAST_FMAF 1 +// CAYMAN-NOT:  #define FP_FAST_FMAF 1 +// TURKS-NOT:   #define FP_FAST_FMAF 1 -// ARCH-R600-DAG: #define __AMD__ 1  // ARCH-R600-DAG: #define __AMDGPU__ 1 +// ARCH-R600-DAG: #define __AMD__ 1 + +// R600-NOT:    #define __HAS_FMAF__ 1 +// R630-NOT:    #define __HAS_FMAF__ 1 +// RS880-NOT:   #define __HAS_FMAF__ 1 +// RV670-NOT:   #define __HAS_FMAF__ 1 +// RV710-NOT:   #define __HAS_FMAF__ 1 +// RV730-NOT:   #define __HAS_FMAF__ 1 +// RV770-NOT:   #define __HAS_FMAF__ 1 +// CEDAR-NOT:   #define __HAS_FMAF__ 1 +// CYPRESS-DAG: #define __HAS_FMAF__ 1 +// JUNIPER-NOT: #define __HAS_FMAF__ 1 +// REDWOOD-NOT: #define __HAS_FMAF__ 1 +// SUMO-NOT:    #define __HAS_FMAF__ 1 +// BARTS-NOT:   #define __HAS_FMAF__ 1 +// CAICOS-NOT:  #define __HAS_FMAF__ 1 +// CAYMAN-DAG:  #define __HAS_FMAF__ 1 +// TURKS-NOT:   #define __HAS_FMAF__ 1 + +// R600-NOT:    #define __HAS_FP64__ 1 +// R630-NOT:    #define __HAS_FP64__ 1 +// RS880-NOT:   #define __HAS_FP64__ 1 +// RV670-NOT:   #define __HAS_FP64__ 1 +// RV710-NOT:   #define __HAS_FP64__ 1 +// RV730-NOT:   #define __HAS_FP64__ 1 +// RV770-NOT:   #define __HAS_FP64__ 1 +// CEDAR-NOT:   #define __HAS_FP64__ 1 +// CYPRESS-NOT: #define __HAS_FP64__ 1 +// JUNIPER-NOT: #define __HAS_FP64__ 1 +// REDWOOD-NOT: #define __HAS_FP64__ 1 +// SUMO-NOT:    #define __HAS_FP64__ 1 +// BARTS-NOT:   #define __HAS_FP64__ 1 +// CAICOS-NOT:  #define __HAS_FP64__ 1 +// CAYMAN-NOT:  #define __HAS_FP64__ 1 +// TURKS-NOT:   #define __HAS_FP64__ 1 + +// R600-NOT:    #define __HAS_LDEXPF__ 1 +// R630-NOT:    #define __HAS_LDEXPF__ 1 +// RS880-NOT:   #define __HAS_LDEXPF__ 1 +// RV670-NOT:   #define __HAS_LDEXPF__ 1 +// RV710-NOT:   #define __HAS_LDEXPF__ 1 +// RV730-NOT:   #define __HAS_LDEXPF__ 1 +// RV770-NOT:   #define __HAS_LDEXPF__ 1 +// CEDAR-NOT:   #define __HAS_LDEXPF__ 1 +// CYPRESS-NOT: #define __HAS_LDEXPF__ 1 +// JUNIPER-NOT: #define __HAS_LDEXPF__ 1 +// REDWOOD-NOT: #define __HAS_LDEXPF__ 1 +// SUMO-NOT:    #define __HAS_LDEXPF__ 1 +// BARTS-NOT:   #define __HAS_LDEXPF__ 1 +// CAICOS-NOT:  #define __HAS_LDEXPF__ 1 +// CAYMAN-NOT:  #define __HAS_LDEXPF__ 1 +// TURKS-NOT:   #define __HAS_LDEXPF__ 1 +  // ARCH-R600-DAG: #define __R600__ 1 -// R600:    #define __r600__ 1 -// R630:    #define __r630__ 1 -// RS880:   #define __rs880__ 1 -// RV670:   #define __rv670__ 1 -// RV710:   #define __rv710__ 1 -// RV730:   #define __rv730__ 1 -// RV770:   #define __rv770__ 1 -// CEDAR:   #define __cedar__ 1 -// CYPRESS: #define __cypress__ 1 -// JUNIPER: #define __juniper__ 1 -// REDWOOD: #define __redwood__ 1 -// SUMO:    #define __sumo__ 1 -// BARTS:   #define __barts__ 1 -// CAICOS:  #define __caicos__ 1 -// TURKS:   #define __turks__ 1 -// CAYMAN:  #define __cayman__ 1 +// R600-DAG:    #define __r600__ 1 +// R630-DAG:    #define __r630__ 1 +// RS880-DAG:   #define __rs880__ 1 +// RV670-DAG:   #define __rv670__ 1 +// RV710-DAG:   #define __rv710__ 1 +// RV730-DAG:   #define __rv730__ 1 +// RV770-DAG:   #define __rv770__ 1 +// CEDAR-DAG:   #define __cedar__ 1 +// CYPRESS-DAG: #define __cypress__ 1 +// JUNIPER-DAG: #define __juniper__ 1 +// REDWOOD-DAG: #define __redwood__ 1 +// SUMO-DAG:    #define __sumo__ 1 +// BARTS-DAG:   #define __barts__ 1 +// CAICOS-DAG:  #define __caicos__ 1 +// CAYMAN-DAG:  #define __cayman__ 1 +// TURKS-DAG:   #define __turks__ 1  //  // AMDGCN-based processors. @@ -88,20 +174,90 @@  // RUN: %clang -E -dM -target amdgcn -mcpu=gfx900 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX900 %s  // RUN: %clang -E -dM -target amdgcn -mcpu=gfx902 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX902 %s -// ARCH-GCN-DAG: #define __AMD__ 1 -// ARCH-GCN-DAG: #define __AMDGPU__ 1 +// GFX600-DAG: #define FP_FAST_FMA 1 +// GFX601-DAG: #define FP_FAST_FMA 1 +// GFX700-DAG: #define FP_FAST_FMA 1 +// GFX701-DAG: #define FP_FAST_FMA 1 +// GFX702-DAG: #define FP_FAST_FMA 1 +// GFX703-DAG: #define FP_FAST_FMA 1 +// GFX704-DAG: #define FP_FAST_FMA 1 +// GFX801-DAG: #define FP_FAST_FMA 1 +// GFX802-DAG: #define FP_FAST_FMA 1 +// GFX803-DAG: #define FP_FAST_FMA 1 +// GFX810-DAG: #define FP_FAST_FMA 1 +// GFX900-DAG: #define FP_FAST_FMA 1 +// GFX902-DAG: #define FP_FAST_FMA 1 + +// GFX600-DAG: #define FP_FAST_FMAF 1 +// GFX601-NOT: #define FP_FAST_FMAF 1 +// GFX700-NOT: #define FP_FAST_FMAF 1 +// GFX701-DAG: #define FP_FAST_FMAF 1 +// GFX702-DAG: #define FP_FAST_FMAF 1 +// GFX703-NOT: #define FP_FAST_FMAF 1 +// GFX704-NOT: #define FP_FAST_FMAF 1 +// GFX801-DAG: #define FP_FAST_FMAF 1 +// GFX802-NOT: #define FP_FAST_FMAF 1 +// GFX803-NOT: #define FP_FAST_FMAF 1 +// GFX810-NOT: #define FP_FAST_FMAF 1 +// GFX900-DAG: #define FP_FAST_FMAF 1 +// GFX902-DAG: #define FP_FAST_FMAF 1 +  // ARCH-GCN-DAG: #define __AMDGCN__ 1 +// ARCH-GCN-DAG: #define __AMDGPU__ 1 +// ARCH-GCN-DAG: #define __AMD__ 1 + +// GFX600-DAG: #define __HAS_FMAF__ 1 +// GFX601-DAG: #define __HAS_FMAF__ 1 +// GFX700-DAG: #define __HAS_FMAF__ 1 +// GFX701-DAG: #define __HAS_FMAF__ 1 +// GFX702-DAG: #define __HAS_FMAF__ 1 +// GFX703-DAG: #define __HAS_FMAF__ 1 +// GFX704-DAG: #define __HAS_FMAF__ 1 +// GFX801-DAG: #define __HAS_FMAF__ 1 +// GFX802-DAG: #define __HAS_FMAF__ 1 +// GFX803-DAG: #define __HAS_FMAF__ 1 +// GFX810-DAG: #define __HAS_FMAF__ 1 +// GFX900-DAG: #define __HAS_FMAF__ 1 +// GFX902-DAG: #define __HAS_FMAF__ 1 + +// GFX600-DAG: #define __HAS_FP64__ 1 +// GFX601-DAG: #define __HAS_FP64__ 1 +// GFX700-DAG: #define __HAS_FP64__ 1 +// GFX701-DAG: #define __HAS_FP64__ 1 +// GFX702-DAG: #define __HAS_FP64__ 1 +// GFX703-DAG: #define __HAS_FP64__ 1 +// GFX704-DAG: #define __HAS_FP64__ 1 +// GFX801-DAG: #define __HAS_FP64__ 1 +// GFX802-DAG: #define __HAS_FP64__ 1 +// GFX803-DAG: #define __HAS_FP64__ 1 +// GFX810-DAG: #define __HAS_FP64__ 1 +// GFX900-DAG: #define __HAS_FP64__ 1 +// GFX902-DAG: #define __HAS_FP64__ 1 + +// GFX600-DAG: #define __HAS_LDEXPF__ 1 +// GFX601-DAG: #define __HAS_LDEXPF__ 1 +// GFX700-DAG: #define __HAS_LDEXPF__ 1 +// GFX701-DAG: #define __HAS_LDEXPF__ 1 +// GFX702-DAG: #define __HAS_LDEXPF__ 1 +// GFX703-DAG: #define __HAS_LDEXPF__ 1 +// GFX704-DAG: #define __HAS_LDEXPF__ 1 +// GFX801-DAG: #define __HAS_LDEXPF__ 1 +// GFX802-DAG: #define __HAS_LDEXPF__ 1 +// GFX803-DAG: #define __HAS_LDEXPF__ 1 +// GFX810-DAG: #define __HAS_LDEXPF__ 1 +// GFX900-DAG: #define __HAS_LDEXPF__ 1 +// GFX902-DAG: #define __HAS_LDEXPF__ 1 -// GFX600: #define __gfx600__ 1 -// GFX601: #define __gfx601__ 1 -// GFX700: #define __gfx700__ 1 -// GFX701: #define __gfx701__ 1 -// GFX702: #define __gfx702__ 1 -// GFX703: #define __gfx703__ 1 -// GFX704: #define __gfx704__ 1 -// GFX801: #define __gfx801__ 1 -// GFX802: #define __gfx802__ 1 -// GFX803: #define __gfx803__ 1 -// GFX810: #define __gfx810__ 1 -// GFX900: #define __gfx900__ 1 -// GFX902: #define __gfx902__ 1 +// GFX600-DAG: #define __gfx600__ 1 +// GFX601-DAG: #define __gfx601__ 1 +// GFX700-DAG: #define __gfx700__ 1 +// GFX701-DAG: #define __gfx701__ 1 +// GFX702-DAG: #define __gfx702__ 1 +// GFX703-DAG: #define __gfx703__ 1 +// GFX704-DAG: #define __gfx704__ 1 +// GFX801-DAG: #define __gfx801__ 1 +// GFX802-DAG: #define __gfx802__ 1 +// GFX803-DAG: #define __gfx803__ 1 +// GFX810-DAG: #define __gfx810__ 1 +// GFX900-DAG: #define __gfx900__ 1 +// GFX902-DAG: #define __gfx902__ 1 diff --git a/clang/test/Misc/target-invalid-cpu-note.c b/clang/test/Misc/target-invalid-cpu-note.c index 2c4a6f4c8c6..6b98ac97af3 100644 --- a/clang/test/Misc/target-invalid-cpu-note.c +++ b/clang/test/Misc/target-invalid-cpu-note.c @@ -42,7 +42,7 @@  // R600: note: valid target CPU values are: r600, rv630, rv635, r630, rs780,   // R600-SAME: rs880, rv610, rv620, rv670, rv710, rv730, rv740, rv770, cedar,   // R600-SAME: palm, cypress, hemlock, juniper, redwood, sumo, sumo2, barts,  -// R600-SAME: caicos, turks, aruba, cayman +// R600-SAME: caicos, aruba, cayman, turks  // RUN: not %clang_cc1 -triple amdgcn--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix AMDGCN | 

