[patch] Misc changes to LTOCodeGenerator
Bob Wilson
bob.wilson at apple.com
Tue Aug 13 09:44:44 PDT 2013
Shuxin,
It is hard to review this patch because you've combined 3 separate changes. Please split this up and resubmit the patches so we can consider each change separately.
On Aug 12, 2013, at 2:32 PM, Shuxin Yang <shuxin.llvm at gmail.com> wrote:
> Ping...
>
> It actually took me lots of effort to convince people inside Apple as to It is *terribly* bad idea to expose
> control of libLTO.{dylib,so} to linkers, and I hope in the long run, we will ditch those damn lto_xxx APIs,
> or just expose to those who just want to plugin a home-brew linker for hobby project...
>
> It seems I need to dual effort to convince people as well...
>
> Why it is terrible to use those lto_xxx APIs in the projects he/she want to make money out of it, and is
> release in separate SW?
>
> Considering design a PC with 3 components involved : CPU, graphic adapter, display. Suppose the
> adapater is installed on old PCI bus, and display can hook to VGA port.
>
> Design 1: put CPU in computer case, and graphic-adapter stay with display, they two form monitor.
> Dig a hole on the computer case to install a socket for PCI bus.
> And the monitor hook to the external-PCI-socket?
>
> Design 2: CPU and adapter stay in computer case, which communicate with display with VCG.
>
> Design 1 sound like a disaster right? Linker directly calling lto_xxx APIs are similar to the design-1
> in many ways.
>
> In our case, things are even messy. We support at least two linkers, each has its esoteric way to
> "control" the libLTO. (Do we have unified way to save the merged-linker?). Adding control
> to linkers is just like cancer grow....
>
>
> On 8/8/13 5:22 PM, Shuxin Yang wrote:
>> Hi,
>>
>> This patch is to :
>> 1) restructure the LTOCodegenerator little bit such that partitioning can comfortably kick in.
>> (The code about partitioning is not include in this patch)
>> 2) introduce workdir to better manage intermediate files generated during the LTO compilation.
>> 3) tries to unify some debugging functionalities of Apple-linker and GNU-gold.
>>
>> For the first goal, I introduce several classes:
>> o. IPOPartition: To depict a partition.
>> o. PostIPODriver: The driver for the Post-IPO compilation.
>> We are going to support several variants of the drivers, all of them will derive
>> from this base class.
>>
>> o. IPOFile : To manage misc info about an intermediate file generated during the IPO or
>> PostIPO phases, like file-name, absolute-path, last-err-code, last-error-string.
>> It is not a be wrapper of file IOs.
>> o. and other misc classes.
>>
>> They are designed in a way such the the top-level driver LTOCodeGenerator will not see much
>> difference with or without partition. This is achieved by viewing a merged module as
>> single degenerated partition if the partition is not enabled.
>>
>> The workdir
>> ===========
>> To better manage the intermediate files (*.bc file, obj file etc), we put all intermediate
>> files into a temp workdir. If the path of workdir is not specified, the workdir is created
>> under $PWD, with the name leading with "llvm-ipo".
>>
>> This workdir will be erased if the user dose not instruct the compiler to keep it.
>>
>> In order to properly erase the workdir, I have to introduce one API:
>> lto_codegen_get_files_need_remove().
>>
>> Apple-ld will not see this change, as Apple-linker communicates with libLTO.dylib with
>> memory buffer instead of object files. After the libLTO.dylib hands the buffer the
>> linker, it can safely erase the workdir, i.e. it is up to libLTO.dylib it erase the workdir.
>>
>> The GNU-gold linker's adaptor (tools/gold/gold-plugin.cpp) is modified slightly in order
>> to accommodate this change.
>>
>> TODO: I don't know to install a sig-handler to erase the workdir if the linker quit
>> prematurely. Currently, the delete-on-signal support-routine ignores directory. I don't
>> know if this is intentional.
>>
>> Misc
>> =====
>> Now that we are able to keep intermediate file, the "obj-path" flag in
>> GNU-gold-linker adaptor is not useful any more, and is removed by this patch.
>>
>> Apple-ld's -Wl,-save-temps is not useful either. On the other hand, it will
>> become meaningless if partition is enabled. The reason is that -Wl,-save-temps
>> is to instruct linker to save "merged-module". However, the partitioning,
>> the merged-module is "merged" module at beginning; it become "remaining module"
>> right after partition.
>>
>> Maintaining two linker is annoying, I'd like to shift such functionality to
>> the LTO driver.
>>
>> Thanks
>> Shuxin
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list