Skip to content

Commit

Permalink
[LTO] Make detection of WPD remark enablement more robust
Browse files Browse the repository at this point in the history
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
  • Loading branch information
teresajohnson committed Sep 18, 2018
1 parent e7e14f4 commit 5e1c0e7
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 9 deletions.
17 changes: 8 additions & 9 deletions llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
Expand Up @@ -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,
Expand Down
6 changes: 6 additions & 0 deletions llvm/test/ThinLTO/X86/cfi-devirt.ll
Expand Up @@ -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, \
Expand All @@ -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, \
Expand All @@ -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:
Expand Down

0 comments on commit 5e1c0e7

Please sign in to comment.