[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