1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

Revert "ThinLTO: do not import function whose linkage prevents inlining."

This reverts commit r268315, the tests are not passing.

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 268317
This commit is contained in:
Mehdi Amini 2016-05-02 22:26:04 +00:00
parent 997823b380
commit d877456f6c
4 changed files with 22 additions and 38 deletions

View File

@ -124,7 +124,26 @@ private:
/// non-equivalent at link time. For example, if a function has weak linkage
/// then the code defining it may be replaced by different code.
bool mayBeOverridden() const {
return isMayBeOverriddenLinkage(getLinkage());
switch (getLinkage()) {
case WeakAnyLinkage:
case LinkOnceAnyLinkage:
case CommonLinkage:
case ExternalWeakLinkage:
return true;
case AvailableExternallyLinkage:
case LinkOnceODRLinkage:
case WeakODRLinkage:
// The above three cannot be overridden but can be de-refined.
case ExternalLinkage:
case AppendingLinkage:
case InternalLinkage:
case PrivateLinkage:
return false;
}
llvm_unreachable("Fully covered switch above!");
}
protected:
@ -266,31 +285,6 @@ public:
return Linkage == CommonLinkage;
}
/// Whether the definition of this global may be replaced by something
/// non-equivalent at link time. For example, if a function has weak linkage
/// then the code defining it may be replaced by different code.
static bool isMayBeOverriddenLinkage(LinkageTypes Linkage) {
switch (Linkage) {
case WeakAnyLinkage:
case LinkOnceAnyLinkage:
case CommonLinkage:
case ExternalWeakLinkage:
return true;
case AvailableExternallyLinkage:
case LinkOnceODRLinkage:
case WeakODRLinkage:
// The above three cannot be overridden but can be de-refined.
case ExternalLinkage:
case AppendingLinkage:
case InternalLinkage:
case PrivateLinkage:
return false;
}
llvm_unreachable("Fully covered switch above!");
}
/// Whether the definition of this global may be discarded if it is not used
/// in its compilation unit.
static bool isDiscardableIfUnused(LinkageTypes Linkage) {

View File

@ -156,8 +156,8 @@ selectCallee(const ModuleSummaryIndex &Index,
CalleeSummaryList,
[&](const std::unique_ptr<GlobalValueSummary> &SummaryPtr) {
auto *GVSummary = SummaryPtr.get();
if (GlobalValue::isMayBeOverriddenLinkage(GVSummary->linkage()))
// There is no point in importing these, we can't inline them
if (GlobalValue::isWeakAnyLinkage(GVSummary->linkage()))
// There is no point in importing weak symbols, we can't inline them
return false;
if (auto *AS = dyn_cast<AliasSummary>(GVSummary)) {
GVSummary = &AS->getAliasee();

View File

@ -75,11 +75,6 @@ entry:
ret void
}
define linkonce void @linkoncefunc2() #0 {
entry:
ret void
}
define internal i32 @staticfunc() #0 {
entry:
ret i32 1

View File

@ -28,7 +28,6 @@ entry:
call void (...) @setfuncptr()
call void (...) @callfuncptr()
call void (...) @weakfunc()
call void (...) @linkoncefunc2()
call void (...) @referencelargelinkonce()
ret i32 0
}
@ -95,10 +94,6 @@ declare void @referencelargelinkonce(...)
; CHECK-DAG: declare void @weakfunc(...)
declare void @weakfunc(...) #1
; Won't import linkonce func
; CHECK-DAG: declare void @linkoncefunc2(...)
declare void @linkoncefunc2(...) #1
; INSTLIMDEF-DAG: Import funcwithpersonality
; INSTLIMDEF-DAG: define available_externally hidden void @funcwithpersonality.llvm.{{.*}}() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
; INSTLIM5-DAG: declare hidden void @funcwithpersonality.llvm.{{.*}}()