llvm-project/llvm/lib/Bitcode/Reader
Sean Fertile c70d28bff5 Represent runtime preemption in the IR.
Currently we do not represent runtime preemption in the IR, which has several
drawbacks:

  1) The semantics of GlobalValues differ depending on the object file format
     you are targeting (as well as the relocation-model and -fPIE value).
  2) We have no way of disabling inlining of run time interposable functions,
     since in the IR we only know if a function is link-time interposable.
     Because of this llvm cannot support elf-interposition semantics.
  3) In LTO builds of executables we will have extra knowledge that a symbol
     resolved to a local definition and can't be preemptable, but have no way to
     propagate that knowledge through the compiler.

This patch adds preemptability specifiers to the IR with the following meaning:

dso_local --> means the compiler may assume the symbol will resolve to a
 definition within the current linkage unit and the symbol may be accessed
 directly even if the definition is not within this compilation unit.

dso_preemptable --> means that the compiler must assume the GlobalValue may be
replaced with a definition from outside the current linkage unit at runtime.

To ease transitioning dso_preemptable is treated as a 'default' in that
low-level codegen will still do the same checks it did previously to see if a
symbol should be accessed indirectly. Eventually when IR producers emit the
specifiers on all Globalvalues we can change dso_preemptable to mean 'always
access indirectly', and remove the current logic.

Differential Revision: https://reviews.llvm.org/D20217

llvm-svn: 316668
2017-10-26 15:00:26 +00:00
..
BitReader.cpp Add explicit (void) cast to unused unique_ptr::release() results 2016-11-14 07:26:17 +00:00
BitcodeReader.cpp Represent runtime preemption in the IR. 2017-10-26 15:00:26 +00:00
BitstreamReader.cpp Change BitstreamCursor::skipRecord to return the record code (NFC) 2017-01-04 22:54:14 +00:00
CMakeLists.txt Refactor BitcodeReader: move Metadata and ValueId handling in their own class/file 2016-12-12 19:34:26 +00:00
LLVMBuild.txt
MetadataLoader.cpp IR: Represent -ggnu-pubnames with a flag on the DICompileUnit. 2017-09-12 21:50:41 +00:00
MetadataLoader.h PR32382: Fix emitting complex DWARF expressions. 2017-04-18 01:21:53 +00:00
ValueList.cpp [Bitcode] Fix some Clang-tidy modernize-use-using and Include What You Use warnings; other minor fixes (NFC). 2017-09-07 23:28:24 +00:00
ValueList.h [Bitcode] Fix some Clang-tidy modernize-use-using and Include What You Use warnings; other minor fixes (NFC). 2017-09-07 23:28:24 +00:00