[llvm-dev] LLVM Pass to count reachable BB (original) (raw)

Brian M. Rzycki via llvm-dev llvm-dev at lists.llvm.org
Fri Jan 11 08:11:58 PST 2019


Hello Hameeza,

If you have access to the dominator analysis (and the data is up-to-date) you can query if each block is dominated by the entry block of a function. I used this method to locate (and avoid) unreachable blocks at the beginning of the JumpThreading pass:

https://github.com/llvm-mirror/llvm/blob/master/lib/Transforms/Scalar/JumpThreading.cpp#L362

// JumpThreading must not processes blocks unreachable from entry. It's a // waste of compute time and can potentially lead to hangs. SmallPtrSet<BasicBlock *, 16> Unreachable; assert(DTU && "DTU isn't passed into JumpThreading before using it."); assert(DTU->hasDomTree() && "JumpThreading relies on DomTree to proceed."); DominatorTree &DT = DTU->getDomTree(); for (auto &BB : F) if (!DT.isReachableFromEntry(&BB)) Unreachable.insert(&BB);

And later in the main for loop below (line 378): if (Unreachable.count(&BB)) continue;

On Fri, Jan 11, 2019 at 12:29 AM hameeza ahmed via llvm-dev < llvm-dev at lists.llvm.org> wrote:

Hello, I have code containing conditions and loops. Hence some BB execution are determined at run time depending on condition. Now I want to count only those BB that are always executed irrespective of condition result means reachable. and their execution is evident at compile time.

How to do this? Please help Thank You Regards


LLVM Developers mailing list llvm-dev at lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190111/163f8422/attachment.html>



More information about the llvm-dev mailing list