[LLVMdev] Tell whether an llvm::BranchInst* may depend on the function parameters?

John Criswell jtcriswel at gmail.com
Wed May 20 12:42:29 PDT 2015


On 5/20/15 1:05 PM, Zhoulai wrote:
> Hi,
>
> I have a naive question in using LLVM.
>
> Given an llvm::Function*, and an llvm::BranchInst* of the function, is 
> their a simple, off-the-shelf procedure in LLVM for me to determine 
> whether there is dependency between the branch instruction and the 
> function’s input parameters? For example:

For data-dependences through SSA virtual registers, all you need to do 
is follow the def-use chain of the function parameter to see if it is 
used by a branch instruction.

For control-dependence, I think there's a Reverse Dominance Frontier 
analysis pass that you can use to determine if a branch is 
control-dependent on a value.  You might need to do some work to handle 
indirect control dependences (the branch control-depends on a value 
which control-depends on the function parameter), but that is easy 
enough to do.

If the value of the BranchInst is loaded from memory, then you've got a 
much more difficult task.  In that case, you'd need to use an 
AliasAnalysis pass combined with your own reaching-definitions data-flow 
analysis to determine that the Function parameter is stored into memory 
and can potentially reach the use in the BranchInst.

Regards,

John Criswell

>
> /void foo(int n){/
> /   i=0; /
> /  if (i<=n){              //B1/
> /       i++;/
> /   }/
> /  int j=0/
> /  if (j<=2*j){            //B2/
> /       j++;/
> /  }/
> /  if (i+j>=1){          //B3/
> /      return;/
> / }/
> /return;/
> /}/
>
> Here, the first branch B1 depends on the input ’n’; the second branch 
> B2 does not depends on ’n’; and the third B3 depends (indirectly) on 
> input ’n’ as it uses ‘i’.
>
> Such static analysis can quickly become complicated, but maybe LLVM 
> provides a simple, conservative solution for us. Can anyone tell me 
> the right LLVM API to use. A simple example of the use would be the 
> most helpful.
>
> Thanks in advance.
> Zhoulai
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev


-- 
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
http://www.cs.rochester.edu/u/criswell

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150520/3745408f/attachment.html>


More information about the llvm-dev mailing list