llvm-project
ba87a92e - [Clang][OpenMP] Parsing, serialisation and deserialisation for the 'saved' firstprivate modifier

Commit
63 days ago
[Clang][OpenMP] Parsing, serialisation and deserialisation for the 'saved' firstprivate modifier OpenMP 6.0 adds a 'saved' modifier to the data-environment attribute clauses. On a 'firstprivate' clause it specifies that the list item's value is captured when the surrounding construct is recorded into a taskgraph, and that captured value is reused (rather than re-evaluating the initialiser from the live original) on every replay. See OpenMP 6.0 [7.5.4], [6.4.7] and [14.3]. This patch implements the front-end plumbing for the modifier: parsing, AST representation and AST printing, profile, template instantiation and PCH serialisation, modelled directly on the existing 'lastprivate(conditional: ...)' machinery. No new semantic restriction is added here (e.g. requiring a taskgraph-nested or replayable task context), and codegen and the runtime continue to treat 'saved' as a no-op for now -- those are follow-up patches. Specifically: - OPENMP_FIRSTPRIVATE_KIND(saved) is added in OpenMPKinds.def, with a matching OpenMPFirstprivateModifier enum and the appropriate parse/print helpers in OpenMPKinds.cpp. - OMPFirstprivateClause gains FPKind / FPKindLoc / ColonLoc fields and an updated Create() signature; OMPClausePrinter emits 'firstprivate(saved: ...)' when the modifier is set. - ParseOpenMP recognises '[modifier:]' inside a firstprivate clause when OpenMP >= 6.0. - SemaOpenMP::ActOnOpenMPFirstprivateClause now takes the modifier triple and diagnoses an unrecognised modifier via the existing err_omp_unexpected_clause_value path; the dispatcher in ActOnOpenMPVarListClause and the implicit-firstprivate emitter in ActOnOpenMPRegionEnd are updated accordingly. - TreeTransform forwards the modifier through template instantiation; ASTReader / ASTWriter round-trip the new fields. A new lit test taskgraph_firstprivate_saved_ast_print.cpp covers ast-print and a PCH emit -> include -> ast-print round-trip on 'omp task' and 'omp taskloop' uses of firstprivate(saved: ...). Assisted-By: Claude Opus 4.7 Pull Request: https://github.com/llvm/llvm-project/pull/200406
Author
Committer
Parents
Loading