[llvm-dev] Review wanted - contribution for legacy pass manager (machine pass extensions)

30 views
Skip to first unread message

Raoul Gough via llvm-dev

unread,
Jun 7, 2021, 9:20:01 AM6/7/21
to LLVM dev
Hello llvm-dev, I have a code contribution for the legacy pass manager
and I'm having trouble finding anyone to finish reviewing it. I've made
some improvements based on earlier feedback from @ychen on Phabricator
but since then nobody has given final approval. Can anyone help with
this or point me in the right direction?

I couldn't see anyone listed in the CODE_OWNERS.txt for this area of the
code base. From what I understand the new pass manager still doesn't
handle the target-specific code, so I think the code is in the right
place for now at least. I'd be happy to move it to the new pass manager
if that's currently possible, of course.

This is related to my (out of tree) runtime inlining project and adds
minimal support for target-level extensions in a similar way to
addGlobalExtension in the legacy IR PassManagerBuilder...
https://reviews.llvm.org/D98591

Regards,
Raoul Gough.

_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

David Blaikie via llvm-dev

unread,
Jun 14, 2021, 11:04:08 AM6/14/21
to Raoul Gough, Arthur Eubanks, LLVM dev
Arthur - any idea who might be good to review this?

Arthur Eubanks via llvm-dev

unread,
Jun 15, 2021, 6:22:59 PM6/15/21
to David Blaikie, LLVM dev
I'm not super familiar with the codegen pipeline, perhaps some backend people can take a look?

A question is, do we want extensions like in the middle-end optimization pipeline? I don't see why not, this mirrors the existing extensions for the optimization pipeline. But it'd be good to get some more opinions from people more knowledgeable.

Raoul Gough via llvm-dev

unread,
Jun 16, 2021, 3:59:58 PM6/16/21
to Arthur Eubanks, David Blaikie, craig....@gmail.com, LLVM dev
Hi Craig, I see you listed as the code owner for the x86 backend and I was wondering if you'd have time to comment on my review at https://reviews.llvm.org/D98591 ? This adds an extension mechanism to TargetPassConfig to allow out-of-tree code to provide machine passes for an existing target.

Arthur has raised the question of whether it's appropriate to have such an extension mechanism so it might help if I explain my motivating example. I'm working on a way to do runtime inlining of functions referenced via pointers, including C++ virtual function calls. This works using ahead-of-time compiled code that has been annotated to derive call-tree information at runtime and potentially recompile parts of the code using bitcode embedded as data in the executable. To build the call tree I install a context pointer in a callee-saved register at the relevant call sites and retrieve it at function entry, both of which I do via a machine pass that runs just before the register allocator. There are actually several other complications but that's the starting point for wanting to inject a custom machine pass for an existing target. What do you think?

There are some more details on my github page https://github.com/drti/drti if you're interested.

Regards,
Raoul.

Craig Topper via llvm-dev

unread,
Jun 16, 2021, 7:31:28 PM6/16/21
to Raoul Gough, LLVM dev
I just got back from vacation so I haven't had much time to look at your patch yet. My first question is going to be, is this something that can already be done with the existing TargetPassConfig::insertPassAfter mechanism? I don't know the history of that mechanism just that it exists.

~Craig

Raoul Gough via llvm-dev

unread,
Jun 17, 2021, 3:52:53 AM6/17/21
to Craig Topper, LLVM dev
Thanks for looking at this. Just so you're aware I see that @ychen has just posted some further comments on the review which I'll be addressing shortly.

The TargetPassConfig::insertPass (after) function would work in theory except that the TargetPassConfig objects only have transitory lifetimes within, e.g., LLVMTargetMachine::addPassesToEmitFile. I couldn't find any existing way to access the TargetPassConfig objects from out-of-tree code in order to manipulate them. The solution with TargetPassConfig::addExtension is to register callback(s) in a global which get passed the TargetPassConfig object during execution of TargetPassConfig::addMachinePasses.

Raoul Gough via llvm-dev

unread,
Sep 6, 2021, 5:39:36 AM9/6/21
to Craig Topper, LLVM dev

Hello, sorry to revisit this old thread but progress seems to have stalled on my review again. It's been nearly six months since I submitted it and I didn't really think it would be such a hard change to get through. Is there a point when we could consider the original reviewer no longer to be interested and ask someone else to step in?

What I've done is add a new (static) function addExtension to TargetPassConfig to give out of tree code a way to manipulate MachineFunctions. I did get some good feedback and made some code changes but I haven't been getting any responses for a while now and it's hard for me to know what to do at this point. Would someone else be able to take a look, please?

The review is at https://reviews.llvm.org/D98591 and would probably need to be rebased again if we want to go ahead with it.

Regards,
Raoul.

Reply all
Reply to author
Forward
0 new messages