mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[LTO] Make detection of WPD remark enablement more robust
Summary: Currently only the first function in the module is checked to see if it has remarks enabled. If that first function is a declaration, remarks will be incorrectly skipped. Change to look for the first non-empty function. Reviewers: pcc Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, llvm-commits Differential Revision: https://reviews.llvm.org/D51556 llvm-svn: 342477
This commit is contained in:
parent
442e076ce3
commit
a59795bace
@ -1325,15 +1325,14 @@ void DevirtModule::rebuildGlobal(VTableBits &B) {
|
||||
|
||||
bool DevirtModule::areRemarksEnabled() {
|
||||
const auto &FL = M.getFunctionList();
|
||||
if (FL.empty())
|
||||
return false;
|
||||
const Function &Fn = FL.front();
|
||||
|
||||
const auto &BBL = Fn.getBasicBlockList();
|
||||
if (BBL.empty())
|
||||
return false;
|
||||
auto DI = OptimizationRemark(DEBUG_TYPE, "", DebugLoc(), &BBL.front());
|
||||
return DI.isEnabled();
|
||||
for (const Function &Fn : FL) {
|
||||
const auto &BBL = Fn.getBasicBlockList();
|
||||
if (BBL.empty())
|
||||
continue;
|
||||
auto DI = OptimizationRemark(DEBUG_TYPE, "", DebugLoc(), &BBL.front());
|
||||
return DI.isEnabled();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void DevirtModule::scanTypeTestUsers(Function *TypeTestFunc,
|
||||
|
@ -11,6 +11,7 @@
|
||||
; RUN: -r=%t.o,_ZN1A1nEi,p \
|
||||
; RUN: -r=%t.o,_ZN1B1fEi,p \
|
||||
; RUN: -r=%t.o,_ZN1C1fEi,p \
|
||||
; RUN: -r=%t.o,empty,p \
|
||||
; RUN: -r=%t.o,_ZTV1B, \
|
||||
; RUN: -r=%t.o,_ZTV1C, \
|
||||
; RUN: -r=%t.o,_ZN1A1nEi, \
|
||||
@ -27,6 +28,7 @@
|
||||
; RUN: -r=%t.o,_ZN1A1nEi,p \
|
||||
; RUN: -r=%t.o,_ZN1B1fEi,p \
|
||||
; RUN: -r=%t.o,_ZN1C1fEi,p \
|
||||
; RUN: -r=%t.o,empty,p \
|
||||
; RUN: -r=%t.o,_ZTV1B, \
|
||||
; RUN: -r=%t.o,_ZTV1C, \
|
||||
; RUN: -r=%t.o,_ZN1A1nEi, \
|
||||
@ -48,6 +50,10 @@ target triple = "x86_64-grtev4-linux-gnu"
|
||||
@_ZTV1B = constant { [4 x i8*] } { [4 x i8*] [i8* null, i8* undef, i8* bitcast (i32 (%struct.B*, i32)* @_ZN1B1fEi to i8*), i8* bitcast (i32 (%struct.A*, i32)* @_ZN1A1nEi to i8*)] }, !type !0, !type !1
|
||||
@_ZTV1C = constant { [4 x i8*] } { [4 x i8*] [i8* null, i8* undef, i8* bitcast (i32 (%struct.C*, i32)* @_ZN1C1fEi to i8*), i8* bitcast (i32 (%struct.A*, i32)* @_ZN1A1nEi to i8*)] }, !type !0, !type !2
|
||||
|
||||
; Put declaration first to test handling of remarks when the first
|
||||
; function has no basic blocks.
|
||||
declare void @empty()
|
||||
|
||||
; CHECK-IR-LABEL: define i32 @test
|
||||
define i32 @test(%struct.A* %obj, i32 %a) {
|
||||
entry:
|
||||
|
Loading…
Reference in New Issue
Block a user