jdoerfert created this revision. jdoerfert added reviewers: tianshilei1992, jhuber6, JonChesterfield. Herald added subscribers: pengfei, guansong, bollu, hiraditya, yaxunl. jdoerfert requested review of this revision. Herald added subscribers: llvm-commits, cfe-commits, sstefan1. Herald added projects: clang, LLVM.
The triple uses a bar "x86-64" instead of an underscore. Since we have troubles accepting x86-64 as an identifier, we stick with x86_64 in the frontend and translate it explicitly. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D93786 Files: clang/test/OpenMP/declare_variant_ast_x86_64.c llvm/lib/Frontend/OpenMP/OMPContext.cpp Index: llvm/lib/Frontend/OpenMP/OMPContext.cpp =================================================================== --- llvm/lib/Frontend/OpenMP/OMPContext.cpp +++ llvm/lib/Frontend/OpenMP/OMPContext.cpp @@ -14,7 +14,9 @@ #include "llvm/Frontend/OpenMP/OMPContext.h" #include "llvm/ADT/SetOperations.h" +#include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" +#include "llvm/ADT/Triple.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" @@ -57,9 +59,12 @@ // Add the appropriate device architecture trait based on the triple. #define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str) \ - if (TraitSelector::TraitSelectorEnum == TraitSelector::device_arch) \ + if (TraitSelector::TraitSelectorEnum == TraitSelector::device_arch) { \ if (TargetTriple.getArch() == TargetTriple.getArchTypeForLLVMName(Str)) \ - ActiveTraits.set(unsigned(TraitProperty::Enum)); + ActiveTraits.set(unsigned(TraitProperty::Enum)); \ + if (Str == "x86_64" && TargetTriple.getArch() == Triple::x86_64) \ + ActiveTraits.set(unsigned(TraitProperty::Enum)); \ + } #include "llvm/Frontend/OpenMP/OMPKinds.def" // TODO: What exactly do we want to see as device ISA trait? Index: clang/test/OpenMP/declare_variant_ast_x86_64.c =================================================================== --- /dev/null +++ clang/test/OpenMP/declare_variant_ast_x86_64.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -verify -fopenmp -triple x86_64-unknown-unknown %s -ast-dump | FileCheck %s +// expected-no-diagnostics + +#pragma omp begin declare variant match(device={arch(x86_64)}) + +void bar() {} + +// CHECK: FunctionDecl {{.*}} bar[device={arch(x86_64)}] 'void ()' + +#pragma omp end declare variant
Index: llvm/lib/Frontend/OpenMP/OMPContext.cpp =================================================================== --- llvm/lib/Frontend/OpenMP/OMPContext.cpp +++ llvm/lib/Frontend/OpenMP/OMPContext.cpp @@ -14,7 +14,9 @@ #include "llvm/Frontend/OpenMP/OMPContext.h" #include "llvm/ADT/SetOperations.h" +#include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" +#include "llvm/ADT/Triple.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" @@ -57,9 +59,12 @@ // Add the appropriate device architecture trait based on the triple. #define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str) \ - if (TraitSelector::TraitSelectorEnum == TraitSelector::device_arch) \ + if (TraitSelector::TraitSelectorEnum == TraitSelector::device_arch) { \ if (TargetTriple.getArch() == TargetTriple.getArchTypeForLLVMName(Str)) \ - ActiveTraits.set(unsigned(TraitProperty::Enum)); + ActiveTraits.set(unsigned(TraitProperty::Enum)); \ + if (Str == "x86_64" && TargetTriple.getArch() == Triple::x86_64) \ + ActiveTraits.set(unsigned(TraitProperty::Enum)); \ + } #include "llvm/Frontend/OpenMP/OMPKinds.def" // TODO: What exactly do we want to see as device ISA trait? Index: clang/test/OpenMP/declare_variant_ast_x86_64.c =================================================================== --- /dev/null +++ clang/test/OpenMP/declare_variant_ast_x86_64.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -verify -fopenmp -triple x86_64-unknown-unknown %s -ast-dump | FileCheck %s +// expected-no-diagnostics + +#pragma omp begin declare variant match(device={arch(x86_64)}) + +void bar() {} + +// CHECK: FunctionDecl {{.*}} bar[device={arch(x86_64)}] 'void ()' + +#pragma omp end declare variant
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits