-
Notifications
You must be signed in to change notification settings - Fork 13.6k
[clang] Factor out OpenACC part of Sema
#84184
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
23f4208
e5bdaf1
eab3895
aad4515
4910ff2
b239e9e
7ac2230
b3e2cc2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
//===----- SemaOpenACC.h - Semantic Analysis for OpenACC constructs -------===// | ||
// | ||
// 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 | ||
// | ||
//===----------------------------------------------------------------------===// | ||
/// \file | ||
/// This file declares semantic analysis for OpenACC constructs and | ||
/// clauses. | ||
/// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef LLVM_CLANG_SEMA_SEMAOPENACC_H | ||
#define LLVM_CLANG_SEMA_SEMAOPENACC_H | ||
|
||
#include "clang/Basic/OpenACCKinds.h" | ||
Endilll marked this conversation as resolved.
Show resolved
Hide resolved
|
||
#include "clang/Sema/Ownership.h" | ||
|
||
namespace clang { | ||
|
||
class Sema; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we expect that clients realistically use SemaOpenACC but not Sema::OpenACC()? Do we want to encourage clients to accept/store I think we should accept that at least for now, clients will and should still use In which case, I think we should Also, (Again, nitpicking because this is a precedent) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Your feedback is much appreciated! No worries about nitpicking, as we indeed establish a precedent here.
While it would be nice to have layering in Sema, and inline functions in
I wonder if @erichkeane can give us his insight here, as he has more code dealing with OpenACC down the line. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it is less of an OpenACC discussion and more of a general use case discussion FWIW. BUT I think we DO expect a lot of the 'child' Very much of the OpenMP implementation (and soon to be OpenACC implementation) calls into Constant evaluation functions, etc. BUT I think the hope here is that the calls will be '1 way', in that Sema won't call into the OpenACC implementation ever, but the OpenACC will call into Sema reasonably often (as it does for OMP). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, I envision the eventual goal of layering to be similar to that of layering elsewhere in the compiler, where it's fine for things at a higher level (SemaOpenACC, SemaOpenMP, etc) to call into things in a lower level (Sema) but not vice versa. |
||
|
||
class SemaOpenACC { | ||
public: | ||
SemaOpenACC(Sema &S); | ||
|
||
Sema &Sema; | ||
|
||
/// Called after parsing an OpenACC Clause so that it can be checked. | ||
bool ActOnClause(OpenACCClauseKind ClauseKind, SourceLocation StartLoc); | ||
|
||
/// Called after the construct has been parsed, but clauses haven't been | ||
/// parsed. This allows us to diagnose not-implemented, as well as set up any | ||
/// state required for parsing the clauses. | ||
void ActOnConstruct(OpenACCDirectiveKind K, SourceLocation StartLoc); | ||
|
||
/// Called after the directive, including its clauses, have been parsed and | ||
/// parsing has consumed the 'annot_pragma_openacc_end' token. This DOES | ||
/// happen before any associated declarations or statements have been parsed. | ||
/// This function is only called when we are parsing a 'statement' context. | ||
bool ActOnStartStmtDirective(OpenACCDirectiveKind K, SourceLocation StartLoc); | ||
|
||
/// Called after the directive, including its clauses, have been parsed and | ||
/// parsing has consumed the 'annot_pragma_openacc_end' token. This DOES | ||
/// happen before any associated declarations or statements have been parsed. | ||
/// This function is only called when we are parsing a 'Decl' context. | ||
bool ActOnStartDeclDirective(OpenACCDirectiveKind K, SourceLocation StartLoc); | ||
/// Called when we encounter an associated statement for our construct, this | ||
/// should check legality of the statement as it appertains to this Construct. | ||
StmtResult ActOnAssociatedStmt(OpenACCDirectiveKind K, StmtResult AssocStmt); | ||
|
||
/// Called after the directive has been completely parsed, including the | ||
/// declaration group or associated statement. | ||
StmtResult ActOnEndStmtDirective(OpenACCDirectiveKind K, | ||
SourceLocation StartLoc, | ||
SourceLocation EndLoc, StmtResult AssocStmt); | ||
/// Called after the directive has been completely parsed, including the | ||
/// declaration group or associated statement. | ||
DeclGroupRef ActOnEndDeclDirective(); | ||
}; | ||
|
||
} // namespace clang | ||
|
||
#endif // LLVM_CLANG_SEMA_SEMAOPENACC_H |
Uh oh!
There was an error while loading. Please reload this page.