[LLVMdev] Passes calling
John Criswell
criswell at illinois.edu
Thu Jun 12 10:47:58 PDT 2014
On 6/12/14, 11:41 AM, Chandler Carruth wrote:
>
> On Thu, Jun 12, 2014 at 5:23 PM, John Criswell <criswell at illinois.edu
> <mailto: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
>> <mailto: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. =/
If I understand what you're saying, you're keeping the current
functionality of being able to schedule *analysis* passes using
AU.addRequired<>() but removing the ability to schedule *transform*
passes via AU.addRequired<>(), correct?
Your original email implied that analysis passes would, in the future,
not be scheduled via AU.addRequired<>(). I completely understand not
scheduling transform passes that way.
Regards,
John Criswell
>
> 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/54e44ee9/attachment.html>
More information about the llvm-dev
mailing list