llvm-project/clang/lib/AST
Johannes Doerfert befb4be3a8 [OpenMP] `omp begin/end declare variant` - part 2, sema ("+CG")
This is the second part loosely extracted from D71179 and cleaned up.

This patch provides semantic analysis support for `omp begin/end declare
variant`, mostly as defined in OpenMP technical report 8 (TR8) [0].
The sema handling makes code generation obsolete as we generate "the
right" calls that can just be handled as usual. This handling also
applies to the existing, albeit problematic, `omp declare variant
support`. As a consequence a lot of unneeded code generation and
complexity is removed.

A major purpose of this patch is to provide proper `math.h`/`cmath`
support for OpenMP target offloading. See PR42061, PR42798, PR42799. The
current code was developed with this feature in mind, see [1].

The logic is as follows:

If we have seen a `#pragma omp begin declare variant match(<SELECTOR>)`
but not the corresponding `end declare variant`, and we find a function
definition we will:
  1) Create a function declaration for the definition we were about to generate.
  2) Create a function definition but with a mangled name (according to
     `<SELECTOR>`).
  3) Annotate the declaration with the `OMPDeclareVariantAttr`, the same
     one used already for `omp declare variant`, using and the mangled
     function definition as specialization for the context defined by
     `<SELECTOR>`.

When a call is created we inspect it. If the target has an
`OMPDeclareVariantAttr` attribute we try to specialize the call. To this
end, all variants are checked, the best applicable one is picked and a
new call to the specialization is created. The new call is used instead
of the original one to the base function. To keep the AST printing and
tooling possible we utilize the PseudoObjectExpr. The original call is
the syntactic expression, the specialized call is the semantic
expression.

[0] https://www.openmp.org/wp-content/uploads/openmp-TR8.pdf
[1] https://reviews.llvm.org/D61399#change-496lQkg0mhRN

Reviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim, aaron.ballman

