[LLVMdev] How to Check whether BasicBlock resides in a conditional branch

Duncan Sands baldrick at free.fr
Sun Aug 26 12:53:11 PDT 2012


Hi Jianfei Hu,

the GVN pass does something like this in the logic around
GVN::propagateEquality.  If in your example it was

   if a == 2 // BasicBlock A
   then

then it replaces all occurrences of a with 2 in BasicBlock A.  For this
it needs to understand which basic blocks can only be reached via this
conditional edge "a == 2".

Ciao, Duncan.


> Hello All,
>
> I want to dertermine whether a basicblock is in a conditional branch. such as,
>
> //=============================
> if a > 2 // BasicBlock A
> then
>
> BasicBlock B
>
> endif
>
> BasicBlock C
> //=============================
> What I want to identify is BasicBlock B, which is in a condtional
> block. but C is not.
> In other words, I want to distinguish BasicBlocks that  * must *  be
> executed and that *may* be executed.
>
> CFG's iterator may not help, as  LLVM IR br would be:
> A:
> br %cmp,  %lable.B,  %label.C
>
> B
> br C
>
> C
>
> both of the blocks could be operand of br instruction.
>
> code in C *must be executed*, but B is not.
>
>
> Is there any availiable API in LLVM to distinguish them?
>
> Thanks.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>




More information about the llvm-dev mailing list