diff options
| author | Ivan Krasin <krasin@chromium.org> | 2016-08-11 19:09:02 +0000 |
|---|---|---|
| committer | Ivan Krasin <krasin@chromium.org> | 2016-08-11 19:09:02 +0000 |
| commit | f3403fd2c84f05b1219bc6a7badf062a3b7541ef (patch) | |
| tree | f2e84aeb66b12bc703c454bd8dc87298e2518e2d /llvm/test | |
| parent | 82b16766e65a211f4e93dd973aff4b343fa158db (diff) | |
| download | bcm5719-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')
3 files changed, 30 insertions, 23 deletions
diff --git a/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl-check.ll b/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl-check.ll index e5e64ab05a2..f4ef8824e2e 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl-check.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl-check.ll @@ -3,8 +3,9 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -; CHECK: remark: <unknown>:0:0: devirtualized call -; CHECK-NOT: devirtualized call +; CHECK: remark: <unknown>:0:0: single-impl: devirtualized a call to vf +; CHECK: remark: <unknown>:0: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 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"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-check.ll b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-check.ll index 66db3576cb4..fcf00d6d86c 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-check.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-check.ll @@ -3,22 +3,16 @@ 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: virtual-const-prop: devirtualized a call to vf1i32 +; CHECK: remark: <unknown>:0:0: virtual-const-prop-1-bit: devirtualized a call to vf1i1 +; CHECK: remark: <unknown>:0:0: virtual-const-prop-1-bit: devirtualized a call to vf0i1 +; CHECK: remark: <unknown>:0:0: devirtualized vf0i1 +; CHECK: remark: <unknown>:0:0: devirtualized vf1i1 ; CHECK: remark: <unknown>:0:0: devirtualized vf1i32 ; CHECK: remark: <unknown>:0:0: devirtualized vf2i32 ; CHECK: remark: <unknown>:0:0: devirtualized vf3i32 ; CHECK: remark: <unknown>:0:0: devirtualized vf4i32 -; CHECK: remark: <unknown>:0:0: devirtualized call -; CHECK: remark: <unknown>:0:0: devirtualized vf1i1 -; CHECK: remark: <unknown>:0:0: devirtualized vf0i1 -; CHECK: remark: <unknown>:0:0: devirtualized vf1i1 -; CHECK: remark: <unknown>:0:0: devirtualized vf0i1 -; CHECK: remark: <unknown>:0:0: devirtualized call -; CHECK: remark: <unknown>:0:0: devirtualized vf0i1 -; CHECK: remark: <unknown>:0:0: devirtualized vf1i1 -; CHECK: remark: <unknown>:0:0: devirtualized vf0i1 -; CHECK: remark: <unknown>:0:0: devirtualized vf1i1 -; CHECK-NOT: devirtualized call +; CHECK-NOT: devirtualized ; CHECK: [[VT1DATA:@[^ ]*]] = private constant { [8 x i8], [3 x i8*], [0 x i8] } { [8 x i8] c"\00\00\00\01\01\00\00\00", [3 x i8*] [i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i32 (i8*)* @vf1i32 to i8*)], [0 x i8] zeroinitializer }, section "vt1sec", !type [[T8:![0-9]+]] @vt1 = constant [3 x i8*] [ |

