[PATCH] D99459: [OpenMP] Implement '#pragma omp unroll'.

Michael Kruse via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 3 21:35:57 PDT 2021


Meinersbur marked 8 inline comments as done.
Meinersbur added inline comments.


================
Comment at: clang/include/clang/AST/StmtOpenMP.h:463-478
+  static const SpecificClause *getSingleClause(ArrayRef<OMPClause *> Clauses) {
+    auto ClausesOfKind = getClausesOfKind<SpecificClause>(Clauses);
 
-    if (Clauses.begin() != Clauses.end()) {
-      assert(std::next(Clauses.begin()) == Clauses.end() &&
+    if (ClausesOfKind.begin() != ClausesOfKind.end()) {
+      assert(std::next(ClausesOfKind.begin()) == ClausesOfKind.end() &&
              "There are at least 2 clauses of the specified kind");
+      return *ClausesOfKind.begin();
----------------
ABataev wrote:
> Better to commit it it separately as NFC.
D103665


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:10139-10142
+/// Find and diagnose mutually exclusive clause kinds.
+static bool checkMutuallyExclusiveClauses(
+    Sema &S, ArrayRef<OMPClause *> Clauses,
+    ArrayRef<OpenMPClauseKind> MutuallyExclusiveClauses) {
----------------
ABataev wrote:
> Would be good if this change is committed separately as NFC.
D103666


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:12821
+/// Determine whether an expression is constant without emitting diagnostic.
+static bool isConstantExpression(Sema &SemaRef, Expr *E) {
+  struct ConstTripcountDiagnoser : public Sema::VerifyICEDiagnoser {
----------------
ABataev wrote:
> Can you use `VerifyPositiveIntegerConstantInClause` function instead?
The reason for this new function is that `VerifyPositiveIntegerConstantInClause` also emits a note on why it is not a constant expression:
```
note: read of non-const variable '.capture_expr.' is not allowed in a constant expression
```
Printing internal variable names is more confusing than helpful to the user.


================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:12964
+  assert(Factor > 0 && "Expected positive unroll factor");
+  auto makeFactorExpr = [this, Factor, IVTy, FactorLoc]() {
+    return IntegerLiteral::Create(
----------------
ABataev wrote:
> Why do you need it? Just use original `PartialClause->getFactor()`
The AST invariant that no ASTNode can be used multiple times (within the same DeclContext) must be preserved. This is a utility lambda (like the other `MakeXyz`) that create a new IntegerLiteral node for ever use.

See discussion here: https://reviews.llvm.org/D94973?id=322600#inline-905341


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99459/new/

https://reviews.llvm.org/D99459



More information about the cfe-commits mailing list