[ThinLTO] Keep available_externally symbols live
authorVlad Tsyrklevich <vlad@tsyrklevich.net>
Thu, 8 Mar 2018 18:48:03 +0000 (18:48 +0000)
committerVlad Tsyrklevich <vlad@tsyrklevich.net>
Thu, 8 Mar 2018 18:48:03 +0000 (18:48 +0000)
commit7b66ef10364d20acfa83934e04a04b2f799a0396
tree6ef5beba6fca6d412c9abcfbf21323ab95f61ca3
parentd5e5992f9a2ef811536d42571de7d312774ad928
[ThinLTO] Keep available_externally symbols live

Summary:
This change fixes PR36483. The bug was originally introduced by a change
that marked non-prevailing symbols dead. This broke LowerTypeTests
handling of available_externally functions, which are non-prevailing.
LowerTypeTests uses liveness information to avoid emitting thunks for
unused functions.

Marking available_externally functions dead is incorrect, the functions
are used though the function definitions are not. This change keeps them
live, and lets the EliminateAvailableExternally/GlobalDCE passes remove
them later instead.

I've also enabled EliminateAvailableExternally for all optimization
levels, I believe it being disabled for O1 was an oversight.

Reviewers: pcc, tejohnson

Reviewed By: tejohnson

Subscribers: grimar, mehdi_amini, inglorion, eraman, llvm-commits

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

llvm-svn: 327041
llvm/lib/Transforms/IPO/FunctionImport.cpp
llvm/test/ThinLTO/X86/deadstrip.ll
llvm/test/Transforms/FunctionImport/Inputs/not-prevailing.ll [new file with mode: 0644]
llvm/test/Transforms/FunctionImport/not-prevailing.ll [new file with mode: 0644]