[PATCH] D72235: [clang-tidy] new altera unroll loops check

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 18 07:57:30 PDT 2021


aaron.ballman accepted this revision.
aaron.ballman added a comment.
This revision is now accepted and ready to land.

Mostly just nits for the check, otherwise this LGTM.



================
Comment at: clang-tools-extra/clang-tidy/altera/UnrollLoopsCheck.cpp:65
+    }
+    if (isa<WhileStmt>(Loop) || isa<DoStmt>(Loop)) {
+      diag(Loop->getBeginLoc(),
----------------



================
Comment at: clang-tools-extra/clang-tidy/altera/UnrollLoopsCheck.cpp:83-84
+UnrollLoopsCheck::unrollType(const Stmt *Statement, ASTContext *Context) {
+  const clang::DynTypedNodeList Parents = Context->getParents<Stmt>(*Statement);
+  for (const clang::DynTypedNode &Parent : Parents) {
+    const auto *ParentStmt = Parent.get<AttributedStmt>();
----------------
Pretty sure you don't need to use a qualified name here.


================
Comment at: clang-tools-extra/clang-tidy/altera/UnrollLoopsCheck.cpp:116-120
+  if (isa<CXXForRangeStmt>(Statement)) {
+    if (CXXLoopBound)
+      return true;
+    return false;
+  }
----------------



================
Comment at: clang-tools-extra/clang-tidy/altera/UnrollLoopsCheck.cpp:123
+  // unrolling for these.
+  if (isa<WhileStmt>(Statement) || isa<DoStmt>(Statement))
+    return false;
----------------



================
Comment at: clang-tools-extra/clang-tidy/altera/UnrollLoopsCheck.cpp:176-177
+  if (isa<CXXForRangeStmt>(Statement)) {
+    const auto *LoopBoundExpr = dyn_cast<Expr>(CXXLoopBound);
+    return exprHasLargeNumIterations(LoopBoundExpr, Context);
+  }
----------------
The cast isn't necessary (`IntergerLiteral` is already an `Expr`). You should probably assert that `CXXLoopBound` isn't null here though.


================
Comment at: clang-tools-extra/clang-tidy/altera/UnrollLoopsCheck.cpp:180-181
+  const auto *ForLoop = dyn_cast<ForStmt>(Statement);
+  if (!ForLoop)
+    llvm_unreachable("Unknown loop");
+  const Stmt *Initializer = ForLoop->getInit();
----------------



================
Comment at: clang-tools-extra/clang-tidy/altera/UnrollLoopsCheck.cpp:196-197
+  }
+  if (!isa<BinaryOperator>(Conditional))
+    llvm_unreachable("Conditional is not a binary operator");
+  int EndValue;
----------------



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

https://reviews.llvm.org/D72235



More information about the cfe-commits mailing list