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
19 lines
522 B
LLVM
19 lines
522 B
LLVM
; RUN: opt -module-summary %s -o %t1.bc
|
|
; RUN: opt -module-summary -o %t2.bc %S/Inputs/not-prevailing.ll
|
|
; RUN: not llvm-lto2 run -o %t3.bc %t1.bc %t2.bc -r %t1.bc,bar,px \
|
|
; RUN: -r %t1.bc,foo,x -r %t2.bc,foo,x -save-temps 2>&1 | FileCheck %s
|
|
|
|
; CHECK: Interposable and available_externally symbol
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
define available_externally i32 @foo() {
|
|
ret i32 1
|
|
}
|
|
|
|
define i32 @bar() {
|
|
%1 = call i32 @foo()
|
|
ret i32 %1
|
|
}
|