[llvm-dev] status of CodeGen in new Pass Manager

Mingming Liu via llvm-dev
2021-11-15T21:42:20Z

I used "llc -print-after-all -O3 <file.ll>" on this IR gives an
assembly (
https://godbolt.org/z/K6cszrPPf), and codegenprepare indeed runs in `llc`
(from `print-after-all` output)

The source of my confusion is:

   1. Running the same IR by `opt -O3 -codegenprepare` gives a more
   optimized IR (https://godbolt.org/z/fdqTGsqG4)
   2. Piping the IR of step 1 (https://godbolt.org/z/544GMqaco) to `llc
   -O3` gives a better assembly (tail call generated).

I'm missing something here..

On Mon, Nov 15, 2021 at 1:00 PM Arthur Eubanks <aeubanks at google.com>
wrote:

> `llc` should always run codegenprepare on IR before isel.
>
> On Mon, Nov 15, 2021 at 11:49 AM Mingming Liu <mingmingl at
google.com>
> wrote:
>
>>
>>
>> On Mon, Nov 15, 2021 at 10:34 AM Arthur Eubanks <aeubanks at
google.com>
>> wrote:
>>
>>> `opt` is concerned about the optimization pipeline and `llc` is
>>> concerned about the codegen pipeline. codegenprepare is part of the
codegen
>>> pipeline, not the optimization pipeline. We happen to be able to
use `opt`
>>> to run codegenprepare on its own because of how legacy PM passes
are
>>> structured and `llc` is not well suited to run individual IR
passes.
>>>
>>
>> These all make sense to me.
>>
>> (The following idea side-tracks from the original topic, but just
>> brainstorming how to make the tools more friendly).
>>
>> If it (piping `opt` and `llc` misses `CodeGenPrepare` and causes
>> surprises) becomes a common question, `llc` tool might be enhanced by
>> emitting a warning/hint to CLI users that the IR probably needs
>> `CodeGenPrepare` pass (if input IR has metadata to record which
middle-end
>> passes ran)
>>
>> This wouldn't change even if we used the NPM for the codegen
pipeline.
>>>
>>
>> I get the point that CodeGenPrepare could be supported in `opt` (w/
NPM)
>> since `opt` does IR to IR transformations.
>>
>>>
>>> On Fri, Nov 12, 2021 at 10:15 PM Mingming Liu via llvm-dev <
>>> llvm-dev at lists.llvm.org> wrote:
>>>
>>>> Thank you so much Arthur and Yuanfang! These pointers are very
>>>> educational.
>>>>
>>>> Now I realize there are two questions
>>>> 1) Use NPM for machine passes; this is the desired state RFC
>>>>
<https://lists.llvm.org/pipermail/llvm-dev/2020-July/143309.html> and
>>>> D85168 <https://reviews.llvm.org/D85168> tries to push
forward.
>>>> 2) Whether CodeGenPrepare should be enabled by default (e.g.,
user of
>>>> opt CLI specifies an IR with sufficient target information, but
doesn't
>>>> enable CodeGenPrepare explicitly).
>>>>
>>>> From
>>>>
https://llvm.org/docs/NewPassManager.html#status-of-the-new-and-legacy-pass-managers,
>>>> the preferred option is to not run CodeGenPrepare in the
default settings
>>>> (although users can still run it via specifying
>>>> *-passes=codegenprepare*).
>>>>
>>>> I could make sense of the pointers, and understood the
rationales
>>>> better now.
>>>>
>>>> I'm curious if there were proposals to turn on
CodeGenPrepare by
>>>> default (if IR has sufficient target information). (didn't
find one with this
>>>> search query
>>>>
<https://www.google.com/search?q=llvm+rfc+turning+on+codegenpreare+opt&newwindow=1&sxsrf=AOaemvIqK3A44HhoAdT538LwKCQ_tbhq1g%3A1636783711790&ei=X1aPYcPSL8rU-gSnoq-IDg&oq=llvm+rfc+turning+on+codegenpreare+opt&gs_lcp=Cgdnd3Mtd2l6EAMyBwgAEEcQsAMyBwgAEEcQsAMyBwgAEEcQsAMyBwgAEEcQsAMyBwgAEEcQsAMyBwgAEEcQsAMyBwgAEEcQsAMyBwgAEEcQsANKBAhBGABQAFgAYNYCaAFwAngAgAEAiAEAkgEAmAEAyAEIwAEB&sclient=gws-wiz&ved=0ahUKEwiD_tu91pT0AhVKqp4KHSfRC-EQ4dUDCA4&uact=5>
>>>> )
>>>> The good thing is that, when someone (e.g., like me when
ramping up on
>>>> the llvm infra) pipes the *opt CLI* and *llc CLI *together, the
>>>> machine assembly is closer to the machine assembly of Clang (in
cpp to
>>>> assembly mode).
>>>>
>>>> On Fri, Nov 12, 2021 at 2:17 PM <Yuanfang.Chen at
sony.com> wrote:
>>>>
>>>>> Hi Mingming,
>>>>>
>>>>> About the status of using the new pass manager for the
codegen
>>>>> pipeline, the RFC was here (
>>>>>
http://lists.llvm.org/pipermail/llvm-dev/2020-July/143309.html) but
>>>>> there was no Bugzilla ticket for it, sorry! I've just
created one
>>>>> https://bugs.llvm.org/show_bug.cgi?id=52493 with updates
for anyone
>>>>> who might be interested. I haven't been able to follow
up on it for a while
>>>>> but a few in-flight patches are still relevant and in good
shape (check
>>>>> PR52493). I'll see if I could push them forward in the
near future.
>>>>>
>>>>> About codegen-prepare, I don't have much to add other
than Arthur's
>>>>> answer, except that D85168 would enable the use case,
although it has some
>>>>> dependencies so it's not like that it could be landed
soon.
>>>>>
>>>>> HTH,
>>>>> - Yuanfang
>>>>>
>>>>> ________________________________________
>>>>> From: llvm-dev <llvm-dev-bounces at lists.llvm.org>
on behalf of
>>>>> Mingming Liu via llvm-dev <llvm-dev at
lists.llvm.org>
>>>>> Sent: Friday, November 12, 2021 10:26 AM
>>>>> To: llvm-dev at lists.llvm.org
>>>>> Subject: [llvm-dev] status of CodeGen in new Pass Manager
>>>>>
>>>>> Hi,
>>>>>    This is a newbie question around CodeGen related passes
and the
>>>>> current status in new Pass Manager.
>>>>>
>>>>>    From
>>>>>
https://llvm.org/docs/NewPassManager.html#status-of-the-new-and-legacy-pass-managers
>>>>> <
>>>>>
https://urldefense.com/v3/__https://llvm.org/docs/NewPassManager.html*status-of-the-new-and-legacy-pass-managers__;Iw!!JmoZiZGBv3RvKRSx!tI8u93htbfzW8OQkAVIdBlQTDHabCnLJtB2D5fD_OjBuK1ACPDpumEw6GK_dphuBDA$>,
>>>>> there are ongoing efforts to make the codegen pipeline work
in the new Pass
>>>>> Manager (which is great!). Searching in the bug list (
>>>>>
https://bugs.llvm.org/buglist.cgi?component=opt&list_id=226453&product=tools&query_format=advanced&resolution=---&short_desc=codegen&short_desc_type=allwordssubstr
>>>>> <
>>>>>
https://urldefense.com/v3/__https://bugs.llvm.org/buglist.cgi?component=opt&list_id=226453&product=tools&query_format=advanced&resolution=---&short_desc=codegen&short_desc_type=allwordssubstr__;!!JmoZiZGBv3RvKRSx!tI8u93htbfzW8OQkAVIdBlQTDHabCnLJtB2D5fD_OjBuK1ACPDpumEw6GK-25d1S-w$>)
>>>>> gives no result.
>>>>>
>>>>>    I'm wondering if anyone has more information on the
current status
>>>>> of CodeGen in the new Pass Manager (a tracking bug or other
pointers)?
>>>>>
>>>>>    The context is that, I'm using opt CLI (by default
new PM is used),
>>>>> and surprised that codegenprepare pass doesn't run, so
dig down and having
>>>>> more questions :-)
>>>>>
>>>>>    Any related information will be appreciated!
>>>>>
>>>>> --
>>>>> Thanks,
>>>>> Mingming
>>>>>
>>>>
>>>>
>>>> --
>>>> Thanks,
>>>> Mingming
>>>> _______________________________________________
>>>> LLVM Developers mailing list
>>>> llvm-dev at lists.llvm.org
>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>
>>>
>>
>> --
>> Thanks,
>> Mingming
>>
>

--
Thanks,
Mingming
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20211115/5fe3a301/attachment.html>