Reland r327041: [ThinLTO] Keep available_externally symbols live
authorVlad Tsyrklevich <vlad@tsyrklevich.net>
Tue, 13 Mar 2018 05:08:48 +0000 (05:08 +0000)
committerVlad Tsyrklevich <vlad@tsyrklevich.net>
Tue, 13 Mar 2018 05:08:48 +0000 (05:08 +0000)
commitaab60006842d6172ca7963e4d96540bad33ebe3d
treeb1b3d0e5c94b8cc3f635b13c3e3a28e66974f363
parentade40dd3c8f25b243a55cb9d1960efd7ca9e25a3
Reland r327041: [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.

(Reland with a suspected fix for a unit test failure I haven't been able
to reproduce locally)

Reviewers: pcc, tejohnson

Reviewed By: tejohnson

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

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

llvm-svn: 327360
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]