summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2018-08-14 03:00:16 +0000
committerTeresa Johnson <tejohnson@google.com>2018-08-14 03:00:16 +0000
commitb0a1d3bdf1d0124c555231a518cb6da769cceb05 (patch)
treea54475cc4e00a5f39f97d12e10ce714ff4129ebe
parentb7b342e2805a7d674ead0e5bf9ab7307e2ec12b3 (diff)
downloadbcm5719-llvm-b0a1d3bdf1d0124c555231a518cb6da769cceb05.tar.gz
bcm5719-llvm-b0a1d3bdf1d0124c555231a518cb6da769cceb05.zip
[ThinLTO] Fix printing of WPD remarks
Summary: When WPD is performed in a ThinLTO backend, the function may be created if it isn't already in that module. Module::getOrInsertFunction may add a bitcast, in which case the returned Constant is not a Function and doesn't have a name. Invoke stripPointerCasts() on the returned value where we access its name. Reviewers: pcc Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, llvm-commits Differential Revision: https://reviews.llvm.org/D49959 llvm-svn: 339640
-rw-r--r--llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp6
-rw-r--r--llvm/test/ThinLTO/X86/cfi-devirt.ll10
2 files changed, 10 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
index d65da2504db..2f75c6b6614 100644
--- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
+++ b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
@@ -755,7 +755,8 @@ void DevirtModule::applySingleImplDevirt(VTableSlotInfo &SlotInfo,
auto Apply = [&](CallSiteInfo &CSInfo) {
for (auto &&VCallSite : CSInfo.CallSites) {
if (RemarksEnabled)
- VCallSite.emitRemark("single-impl", TheFn->getName(), OREGetter);
+ VCallSite.emitRemark("single-impl",
+ TheFn->stripPointerCasts()->getName(), OREGetter);
VCallSite.CS.setCalledFunction(ConstantExpr::getBitCast(
TheFn, VCallSite.CS.getCalledValue()->getType()));
// This use is no longer unsafe.
@@ -891,7 +892,8 @@ void DevirtModule::applyICallBranchFunnel(VTableSlotInfo &SlotInfo,
continue;
if (RemarksEnabled)
- VCallSite.emitRemark("branch-funnel", JT->getName(), OREGetter);
+ VCallSite.emitRemark("branch-funnel",
+ JT->stripPointerCasts()->getName(), OREGetter);
// Pass the address of the vtable in the nest register, which is r10 on
// x86_64.
diff --git a/llvm/test/ThinLTO/X86/cfi-devirt.ll b/llvm/test/ThinLTO/X86/cfi-devirt.ll
index 40aeef1a0c1..e41ae6d15ec 100644
--- a/llvm/test/ThinLTO/X86/cfi-devirt.ll
+++ b/llvm/test/ThinLTO/X86/cfi-devirt.ll
@@ -5,7 +5,7 @@
; RUN: opt -thinlto-bc -o %t.o %s
; Legacy PM
-; RUN: llvm-lto2 run %t.o -save-temps \
+; RUN: llvm-lto2 run %t.o -save-temps -pass-remarks=. \
; RUN: -o %t3 \
; RUN: -r=%t.o,test,px \
; RUN: -r=%t.o,_ZN1A1nEi,p \
@@ -17,11 +17,11 @@
; RUN: -r=%t.o,_ZN1B1fEi, \
; RUN: -r=%t.o,_ZN1C1fEi, \
; RUN: -r=%t.o,_ZTV1B,px \
-; RUN: -r=%t.o,_ZTV1C,px
+; RUN: -r=%t.o,_ZTV1C,px 2>&1 | FileCheck %s --check-prefix=REMARK
; RUN: llvm-dis %t3.1.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
; New PM
-; RUN: llvm-lto2 run %t.o -save-temps -use-new-pm \
+; RUN: llvm-lto2 run %t.o -save-temps -use-new-pm -pass-remarks=. \
; RUN: -o %t3 \
; RUN: -r=%t.o,test,px \
; RUN: -r=%t.o,_ZN1A1nEi,p \
@@ -33,9 +33,11 @@
; RUN: -r=%t.o,_ZN1B1fEi, \
; RUN: -r=%t.o,_ZN1C1fEi, \
; RUN: -r=%t.o,_ZTV1B,px \
-; RUN: -r=%t.o,_ZTV1C,px
+; RUN: -r=%t.o,_ZTV1C,px 2>&1 | FileCheck %s --check-prefix=REMARK
; RUN: llvm-dis %t3.1.4.opt.bc -o - | FileCheck %s --check-prefix=CHECK-IR
+; REMARK: single-impl: devirtualized a call to _ZN1A1nEi
+
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-grtev4-linux-gnu"
OpenPOWER on IntegriCloud