[PATCH] D20681: Add target-specific pre-linking passes to Clang
Anastasia Stulova via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 8 11:05:23 PDT 2016
Anastasia added a comment.
In http://reviews.llvm.org/D20681#450073, @yaxunl wrote:
> In http://reviews.llvm.org/D20681#448443, @Anastasia wrote:
>
> > Do you think we could add any test for this change?
>
>
> We have prelinking passes in amdgpu backend but it requires the llvm change to be committed first. We can add a test for this after that.
Sure. Could you subscribe me to the relevant backend reviews if possible please? Thanks!
================
Comment at: lib/CodeGen/CodeGenAction.cpp:169
@@ +168,3 @@
+ std::function<bool(llvm::Module*)>
+ LinkCallBack = [=](llvm::Module *M)->bool {
+ // Link LinkModule into this module if present, preserving its validity.
----------------
yaxunl wrote:
> Anastasia wrote:
> > Is there any reason for having this as a callback now?
> >
> > Could we just add a call to prelink passes here above instead without modifying much the original flow?
> EmitBackendOutput does not set its own diagnostic handler. When linking error happens, the diagnostic handler of BackendConsumer is used, which requires the member variable CurLinkModule of BackendConsumer to be set to current module to be linked to emit correct error msg. Therefore the linking step of EmitBackendOutput needs to update a member of BackendConsumer, a lambda function can achieve that with minimal change to other parts of the code.
>
> An alternative implementation can do without the lambda function, but needs to
>
> # define a diagnostic handler for EmitBackendOutput
> # at the begining of EmitBackendOutput, save the old diagnostic handler and set the new one
> # at the end of EmitBackendOutput, recover the old diagnostic handler
> # define a helper class for diagnostic handler for EmitBackendOutput to retain the states needed for emitting diagnostic msgs
> # move or copy the diagnostic handling required by EmitBackendOutput from the diagnostic handler of BackendConsumer to the helper class of diagnostic handler for EmitBackendOutput
>
> Do we want to take this approach?
>
I see, seems complicated indeed. Would returning the module into CurLinkModule be possible instead?
http://reviews.llvm.org/D20681
More information about the cfe-commits
mailing list