[LLVMdev] How to force MemoryDependenceAnalysis to run on original module
Marc Brünink
marc at bruenink.de
Fri Aug 21 10:48:54 PDT 2009
Chris Lattner schrieb:
> On Aug 21, 2009, at 3:04 AM, Marc Brünink wrote:
>>> 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.
>
> Not impossible at all. I assume that Pass1 is your pass, just make the
> "Pass1::runOnFunction" method do everything you need.
Hi Chris,
I'm not sure whether I got you right.
Now I run the whole analysis (Pass1) on the first call to
Pass1::runOnFunction. That is, I get the module of the passed function
and iterate over _all_ functions of the module.
On subsequent calls to runOnFunction I just do not do anything.
I cache the analysis result for later queries. While it works, it also
means that I keep state across invocations of runOnFunction which isn't
allowed[1].
All in all it looks awkward, doesn't feel right, but works.
Did you mean something like that or did I misunderstand you completely?
Many thanks!
Marc
[1] http://llvm.org/docs/WritingAnLLVMPass.html#FunctionPass
More information about the llvm-dev
mailing list