llvm-project/llvm/tools
Teresa Johnson 6955feebf3 [ThinLTO] Prevent exporting of locals used/defined in module level asm
Summary:
This patch uses the same approach added for inline asm in r285513 to
similarly prevent promotion/renaming of locals used or defined in module
level asm.

All static global values defined in normal IR and used in module level asm
should be included on either the llvm.used or llvm.compiler.used global.
The former were already being flagged as NoRename in the summary, and
I've simply added llvm.compiler.used values to this handling.

Module level asm may also contain defs of values. We need to prevent
export of any refs to local values defined in module level asm (e.g. a
ref in normal IR), since that also requires renaming/promotion of the
local. To do that, the summary index builder looks at all values in the
module level asm string that are not marked Weak or Global, which is
exactly the set of locals that are defined. A summary is created for
each of these local defs and flagged as NoRename.

This required adding handling to the BitcodeWriter to look at GV
declarations to see if they have a summary (rather than skipping them
all).

Finally, added an assert to IRObjectFile::CollectAsmUndefinedRefs to
ensure that an MCAsmParser is available, otherwise the module asm parse
would silently fail. Initialized the asm parser in the opt tool for use
in testing this fix.

Fixes PR30610.

Reviewers: mehdi_amini

Subscribers: johanengelen, krasin, llvm-commits

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

