Revision tags: llvmorg-21-init, llvmorg-19.1.7 |
|
#
553fa204 |
| 09-Jan-2025 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Implement 'at least one of' restriction for 'update'
This completes the implementation of 'update' by implementing its last restriction. This restriction requires at least 1 of the 'self',
[OpenACC] Implement 'at least one of' restriction for 'update'
This completes the implementation of 'update' by implementing its last restriction. This restriction requires at least 1 of the 'self', 'host', or 'device' clauses.
show more ...
|
#
db81e8c4 |
| 06-Jan-2025 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Initial sema implementation of 'update' construct
This executable construct has a larger list of clauses than some of the others, plus has some additional restrictions. This patch impleme
[OpenACC] Initial sema implementation of 'update' construct
This executable construct has a larger list of clauses than some of the others, plus has some additional restrictions. This patch implements the AST node, plus the 'cannot be the body of a if, while, do, switch, or label' statement restriction. Future patches will handle the rest of the restrictions, which are based on clauses.
show more ...
|
#
21c785d7 |
| 03-Jan-2025 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Implement 'set' construct sema
The 'set' construct is another fairly simple one, it doesn't have an associated statement and only a handful of allowed clauses. This patch implements it and
[OpenACC] Implement 'set' construct sema
The 'set' construct is another fairly simple one, it doesn't have an associated statement and only a handful of allowed clauses. This patch implements it and all the rules for it, allowing 3 of its for clauses. The only exception is default_async, which will be implemented in a future patch, because it isn't just being enabled, it needs a complete new implementation.
show more ...
|
#
4bbdb018 |
| 19-Dec-2024 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Implement 'init' and 'shutdown' constructs
These two constructs are very simple and similar, and only support 3 different clauses, two of which are already implemented. This patch adds AS
[OpenACC] Implement 'init' and 'shutdown' constructs
These two constructs are very simple and similar, and only support 3 different clauses, two of which are already implemented. This patch adds AST nodes for both constructs, and leaves the device_num clause unimplemented, but enables the other two.
show more ...
|
Revision tags: llvmorg-19.1.6 |
|
#
bfc2dbe0 |
| 16-Dec-2024 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Implement data construct 'at least 1 of ... clauses' rule
All 4 of the 'data' constructs have a requirement that at least 1 of a small list of clauses must appear on the construct. This p
[OpenACC] Implement data construct 'at least 1 of ... clauses' rule
All 4 of the 'data' constructs have a requirement that at least 1 of a small list of clauses must appear on the construct. This patch implements that restriction, and updates all of the tests it takes to do so.
show more ...
|
#
010d0115 |
| 10-Dec-2024 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Create AST nodes for 'data' constructs
These constructs are all very similar and closely related, so this patch creates the AST nodes for them, serialization, printing/etc. Additionally th
[OpenACC] Create AST nodes for 'data' constructs
These constructs are all very similar and closely related, so this patch creates the AST nodes for them, serialization, printing/etc. Additionally the restrictions are all added as tests/todos in the tests, as those will have to be implemented once we get those clauses implemented.
show more ...
|
Revision tags: llvmorg-19.1.5, llvmorg-19.1.4 |
|
#
39351f8e |
| 07-Nov-2024 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Implement AST/Sema for combined constructs
Combined constructs (OpenACC 3.3 section 2.11) are a short-cut for writing a `loop` construct immediately inside of a `compute` construct. Howeve
[OpenACC] Implement AST/Sema for combined constructs
Combined constructs (OpenACC 3.3 section 2.11) are a short-cut for writing a `loop` construct immediately inside of a `compute` construct. However, this interaction requires we do additional work to ensure that we get the semantics between the two correct, as well as diagnostics.
This patch adds the semantic analysis for the constructs (but no clauses), as well as the AST nodes.
show more ...
|
#
b0cfbfd7 |
| 08-Nov-2024 |
Erich Keane <ekeane@nvidia.com> |
[OpenACC] Implement `loop` restrictions on `for` loops. (#115370)
OpenACC restricts the contents of a 'for' loop affected by a 'loop'
construct without a 'seq'. The loop variable must be integer, p
[OpenACC] Implement `loop` restrictions on `for` loops. (#115370)
OpenACC restricts the contents of a 'for' loop affected by a 'loop'
construct without a 'seq'. The loop variable must be integer, pointer,
or random-access-iterator, it must monotonically increase/decrease, and
the trip count must be computable at runtime before the function.
This patch tries to implement some of these limitations to the best of
our ability, though it causes us to be perhaps overly restrictive at the
moment. I expect we'll revisit some of these rules/add additional
supported forms of loop-variable and 'monotonically increasing' here,
but the currently enforced rules are heavily inspired by the OMP
implementation here.
show more ...
|
Revision tags: llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7 |
|
#
42f4e505 |
| 05-Jun-2024 |
Erich Keane <ekeane@nvidia.com> |
[OpenACC] Loop construct basic Sema and AST work (#93742)
This patch implements the 'loop' construct AST, as well as the basic
appertainment rule. Additionally, it sets up the 'parent' compute
con
[OpenACC] Loop construct basic Sema and AST work (#93742)
This patch implements the 'loop' construct AST, as well as the basic
appertainment rule. Additionally, it sets up the 'parent' compute
construct, which is necessary for codegen/other diagnostics.
A 'loop' can apply to a for or range-for loop, otherwise it has no other
restrictions (though some of its clauses do).
show more ...
|
Revision tags: llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1 |
|
#
bb97c992 |
| 04-Mar-2024 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Enable serial/kernels Compute Constructs
So far, all the work we've done for compute constructs has only used 'parallel'. This patch does the work to enable the same logic for 'serial' an
[OpenACC] Enable serial/kernels Compute Constructs
So far, all the work we've done for compute constructs has only used 'parallel'. This patch does the work to enable the same logic for 'serial' and 'kernels' constructs as well, since they are the same semantic behavior.
show more ...
|
Revision tags: llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3 |
|
#
cb891127 |
| 16-Feb-2024 |
Erich Keane <ekeane@nvidia.com> |
[OpenACC] Implement beginning parts of the 'parallel' Sema impl (#81659)
This patch Implements AST node creation and appertainment enforcement
for 'parallel', as well as changes the 'not implemente
[OpenACC] Implement beginning parts of the 'parallel' Sema impl (#81659)
This patch Implements AST node creation and appertainment enforcement
for 'parallel', as well as changes the 'not implemented' messages to be
more specific. It does not deal with clauses/clause legality, nor a few
of the other rules from the standard, but this gets us most of the way
for a framework for future construct implementation.
show more ...
|
#
db4ea21d |
| 15-Feb-2024 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Change 'not implemented' diagnostic to be more specific
Currently we just emit a generic 'not implemented' diagnostic for all OpenACC pragmas. This patch moves the diagnostic to 'Sema' and
[OpenACC] Change 'not implemented' diagnostic to be more specific
Currently we just emit a generic 'not implemented' diagnostic for all OpenACC pragmas. This patch moves the diagnostic to 'Sema' and diagnoses for a specific clause or construct, in preperation of implementing Sema for constructs.
show more ...
|
Revision tags: llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init |
|
#
fdee0a35 |
| 19-Dec-2023 |
Erich Keane <ekeane@nvidia.com> |
[OpenACC] Add 'clause' parsing infrastructure plus a few clauses (#75052)
As we've now finished parsing the constructs, we're moving onto
implementing 'clause' parsing. While some are complicated a
[OpenACC] Add 'clause' parsing infrastructure plus a few clauses (#75052)
As we've now finished parsing the constructs, we're moving onto
implementing 'clause' parsing. While some are complicated and require
their own patch, the handful added here are simple to parse (that is,
they are a single identifier).
This patch adds the infrastructure to parse these and a clause-list in
its entirety. This adds some complication to how we are diagnosing
parsing errors elsewhere, so a few changes were made to better recover
from errors.
show more ...
|
#
731361cd |
| 08-Dec-2023 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Fix bug with directive name being a 'special token'
If the 'directive name' is a special token instead of an identifier, we end up asserting. This fixes that.
|
#
26f8e146 |
| 05-Dec-2023 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] NFC: Stop using 'getSpelling' while parsing OpenACC
It was brought up during the cache review that we shouldn't be using 'getSpelling', and instead should use the IdentifierInfo itself. T
[OpenACC] NFC: Stop using 'getSpelling' while parsing OpenACC
It was brought up during the cache review that we shouldn't be using 'getSpelling', and instead should use the IdentifierInfo itself. This patch replaces all uses of it.
show more ...
|
Revision tags: llvmorg-17.0.6 |
|
#
ba1c869f |
| 27-Nov-2023 |
Erich Keane <ekeane@nvidia.com> |
[OpenACC] Implement 'routine' construct parsing (#73143)
The 'routine' construct applies either to a function directly, or, when
provided a name, applies to the function named (and is visible in th
[OpenACC] Implement 'routine' construct parsing (#73143)
The 'routine' construct applies either to a function directly, or, when
provided a name, applies to the function named (and is visible in the
current scope). This patch implements the parsing for this. The
identifier provided (or Id Expression) is required to be a valid,
declared identifier, though the semantic analysis portion of the Routine
directive will need to enforce it being a function/overload set.
show more ...
|
#
04e9b61c |
| 21-Nov-2023 |
Erich Keane <ekeane@nvidia.com> |
[OpenACC] Implement Atomic construct variants (#73015)
`atomic` is required to be followed by a special `atomic clause`, so
this patch manages the parsing of that. We are representing each of the
[OpenACC] Implement Atomic construct variants (#73015)
`atomic` is required to be followed by a special `atomic clause`, so
this patch manages the parsing of that. We are representing each of the
variants of the atomic construct as separate kinds, because they have
distinct rules/application/etc, and this should make it easier to check
rules in the future.
show more ...
|
#
147b38b1 |
| 21-Nov-2023 |
Erich Keane <ekeane@nvidia.com> |
[OpenACC] Implement enter data/exit data construct parsing (#72916)
These two constructs, 'enter data' and 'exit data', are novel compared
to what is currently in the parser, as this is the first s
[OpenACC] Implement enter data/exit data construct parsing (#72916)
These two constructs, 'enter data' and 'exit data', are novel compared
to what is currently in the parser, as this is the first set implemented
where the first token is itself not a valid construct. Because of this,
it requires some additional work to do the first keyword parsing.
show more ...
|
#
70f41022 |
| 20-Nov-2023 |
Erich Keane <ekeane@nvidia.com> |
[OpenACC] Implement compound construct parsing (#72692)
This patch implements the compound construct parsing, which allows
'parallel loop', 'serial loop', and 'kernel loop' to act as their own
con
[OpenACC] Implement compound construct parsing (#72692)
This patch implements the compound construct parsing, which allows
'parallel loop', 'serial loop', and 'kernel loop' to act as their own
constructs.
show more ...
|
#
61683376 |
| 17-Nov-2023 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Handle lack of construct/directive
Discovered while working on another patch, this patch fixes the case where are construct/directive name isn't provided.
|
#
9bd5f808 |
| 17-Nov-2023 |
erichkeane <ekeane@nvidia.com> |
[OpenACC] Implement 'trivial' construct/directive parsing.
Now that the `parallel` support has landed, add the other 'trivial' to implement ones that don't require any additional work other than add
[OpenACC] Implement 'trivial' construct/directive parsing.
Now that the `parallel` support has landed, add the other 'trivial' to implement ones that don't require any additional work other than adding them to the StringSwitch.
show more ...
|
#
64b6ef02 |
| 17-Nov-2023 |
Erich Keane <ekeane@nvidia.com> |
[OpenACC] Implement initial parsing for `parallel` construct (#72661)
As the first real parsing effort for the OpenACC implementation effort,
this implements the parsing for first construct/directi
[OpenACC] Implement initial parsing for `parallel` construct (#72661)
As the first real parsing effort for the OpenACC implementation effort,
this implements the parsing for first construct/directive name. This
does not do any semantic analysis, nor any of the clauses. Those will
come in a future patch.
For the time being, we warn when we hit a point that we don't implement
the parsing for either of these situations.
show more ...
|