[llvm-dev] RFC: module flag for hosted mode

Peter Collingbourne via llvm-dev llvm-dev at lists.llvm.org
Fri Sep 16 12:30:47 PDT 2016

In PR30403 we've been discussing how to encode -ffreestanding when using
LTO. This bit is currently dropped during LTO because its only
representation is in the TargetLibraryInfo created by clang (

The proposal is to introduce a module flag that we set in any translation
unit compiled in hosted (i.e. -fno-freestanding) mode. At LTO time, if the
combined module has this flag (i.e. if any of the inputs have this flag),
we compile in hosted mode. This means that if we combine freestanding and
hosted modules, the entire resulting module will be compiled in hosted mode.

The justification for this behaviour (per Duncan) is that
hosted/freestanding is a property of the linkage environment, and if the
standard library is claimed to be available for any one translation unit in
the linkage unit, it should be available for every other translation unit
in the linkage unit.

One question that arises is how to handle old modules which were compiled
in hosted mode and lack the hosted module flag. With the above scheme, LTO
would run in freestanding mode if there are no contemporaneous modules. I
think this is probably fine, since (1) I'd normally expect there to be at
least one contemporaneous module (i.e. the main program, as opposed to old
modules belonging to a prebuilt library) and (2) the loop idiom recognizer
has already been run over these modules at compile time, so even if all
modules are old there's unlikely to be a huge perf regression.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160916/b690e7b1/attachment.html>

More information about the llvm-dev mailing list