[PATCH] D131816: [InstrProf] Add option to avoid instrumenting small functions

Ellis Hoag via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 17 06:45:43 PDT 2022


ellis updated this revision to Diff 453273.
ellis added a comment.

Resolve comments


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D131816/new/

https://reviews.llvm.org/D131816

Files:
  llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
  llvm/test/Transforms/PGOProfile/function_size_threshold.ll


Index: llvm/test/Transforms/PGOProfile/function_size_threshold.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/PGOProfile/function_size_threshold.ll
@@ -0,0 +1,29 @@
+; RUN: opt < %s -passes=pgo-instr-gen -S | FileCheck %s --implicit-check-not='llvm.instrprof.' --check-prefixes=CHECK,ALL
+; RUN: opt < %s -passes=pgo-instr-gen -pgo-function-size-threshold=2 -S | FileCheck %s --implicit-check-not='llvm.instrprof.' --check-prefixes=CHECK,ALL
+; RUN: opt < %s -passes=pgo-instr-gen -pgo-function-size-threshold=3 -S | FileCheck %s --implicit-check-not='llvm.instrprof.'
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+; CHECK-LABEL: define i32 @small(
+define i32 @small(i32 %i) {
+  ; ALL: call void @llvm.instrprof.increment({{.*}})
+  %add = add i32 %i, 4
+  ret i32 %add
+}
+
+; CHECK-LABEL: define i32 @large(
+define i32 @large(i32 %0) {
+  ; CHECK: call void @llvm.instrprof.increment({{.*}})
+  %2 = shl nsw i32 %0, 3
+  %3 = or i32 %2, 4
+  %4 = mul i32 %3, %0
+  %5 = or i32 %4, 3
+  %6 = sdiv i32 2, %0
+  %7 = add nsw i32 %5, %6
+  %8 = mul nsw i32 %0, %0
+  %9 = udiv i32 5, %8
+  %10 = add nsw i32 %7, %9
+  ret i32 %10
+}
+
+; CHECK: declare void @llvm.instrprof.increment({{.*}})
Index: llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
===================================================================
--- llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
+++ llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
@@ -292,6 +292,10 @@
     cl::value_desc("function name"),
     cl::desc("Trace the hash of the function with this name."));
 
+static cl::opt<unsigned> PGOFunctionSizeThreshold(
+    "pgo-function-size-threshold", cl::Hidden,
+    cl::desc("Do not instrument functions smaller than this threshold"));
+
 namespace llvm {
 // Command line option to turn on CFG dot dump after profile annotation.
 // Defined in Analysis/BlockFrequencyInfo.cpp:  -pgo-view-counts
@@ -1576,6 +1580,8 @@
       continue;
     if (F.hasFnAttribute(llvm::Attribute::SkipProfile))
       continue;
+    if (F.getInstructionCount() < PGOFunctionSizeThreshold)
+      continue;
     auto &TLI = LookupTLI(F);
     auto *BPI = LookupBPI(F);
     auto *BFI = LookupBFI(F);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D131816.453273.patch
Type: text/x-patch
Size: 2357 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220817/b99aab78/attachment.bin>


More information about the llvm-commits mailing list