[llvm-dev] LLVM Pass to count reachable BB

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