================
@@ -6,10 +6,34 @@
//
//===----------------------------------------------------------------------===//
-#include "CIRTransformUtils.h"
+#include "clang/CIR/Dialect/Transforms/CIRTransformUtils.h"
#include "clang/CIR/Dialect/IR/CIRTypes.h"
+#include "llvm/ADT/DepthFirstIterator.h"
+
+void cir::collectUnreachable(mlir::Operation *parent,
+ llvm::SmallVectorImpl<mlir::Operation *> &ops) {
+ // For every region under `parent`, find the blocks unreachable from the
+ // entry via a forward CFG traversal and collect their ops.
+ llvm::df_iterator_default_set<mlir::Block *, 16> reachable;
+ parent->walk([&](mlir::Region *region) {
+ // Empty regions have no blocks; single-block regions have only the
+ // entry, which is trivially reachable. Either way, nothing to collect.
+ if (region->empty() || region->hasOneBlock())
+ return;
+ reachable.clear();
+ for (mlir::Block *blk : llvm::depth_first_ext(®ion->front(), reachable))
+ (void)blk;
----------------
erichkeane wrote:
Actually... what is gong on here? Why are we looping through something just to
do nothing with it? Is this whole loop dead?
If so, who is adding to 'reachable'?
https://github.com/llvm/llvm-project/pull/197334
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits