[LLVMdev] [Proposal] Parallelize post-IPO stage.

Shuxin Yang shuxin.llvm at gmail.com
Wed Jul 17 16:29:11 PDT 2013

On 7/17/13 4:12 PM, Nick Kledzik wrote:
> On Jul 14, 2013, at 7:07 PM, Andrew Trick <atrick at apple.com 
> <mailto:atrick at apple.com>> wrote:
>> The partitioning should be deterministic. It’s just that the linker 
>> output now depends on the partitioning heuristics. As long that 
>> decision is based on the input (not the host system), then it still 
>> meets Eric’s requirements. I just think it’s unfortunate that 
>> post-IPO partitioning (or more generally, parallel codegen) affects 
>> the output, but may be hard to avoid. It would be nice to be able to 
>> tune the partitioning for compile time without worrying about code 
>> quality.
> I also want to chime in on the importance of stable binary outputs. 
>  And not just same compiler and same sources produces same binary, but 
> that minor changes to either should cause minor changes to the output 
> binary.   For software updates, Apple updater tries to download only 
> the delta to the binaries, so we want those to be as small as 
> possible.  In addition, it often happens late in an OS release cycle 
> that some critical bug is found and the fix is in the compiler.  To 
> qualify it, we rebuild the whole OS with the new compiler, then 
> compare all the binaries in the OS, making sure only things related to 
> the bug are changed.
We can view partitioning as a "transformation".  Unless the 
transformation is absolutely no-op,
it will change something.   If we care the consistency in binaries, we 
either consistently use partition
or consistently not use partition.

>>  The compiler used to generate a single object file from the merged
>> IR, now it will generate multiple of them, one for each partition.
> I have not studied the MC interface, but why does each partition need 
> to generate a separate object file?  Why can’t the first partition 
> done create an object file, and as other partitions finish, they just 
> append to that object file?

We could append the object files as an alternative.
However, how do we know the /path/to/ld from the existing interface ABIs?
How do we know the flags feed to the ld (more often than not, "-r" alone 
is enough,
but some linkers may need more).

In my rudimentary implement, I hack by hardcoding to /usr/bin/ld.

I think adding object one by one back to the linker is better as the 
linker already have
enough information.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130717/4bac2347/attachment.html>

More information about the llvm-dev mailing list