[LLVMdev] Passes calling

Chandler Carruth chandlerc at google.com
Thu Jun 12 09:41:47 PDT 2014


On Thu, Jun 12, 2014 at 5:23 PM, John Criswell <criswell at illinois.edu>
wrote:

> On 6/12/14, 11:03 AM, Chandler Carruth wrote:
>
>
> On Thu, Jun 12, 2014 at 4:45 PM, Hanbing Li <hanbing.li at inria.fr> wrote:
>
>> Hi,
>>
>>  I know when a pass needs other passes, it will use something like this:
>> "AU.addRequired<LoopInfo>();". But this is usually used for the analysis
>> passes.
>> When a pass needs another transform pass, can it call it automatically?
>> For example:
>> Some loop optimizations may need loop-simplify, I need add -loop-simplify
>> before calling these passes manually, or they can call the pass
>> -loop-simplify automatically?
>>
>
> Currently, the pass manager allows you (somewhat) to use the addRequired
> mechanism even with analyses. However, I strongly encourage you to not
> leverage it as it will eventually go away.
>
>
> Just out of curiosity, why is this feature going away?


Because it makes understanding the actual pass sequence horribly complex.

With analyses, things are simple. Whatever order you run the analyses in
doesn't matter because they don't mutate anything. Each analysis can depend
on other analyses and you either have a cycle (fast to detect and error on)
or you have a DAG and there is a natural walk that produces the set of
desired analyses.

Now consider when these passes are *transformations*. Now, the relative
order in which you run them can dramatically change the results in
unpredictable ways. There is no way for multiple "required" transformation
passes to be ordered cleanly without a tremendous amount of machinery. All
this is what led to LoopSimplify being run 4x as many times as was
necessary for a long time. =/

Instead, everyone I've discussed this with (there have bene several email
threads about this) prefers that there is a single place (the builder)
which spells out the exact sequence of transforms applied.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140612/202a4785/attachment.html>


More information about the llvm-dev mailing list