summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll
diff options
context:
space:
mode:
authorIvan Krasin <krasin@chromium.org>2016-08-11 19:09:02 +0000
committerIvan Krasin <krasin@chromium.org>2016-08-11 19:09:02 +0000
commitf3403fd2c84f05b1219bc6a7badf062a3b7541ef (patch)
treef2e84aeb66b12bc703c454bd8dc87298e2518e2d /llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll
parent82b16766e65a211f4e93dd973aff4b343fa158db (diff)
downloadbcm5719-llvm-f3403fd2c84f05b1219bc6a7badf062a3b7541ef.tar.gz
bcm5719-llvm-f3403fd2c84f05b1219bc6a7badf062a3b7541ef.zip
WholeProgramDevirt: generate more detailed and accurate remarks.
Summary: Keep track of all methods for which we have devirtualized at least one call and then print them sorted alphabetically. That allows to avoid duplicates and also makes the order deterministic. Add optimization names into the remarks, so that it's easier to understand how has each method been devirtualized. Fix a bug when wrong methods could have been reported for tryVirtualConstProp. Reviewers: kcc, mehdi_amini Differential Revision: https://reviews.llvm.org/D23297 llvm-svn: 278389
Diffstat (limited to 'llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll')
-rw-r--r--llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll30
1 files changed, 21 insertions, 9 deletions
diff --git a/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll b/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll
index ea5247ab636..9f631e94cf5 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll
@@ -3,19 +3,19 @@
target datalayout = "e-p:64:64"
target triple = "x86_64-unknown-linux-gnu"
-; CHECK: remark: <unknown>:0:0: devirtualized call
-; CHECK: remark: <unknown>:0:0: devirtualized vf
-; CHECK: remark: <unknown>:0:0: devirtualized vf
+; CHECK: remark: devirt-single.cc:30:32: single-impl: devirtualized a call to vf
+; CHECK: remark: devirt-single.cc:13:0: devirtualized vf
+; CHECK-NOT: devirtualized
-@vt1 = constant [1 x i8*] [i8* bitcast (void (i8*)* @vf to i8*)], !type !0
-@vt2 = constant [1 x i8*] [i8* bitcast (void (i8*)* @vf to i8*)], !type !0
+@vt1 = constant [1 x i8*] [i8* bitcast (void (i8*)* @vf to i8*)], !type !8
+@vt2 = constant [1 x i8*] [i8* bitcast (void (i8*)* @vf to i8*)], !type !8
-define void @vf(i8* %this) {
+define void @vf(i8* %this) #0 !dbg !7 {
ret void
}
; CHECK: define void @call
-define void @call(i8* %obj) {
+define void @call(i8* %obj) #1 !dbg !5 {
%vtableptr = bitcast i8* %obj to [1 x i8*]**
%vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr
%vtablei8 = bitcast [1 x i8*]* %vtable to i8*
@@ -25,11 +25,23 @@ define void @call(i8* %obj) {
%fptr = load i8*, i8** %fptrptr
%fptr_casted = bitcast i8* %fptr to void (i8*)*
; CHECK: call void @vf(
- call void %fptr_casted(i8* %obj)
+ call void %fptr_casted(i8* %obj), !dbg !6
ret void
}
declare i1 @llvm.type.test(i8*, metadata)
declare void @llvm.assume(i1)
-!0 = !{i32 0, !"typeid"}
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!2, !3}
+!llvm.ident = !{!4}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 4.0.0 (trunk 278098)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
+!1 = !DIFile(filename: "devirt-single.cc", directory: ".")
+!2 = !{i32 2, !"Dwarf Version", i32 4}
+!3 = !{i32 2, !"Debug Info Version", i32 3}
+!4 = !{!"clang version 4.0.0 (trunk 278098)"}
+!5 = distinct !DISubprogram(name: "call", linkageName: "_Z4callPv", scope: !1, file: !1, line: 29, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!6 = !DILocation(line: 30, column: 32, scope: !5)
+!7 = distinct !DISubprogram(name: "vf", linkageName: "_ZN3vt12vfEv", scope: !1, file: !1, line: 13, isLocal: false, isDefinition: true, scopeLine: 13, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!8 = !{i32 0, !"typeid"}
OpenPOWER on IntegriCloud