[llvm] fabf1de - [FuncSpec] Add a reference, and some other clarifying comments. NFC.
Sjoerd Meijer via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 20 09:01:25 PST 2022
Author: Sjoerd Meijer
Date: 2022-01-20T17:01:08Z
New Revision: fabf1de13202030151899786c21d624b96605ca3
URL: https://github.com/llvm/llvm-project/commit/fabf1de13202030151899786c21d624b96605ca3
DIFF: https://github.com/llvm/llvm-project/commit/fabf1de13202030151899786c21d624b96605ca3.diff
LOG: [FuncSpec] Add a reference, and some other clarifying comments. NFC.
Added:
Modified:
llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
index 2425646455bd9..6c3cc39143372 100644
--- a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
+++ b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
@@ -6,15 +6,24 @@
//
//===----------------------------------------------------------------------===//
//
-// This specialises functions with constant parameters (e.g. functions,
-// globals). Constant parameters like function pointers and constant globals
-// are propagated to the callee by specializing the function.
+// This specialises functions with constant parameters. Constant parameters
+// like function pointers and constant globals are propagated to the callee by
+// specializing the function. The main benefit of this pass at the moment is
+// that indirect calls are transformed into direct calls, which provides inline
+// opportunities that the inliner would not have been able to achieve. That's
+// why function specialisation is run before the inliner in the optimisation
+// pipeline; that is by design. Otherwise, we would only benefit from constant
+// passing, which is a valid use-case too, but hasn't been explored much in
+// terms of performance uplifts, cost-model and compile-time impact.
//
// Current limitations:
-// - It does not yet handle integer ranges.
+// - It does not yet handle integer ranges. We do support "literal constants",
+// but that's off by default under an option.
// - Only 1 argument per function is specialised,
-// - The cost-model could be further looked into,
-// - We are not yet caching analysis results.
+// - The cost-model could be further looked into (it mainly focuses on inlining
+// benefits),
+// - We are not yet caching analysis results, but profiling and checking where
+// extra compile time is spent didn't suggest this to be a problem.
//
// Ideas:
// - With a function specialization attribute for arguments, we could have
@@ -30,8 +39,12 @@
// https://reviews.llvm.org/D106426 for details. Perhaps there is a
// compile-time friendlier way to control/limit the number of specialisations
// for recursive functions.
-// - Don't transform the function if there is no function specialization
-// happens.
+// - Don't transform the function if function specialization does not trigger;
+// the SCCPSolver may make IR changes.
+//
+// References:
+// - 2021 LLVM Dev Mtg “Introducing function specialisation, and can we enable
+// it by default?”, https://www.youtube.com/watch?v=zJiCjeXgV5Q
//
//===----------------------------------------------------------------------===//
More information about the llvm-commits
mailing list