[PATCH][Clang Driver] Driver::IsUsingLTO no longer return true when seeing -emit-llvm

Eli Friedman eli.friedman at gmail.com
Wed Aug 14 12:57:10 PDT 2013


On Tue, Aug 13, 2013 at 5:46 PM, Eric Christopher <echristo at gmail.com>wrote:

> On Tue, Aug 13, 2013 at 5:29 PM, Shuxin Yang <shuxin.llvm at gmail.com>
> wrote:
> > Hi, Eric:
> >
> >  Thank you for the code review.
> >
> >
> > On 8/13/13 5:15 PM, Eric Christopher wrote:
> >>
> >> On Tue, Aug 13, 2013 at 4:20 PM, Shuxin Yang <shuxin.llvm at gmail.com>
> >> wrote:
> >>>
> >>> Hi,
> >>>
> >>>      Driver::IsUsingLTO()  returns true when "-emit-llvm" is seen,
> which
> >>> is
> >>> quite awkward if we need to differentiate following two commands, where
> >>> 1) is just go through regular passes and stop at llc, while 2) needs to
> >>> go
> >>> through
> >>> pre-ipo passes.
> >>>
> >>>     1) clang -emit-llvm a.c -c , and
> >>>     2) clang -flto a.c -c
> >>>
> >>>   With this tiny patch is to differentiate these two situations.
> >>
> >> This is a laudable goal, though i'm not sure what we gain here. I.e.
> >> Sadly, using -flto to grab bitcode out has been "the way" to do it for
> >> long enough that it's fairly baked in.
> >
> >
> > There are couple of reasons for differentiating them.
> >
> > For instance, vectorization should not be conducted in 2) because it is
> too
> > early to kick in --
> > after aggressive inter-procedural optimization, some symbolic trip-count
> > will become constant, and some functions are inlined, enabling more
> > opportunities etc...
> >
> > In short,  2) tries to eliminate as much as redundancy without increase
> code
> > size,
> > and basically, most loop transformations, no matter it's on a single
> loop,
> > or a loop nest,
> > must be disabled in 2).
> >
> > Thank you again for the code review.
> >
>
> I'm not sure this is a good motivation really. I'd almost rather
> redefine the interface for "please compile all of these files (*) as
> one single monolithic entity" and have the driver handle how to invoke
> the various optimizer levels and at what point we actually merge the
> modules (and then what passes we run after that).
>

I'm not sure what you're saying here.  We have to have some flag to
enable/disable LTO... are you saying it shouldn't be -flto?

-Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130814/71c5c531/attachment.html>


More information about the llvm-commits mailing list