[llvm] r357484 - [SampleProfile] Repeat indirect call promotion only when the target is actually hot.

Taewook Oh via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 2 08:48:21 PDT 2019


Author: twoh
Date: Tue Apr  2 08:48:21 2019
New Revision: 357484

URL: http://llvm.org/viewvc/llvm-project?rev=357484&view=rev
Log:
[SampleProfile] Repeat indirect call promotion only when the target is actually hot.

Summary: It is possible that multiple indirect call targets have been promoted for a single callsite from the profiled binary. Current implementation repeats promotion for all these targets as far as the callsite itself is hot (the callsite is assumed to be hot if any one of these targets was "hot" during the profiling). However, even when one of the ICPed target is hot other targets may not, and we should not repeat promotion for "cold" targets.

Reviewers: danielcdh, wmi

Subscribers: hiraditya, jdoerfert, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D59940

Added:
    llvm/trunk/test/Transforms/SampleProfile/Inputs/cold-indirect-call.prof
    llvm/trunk/test/Transforms/SampleProfile/cold-indirect-call.ll
Modified:
    llvm/trunk/lib/Transforms/IPO/SampleProfile.cpp

Modified: llvm/trunk/lib/Transforms/IPO/SampleProfile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/SampleProfile.cpp?rev=357484&r1=357483&r2=357484&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/SampleProfile.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/SampleProfile.cpp Tue Apr  2 08:48:21 2019
@@ -834,6 +834,9 @@ bool SampleProfileLoader::inlineHotFunct
           if (CalleeFunctionName == F.getName())
             continue;
 
+          if (!callsiteIsHot(FS, PSI))
+            continue;
+
           const char *Reason = "Callee function not available";
           auto R = SymbolMap.find(CalleeFunctionName);
           if (R != SymbolMap.end() && R->getValue() &&

Added: llvm/trunk/test/Transforms/SampleProfile/Inputs/cold-indirect-call.prof
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SampleProfile/Inputs/cold-indirect-call.prof?rev=357484&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/SampleProfile/Inputs/cold-indirect-call.prof (added)
+++ llvm/trunk/test/Transforms/SampleProfile/Inputs/cold-indirect-call.prof Tue Apr  2 08:48:21 2019
@@ -0,0 +1,6 @@
+foo:5000:1
+ 1: 2000 quz:1000
+ 1: bar:3000
+   1: 3000
+ 1: baz:0
+   1: 0

Added: llvm/trunk/test/Transforms/SampleProfile/cold-indirect-call.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SampleProfile/cold-indirect-call.ll?rev=357484&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/SampleProfile/cold-indirect-call.ll (added)
+++ llvm/trunk/test/Transforms/SampleProfile/cold-indirect-call.ll Tue Apr  2 08:48:21 2019
@@ -0,0 +1,31 @@
+; RUN: opt < %s -sample-profile -sample-profile-file=%S/Inputs/cold-indirect-call.prof -S | FileCheck %s
+; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/cold-indirect-call.prof -S | FileCheck %s
+
+define i32 @foo(i32 ()* %func) !dbg !3 {
+; CHECK: icmp {{.*}} @bar
+; CHECK-NOT: icmp {{.*}} @baz
+  %call = call i32 %func(), !dbg !4
+  ret i32 %call
+}
+
+define i32 @bar() !dbg !5 {
+  ret i32 41, !dbg !6
+}
+
+define i32 @baz() !dbg !7 {
+  ret i32 42, !dbg !8
+}
+
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!2}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1)
+!1 = !DIFile(filename: "foo.cc", directory: "/")
+!2 = !{i32 2, !"Debug Info Version", i32 3}
+!3 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, unit: !0)
+!4 = !DILocation(line: 5, scope: !3)
+!5 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 8, unit: !0)
+!6 = !DILocation(line: 9, scope: !5)
+!7 = distinct !DISubprogram(name: "baz", scope: !1, file: !1, line: 12, unit: !0)
+!8 = !DILocation(line: 13, scope: !7)




More information about the llvm-commits mailing list