[LLVMdev] How to force MemoryDependenceAnalysis to run on original module

Marc Brünink marc at bruenink.de
Fri Aug 21 03:04:26 PDT 2009


Chris Lattner schrieb:
> 
> On Aug 20, 2009, at 11:44 AM, Marc Brünink wrote:
> 
>> Hi,
>>
>> I do have a FunctionPass that does change the code. This FunctionPass
>> requires another FunctionPass which performs all the necessary analyses.
>> This AnalysisPass again requires MemoryDependenceAnalysis.
>>
>> The problem is, that I would like MemoryDependenceAnalysis to run on the
>> unaltered module. I do not want to have dependencies to changed code.
>> What is the cleanest way to do this?
>> Sounds easy, but I do not get it right :D
> 
> Hi Marc,
> 
> This isn't really possible.  The issue is that MemDep doesn't just 
> "analyze your function".  It is designed to be as lazy as possible, 
> which means that it only does analysis when a query is performed.  This 
> means that if you have MemDep->Pass1->Pass2 and Pass2 uses MemDep info 
> that you need to make Pass1 preserve that memdep info.


Hi,

actually my problem is easier. So I still have hope that it is possible:

MemDep->Pass1->Pass2

Pass1 uses MemDep. Pass2 only uses Pass1. Eventually, Pass2 changes the 
code. Unfortunately, non-local dependencies of MemDep might point to 
code changed by Pass2. Therefore, Pass1 might see changes applied by 
Pass2. This breaks encapsulation.

So I want to make sure the PassManager runs Pass1 on the whole module, 
before Pass2's runOnFunction is called the first time.

Still impossible?

Thanks
Marc



More information about the llvm-dev mailing list