[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