llvm-svn: 286297
2016-11-08 21:53:35 +00:00
..
bugpoint [Polly] Remove the unused POLLY_LINK_LIBS for linking polly into 2016-10-30 06:07:59 +00:00
bugpoint-passes Remove autoconf support 2016-01-26 21:29:08 +00:00
dsymutil DebugInfo: make DW_TAG_atomic_type valid 2016-10-31 19:09:38 +00:00
gold Make the LTO comdat api more symbol table friendly. 2016-10-25 12:02:03 +00:00
llc Revert "Use StringRef instead of raw pointer in TargetRegistry API (NFC)" 2016-10-01 07:08:23 +00:00
lli Fix Clang-tidy readability-redundant-string-cstr warnings 2016-11-02 16:43:50 +00:00
llvm-ar [Object] Replace TimeValue with std::chrono 2016-10-24 13:38:27 +00:00
llvm-as Search for llvm-symbolizer binary in the same directory as argv[0], before 2016-06-09 00:53:21 +00:00
llvm-as-fuzzer Remove every uses of getGlobalContext() in LLVM (but the C API) 2016-04-14 21:59:01 +00:00
llvm-bcanalyzer Bitcode: Decouple block info block state from reader. 2016-11-08 04:17:11 +00:00
llvm-c-test Add support for callsite in the new C API for attributes 2016-06-15 05:14:29 +00:00
llvm-config Replace a few more "fall through" comments with LLVM_FALLTHROUGH 2016-08-17 20:30:52 +00:00
llvm-cov [llvm-cov] Turn line numbers in html reports into clickable links 2016-11-02 19:44:13 +00:00
llvm-cxxdump Fix a bug in the code of llvm-cxxdump in dumpArchive() when 2016-10-21 20:03:14 +00:00
llvm-cxxfilt [llvm-cxxfilt] Use llvm::outs(). Simplify. 2016-09-27 18:50:30 +00:00
llvm-diff [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
llvm-dis IR, Bitcode: Change bitcode reader to no longer own its memory buffer. 2016-11-08 06:03:43 +00:00
llvm-dwarfdump dwarfdump: -summarize-types: print a short summary (unqualified type name, hash, length) of type units rather than dumping contents 2016-10-18 21:09:48 +00:00
llvm-dwp Switch all DWARF variables for tags, attributes and forms over to use the llvm::dwarf enumerations instead of using raw uint16_t values. This allows easier debugging as users can see the values of the enumerations in the variables view that will show the enumeration string instead of just a number. 2016-10-27 16:32:04 +00:00
llvm-extract Search for llvm-symbolizer binary in the same directory as argv[0], before 2016-06-09 00:53:21 +00:00
llvm-go [llvm-go] parameterize $GOPATH construction 2016-07-27 03:21:51 +00:00
llvm-jitlistener Search for llvm-symbolizer binary in the same directory as argv[0], before 2016-06-09 00:53:21 +00:00
llvm-link [llvm-link] Fix description of -disable-lazy-loading option 2016-10-09 17:15:04 +00:00
llvm-lto Fix Clang-tidy readability-redundant-string-cstr warnings 2016-11-02 16:43:50 +00:00
llvm-lto2 [ThinLTO] Disable importing and other cross-module optis at -O0 2016-10-31 22:12:21 +00:00
llvm-mc [MC] Make llvm-mc fail cleanly on invalid output asm variant. 2016-10-31 18:36:31 +00:00
llvm-mc-fuzzer Turn cl::values() (for enum) from a vararg function to using C++ variadic template 2016-10-08 19:41:06 +00:00
llvm-mcmarkup Search for llvm-symbolizer binary in the same directory as argv[0], before 2016-06-09 00:53:21 +00:00
llvm-nm Fix an unconditional break in checkMachOAndArchFlags 2016-10-31 17:11:31 +00:00
llvm-objdump Remove dead code trying to handle when the amount of data read is 2016-11-04 07:10:24 +00:00
llvm-opt-report [llvm-opt-report] Fix unroll-count reporting 2016-10-24 05:07:18 +00:00
llvm-pdbdump Add CodeViewRecordIO for reading and writing. 2016-11-02 17:05:19 +00:00
llvm-profdata [PGO] Fix a use-after-move. NFC. 2016-10-19 23:31:59 +00:00
llvm-readobj Remove the last use of report_fatal_error from ELF.h. 2016-11-03 19:07:15 +00:00
llvm-rtdyld Turn cl::values() (for enum) from a vararg function to using C++ variadic template 2016-10-08 19:41:06 +00:00
llvm-shlib Fix llvm-shlib cmake build 2016-11-01 20:19:33 +00:00
llvm-size Fix an unconditional break in checkMachOAndArchFlags 2016-10-31 17:11:31 +00:00
llvm-split Remove every uses of getGlobalContext() in LLVM (but the C API) 2016-04-14 21:59:01 +00:00
llvm-stress Use StringRef in CommandLine Options handling (NFC) 2016-10-01 03:43:20 +00:00
llvm-symbolizer Turn cl::values() (for enum) from a vararg function to using C++ variadic template 2016-10-08 19:41:06 +00:00
llvm-xray xray-extract.cc: Quick fix for mingw, to avoid errc::protocol_error. 2016-10-27 00:34:24 +00:00
lto Fix Clang-tidy readability-redundant-string-cstr warnings 2016-11-02 16:43:50 +00:00
msbuild
obj2yaml Remove the last use of report_fatal_error from ELF.h. 2016-11-03 19:07:15 +00:00
opt [ThinLTO] Prevent exporting of locals used/defined in module level asm 2016-11-08 21:53:35 +00:00
sancov [sancov] add __sanitizer_cov_trace_pc_guard to the supported coverage points 2016-10-18 18:11:42 +00:00
sanstats [Symbolize] Check if the PE file has a PDB and emit an error if we can't load it 2016-06-03 20:25:09 +00:00
verify-uselistorder Search for llvm-symbolizer binary in the same directory as argv[0], before 2016-06-09 00:53:21 +00:00
xcode-toolchain [CMake] Minor fix to regex in r279152 2016-08-18 21:36:36 +00:00
yaml2obj Misc improvements to StringTableBuilder. 2016-10-04 22:43:25 +00:00
CMakeLists.txt Fixup r271533, or check-clang didn't find llvm-lto as the target. 2016-06-02 20:39:24 +00:00
LLVMBuild.txt llvm-dwp: Initial layout 2015-12-01 00:48:34 +00:00