[LLVMdev] [llvm-commits] [PATCH][RFC] Add extra arguments to TargetLowering::LowerCall() so targets have more context in which to construct call chains
Justin Holewinski
jholewinski at nvidia.com
Wed May 23 10:38:12 PDT 2012
Attached is the (hopefully) final version of this patch. This updates all in-tree targets, and does not introduce any regression test failures.
Okay to commit?
> -----Original Message-----
> From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-
> bounces at cs.uiuc.edu] On Behalf Of Justin Holewinski
> Sent: Friday, May 18, 2012 11:51 AM
> To: Evan Cheng
> Cc: llvm-commits at cs.uiuc.edu; llvmdev at cs.uiuc.edu
> Subject: Re: [llvm-commits] [PATCH][RFC] Add extra arguments to
> TargetLowering::LowerCall() so targets have more context in which to
> construct call chains
>
> > -----Original Message-----
> > From: Evan Cheng [mailto:evan.cheng at apple.com]
> > Sent: Wednesday, May 16, 2012 5:30 PM
> > To: Justin Holewinski
> > Cc: llvmdev at cs.uiuc.edu; llvm-commits at cs.uiuc.edu
> > Subject: Re: [llvm-commits] [PATCH][RFC] Add extra arguments to
> > TargetLowering::LowerCall() so targets have more context in which to
> > construct call chains
> >
> > Thanks. This is going in the right direction IMHO. Obviously, please make
> sure
> > you add comments to the data structure and convert all the targets first.
> > Also, please don't forget to send an email to llvmdev to warn owners of all
> > the out-of-tree targets about the ABI change.
>
> Of course! :)
>
> So, are people okay with the interface? This is basically just struct-ifying the
> parameters to TargetLowering::LowerCallTo/LowerCall. My main concerns
> are the handling of the InVals and IsTailCall variables. I left InVals as a
> separate parameter to LowerCall, since it is entirely produced by the
> implementation. IsTailCall remains in the struct since it is given a value
> before LowerCall, although the LowerCall implementation can change its
> value (hence not passing the struct by const-reference to LowerCall). This
> feels consistent enough for me, but I want to get the opinions of others
> before actually finalizing the implementation and committing it.
>
> Additionally, should the struct has getters/setters for the fields? This seems
> contrary to standard LLVM practice for structs, but I just want to clarify.
>
> >
> > Evan
> >
> > On May 15, 2012, at 6:56 AM, Justin Holewinski <jholewinski at nvidia.com>
> > wrote:
> >
> > > In response to this discussion, I've prepared the attached patch as an
> initial
> > prototype for the LowerCall/LowerCallTo change. All of the information
> > currently needed by the back-ends, and the extra information needed by
> > the NVPTX back-end, is now wrapped in a CallLoweringInfo struct. The
> > various SelectionDAG classes have been modified so any calls to
> > TargetLowering::LowerCallTo use this struct, and this struct is the means for
> > passing information to/from each target's LowerCall method. Right now,
> the
> > interface is a bit rough around the edges, but I wanted to get feedback
> from
> > the community on what you want in this interface before spending too
> much
> > time on it. This patch currently only addresses the X86 and NVPTX back-
> > ends. Once the interface is solidified, I will update the rest of the in-tree
> > targets.
> > >
> > >> -----Original Message-----
> > >> From: Dan Gohman [mailto:gohman at apple.com]
> > >> Sent: Thursday, April 19, 2012 4:28 PM
> > >> To: Evan Cheng
> > >> Cc: Justin Holewinski; llvmdev at cs.uiuc.edu; Commit Messages and
> > Patches
> > >> for LLVM; Vinod Grover
> > >> Subject: Re: [llvm-commits] [PATCH][RFC] Add extra arguments to
> > >> TargetLowering::LowerCall() so targets have more context in which to
> > >> construct call chains
> > >>
> > >>
> > >> On Apr 19, 2012, at 12:46 PM, Evan Cheng <evan.cheng at apple.com>
> > wrote:
> > >>
> > >>>
> > >>> On Apr 19, 2012, at 11:15 AM, Justin Holewinski wrote:
> > >>>
> > >>>>
> > >>>> From: Evan Cheng [mailto:evan.cheng at apple.com]
> > >>>> Sent: Thursday, April 19, 2012 10:47 AM
> > >>>> To: Justin Holewinski
> > >>>> Cc: llvmdev at cs.uiuc.edu; llvm-commits at cs.uiuc.edu; Vinod Grover
> > >>>> Subject: Re: [llvm-commits] [PATCH][RFC] Add extra arguments to
> > >> TargetLowering::LowerCall() so targets have more context in which to
> > >> construct call chains
> > >>>>
> > >>>> TargetLowering::LowerCall is already a mess, I would really prefer not
> > to
> > >> extend it any further. It's especially difficult to justify extending it
> without
> > a
> > >> use in the open source tree.
> > >>>>
> > >>>> We really should think hard about how to improve the API in two
> ways.
> > >> Perhaps we should wrap the arguments in some struct rather than as
> > >> individual ones. We should also make it easier to extend it in the future
> > >> without requiring an across the change for all in-tree and out-of-tree
> > targets.
> > >> Anyone wants to take the lead on this?
> > >>>>
> > >>>> The second may be solved by the first. If the LowerCall() arguments
> > are
> > >> encapsulated within some descriptor object, then extensions to this
> > >> descriptor class would be transparent to existing targets, both in-tree
> and
> > >> out-of-tree (assuming the API is consistent). What is the overall plan for
> > >> LowerCall() and LowerCallTo()? I noticed the comment on LowerCallTo()
> > that
> > >> implies it should be merged into SelectionDAGISel when all targets are
> > using
> > >> LowerCall (which I believe they are)?
> > >>>
> > >>> I believe Dan has some thoughts in this topic.
> > >>
> > >> That FIXME comment about LowerCallTo is probably an anachronism,
> > >> and no longer relevant given the changes that that code has been
> > >> through. LowerCallTo is currently a wrapper around LowerCall
> > >> which various things need. All targets which support calls are
> > >> using LowerCall.
> > >>
> > >> Dan
> > >
> > >
> > > -----------------------------------------------------------------------------------
> > > This email message is for the sole use of the intended recipient(s) and
> may
> > contain
> > > confidential information. Any unauthorized review, use, disclosure or
> > distribution
> > > is prohibited. If you are not the intended recipient, please contact the
> > sender by
> > > reply email and destroy all copies of the original message.
> > > -----------------------------------------------------------------------------------
> > > <llvm-lowercallto-
> >
> refactor.patch>______________________________________________
> > _
> > > llvm-commits mailing list
> > > llvm-commits at cs.uiuc.edu
> > > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Change-interface-for-TargetLowering-LowerCallTo-and-.patch
Type: application/octet-stream
Size: 67630 bytes
Desc: 0001-Change-interface-for-TargetLowering-LowerCallTo-and-.patch
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120523/65da0c99/attachment.obj>
More information about the llvm-dev
mailing list