Subscribers: bollu, guansong, openmp-commits, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D75779
2020-03-27 02:30:58 -05:00
..
Interp Avoid ASTContext.h -> TargetInfo.h dep 2020-02-27 14:35:00 -08:00
APValue.cpp Silence static analyzer getAs<RecordType> null dereference warnings. NFCI. 2019-10-03 11:22:48 +00:00
ASTConcept.cpp [Concepts] Transform constraints of non-template functions to ConstantEvaluated 2020-01-25 23:00:24 +02:00
ASTConsumer.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ASTContext.cpp [Hexagon] Add support for Linux/Musl ABI (part 2) 2020-03-26 17:19:46 -05:00
ASTDiagnostic.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
ASTDumper.cpp When dumping the AST to JSON, dump the type information from a typeid expression with a type operand. 2019-05-27 14:34:31 +00:00
ASTImporter.cpp [AST] Move dependence computations into a separate file 2020-03-17 09:22:31 +01:00
ASTImporterLookupTable.cpp [ASTImporter] Fix unhandled cases in ASTImporterLookupTable 2019-06-11 13:35:25 +00:00
ASTStructuralEquivalence.cpp [AST][NFC] Update outdated comments in ASTStructuralEquivalence.cpp 2020-02-21 15:54:58 +01:00
ASTTypeTraits.cpp Remove clang::ast_type_traits namespace in favor of clang 2020-02-13 10:46:47 -08:00
AttrImpl.cpp [OpenMP][NFC] Minimize memory usage and copying of `OMPTraitInfo`s 2020-03-23 14:23:46 -05:00
CMakeLists.txt [AST] Move dependence computations into a separate file 2020-03-17 09:22:31 +01:00
CXXABI.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CXXInheritance.cpp Remove unused parameter from CXXRecordDecl::forallBases [NFC] 2020-02-29 14:23:44 +01:00
Comment.cpp Fix "pointer is null" static analyzer warning. NFCI. 2020-01-07 13:41:52 +00:00
CommentBriefParser.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CommentCommandTraits.cpp Explicitly include <cassert> when using assert 2020-03-02 22:45:28 +01:00
CommentLexer.cpp [AST] CommentLexer - Remove (optional) Invalid parameter from getSpelling. 2019-09-18 12:11:16 +00:00
CommentParser.cpp Adds a warning when an inline Doxygen comment has no argument 2019-08-05 08:05:16 +00:00
CommentSema.cpp [clang][doxygen] Fix false -Wdocumentation warning for tag typedefs 2020-02-20 11:32:30 -08:00
ComparisonCategories.cpp [c++20] P1959R0: Remove support for std::*_equality. 2019-12-16 17:49:45 -08:00
ComputeDependence.cpp [AST] Add RecoveryExpr to retain expressions on semantic errors 2020-03-24 09:20:37 +01:00
DataCollection.cpp Avoid SourceManager.h include in RawCommentList.h, add missing incs 2020-02-27 13:49:40 -08:00
Decl.cpp Avoid including Module.h from ExternalASTSource.h 2020-03-11 13:37:41 -07:00
DeclBase.cpp [Clang] Undef attribute for global variables 2020-03-17 21:22:23 +00:00
DeclCXX.cpp Replace getAs with castAs to fix null dereference static analyzer warnings. 2020-03-12 14:56:51 +00:00
DeclFriend.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
DeclGroup.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
DeclObjC.cpp ObjCMethodDecl::findPropertyDecl - fix static analyzer null dereference warnings. NFCI. 2020-03-12 15:36:49 +00:00
DeclOpenMP.cpp [OPENMP 5.0]Initial support for 'allocator' clause. 2019-03-12 18:52:33 +00:00
DeclPrinter.cpp [clang][DeclPrinter] Implement visitors for {TemplateType,NonTypeTemplate}Parms 2020-02-14 13:20:34 +01:00
DeclTemplate.cpp Add missing newlines at EOF; NFC 2020-02-12 15:57:25 +00:00
DeclarationName.cpp [OpenMP] `omp begin/end declare variant` - part 2, sema ("+CG") 2020-03-27 02:30:58 -05:00
Expr.cpp [Clang] Fix clang-tidy errors. 2020-03-25 20:13:43 +01:00
ExprCXX.cpp [AST] Move dependence computations into a separate file 2020-03-17 09:22:31 +01:00
ExprClassification.cpp [AST] Add RecoveryExpr to retain expressions on semantic errors 2020-03-24 09:20:37 +01:00
ExprConcepts.cpp [AST] Make Expr::setDependence protected and remove add/removeDependence. NFC 2020-03-19 21:54:40 +01:00
ExprConstant.cpp [AST] Add RecoveryExpr to retain expressions on semantic errors 2020-03-24 09:20:37 +01:00
ExprObjC.cpp [AST] Move dependence computations into a separate file 2020-03-17 09:22:31 +01:00
ExternalASTMerger.cpp Modernize llvm::Error handling in ExternalASTMerger 2019-11-14 13:58:32 +01:00
ExternalASTSource.cpp Avoid including FileManager.h from SourceManager.h 2020-03-11 13:53:12 -07:00
FormatString.cpp Revert "[Clang] Warn about 'z' printf modifier in old MSVC." 2020-01-28 09:27:54 -05:00
FormatStringParsing.h Add a missing header comment, NFC 2019-08-13 22:01:39 +00:00
InheritViz.cpp Silence static analyzer getAs<RecordType> null dereference warnings. NFCI. 2019-10-03 11:22:48 +00:00
ItaniumCXXABI.cpp [c++20] Fix some ambiguities in our mangling of lambdas with explicit 2019-09-05 01:23:47 +00:00
ItaniumMangle.cpp [SYCL] Implement __builtin_unique_stable_name. 2020-03-25 07:01:50 -07:00
JSONNodeDumper.cpp [CodeGen] Emit destructor calls to destruct compound literals 2020-03-10 14:08:28 -07:00
Linkage.h [AST] Split parent map traversal logic into ParentMapContext.h 2020-01-24 13:42:28 -08:00
Mangle.cpp [hip] Revise `GlobalDecl` constructors. NFC. 2020-03-18 09:33:39 -04:00
MicrosoftCXXABI.cpp Separate the MS inheritance model enum from the attribute, NFC 2019-11-22 16:06:30 -08:00
MicrosoftMangle.cpp Add MS Mangling for OpenCL Pipe types, add mangling test. 2020-03-25 07:59:22 -07:00
NSAPI.cpp Removed dead code from clang/AST/NSAPI.h 2019-08-29 06:30:12 +00:00
NestedNameSpecifier.cpp [AST] rename DependencyFlags.h => DependenceFlags.h, NFC 2020-03-16 13:54:21 +01:00
ODRHash.cpp [Concepts] Placeholder constraints and abbreviated templates 2020-01-23 19:39:43 +02:00
OSLog.cpp os_log: Allow specifying mask type in format string. 2018-11-06 07:05:14 +00:00
OpenMPClause.cpp [OpenMP] `omp begin/end declare variant` - part 2, sema ("+CG") 2020-03-27 02:30:58 -05:00
ParentMap.cpp [OPENMP]Fix PR42632: crash on the analysis of the OpenMP constructs. 2019-07-17 18:03:39 +00:00
ParentMapContext.cpp Remove clang::ast_type_traits namespace in favor of clang 2020-02-13 10:46:47 -08:00
PrintfFormatString.cpp [Sema][ObjC] Fix a -Wformat false positive with localizedStringForKey 2019-08-14 16:57:11 +00:00
QualTypeNames.cpp Fix crash in getFullyQualifiedName for inline namespace 2019-12-28 16:35:51 +03:00
RawCommentList.cpp Avoid SourceManager.h include in RawCommentList.h, add missing incs 2020-02-27 13:49:40 -08:00
RecordLayout.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
RecordLayoutBuilder.cpp Move vtordisp mode from Attr class to LangOptions.h, NFC 2019-11-22 15:47:46 -08:00
ScanfFormatString.cpp Fix parameter name comments using clang-tidy. NFC. 2019-07-16 04:46:31 +00:00
SelectorLocationsKind.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Stmt.cpp Support output constraints on "asm goto" 2020-02-24 18:51:29 -08:00
StmtCXX.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
StmtIterator.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
StmtObjC.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
StmtOpenMP.cpp [OPENMP50]Initial support for scan directive. 2020-03-20 07:58:15 -04:00
StmtPrinter.cpp [AST] Add RecoveryExpr to retain expressions on semantic errors 2020-03-24 09:20:37 +01:00
StmtProfile.cpp [AST] Add RecoveryExpr to retain expressions on semantic errors 2020-03-24 09:20:37 +01:00
StmtViz.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
TemplateBase.cpp [AST] rename DependencyFlags.h => DependenceFlags.h, NFC 2020-03-16 13:54:21 +01:00
TemplateName.cpp [AST] rename DependencyFlags.h => DependenceFlags.h, NFC 2020-03-16 13:54:21 +01:00
TextNodeDumper.cpp [AST] Add a flag indicating if any subexpression had errors 2020-03-19 08:56:10 +01:00
Type.cpp [cuda][hip] Add CUDA builtin surface/texture reference support. 2020-03-26 14:44:52 -04:00
TypeLoc.cpp [Concepts] Placeholder constraints and abbreviated templates 2020-01-23 19:39:43 +02:00
TypePrinter.cpp [AST] Print a<b<c>> without extra spaces in C++11 or later. 2020-03-26 09:53:54 +01:00
VTTBuilder.cpp Silence static analyzer getAs<RecordType> null dereference warnings. NFCI. 2019-10-03 11:22:48 +00:00
VTableBuilder.cpp List implicit operator== after implicit destructors in a vtable. 2020-01-21 15:54:40 -08:00