[llvm] cfa6a59 - [ctxprof] Don't lower instrumentation for `noreturn` functions (#134932)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 8 14:48:48 PDT 2025
Author: Mircea Trofin
Date: 2025-04-08T14:48:41-07:00
New Revision: cfa6a5940e2dd29e88885028d77f8f357f3e773c
URL: https://github.com/llvm/llvm-project/commit/cfa6a5940e2dd29e88885028d77f8f357f3e773c
DIFF: https://github.com/llvm/llvm-project/commit/cfa6a5940e2dd29e88885028d77f8f357f3e773c.diff
LOG: [ctxprof] Don't lower instrumentation for `noreturn` functions (#134932)
`noreturn` functions are doubtfully interesting for performance optimization / profiling.
Added:
Modified:
llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp
llvm/test/Transforms/PGOProfile/ctx-instrumentation.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp b/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp
index 2f8d7766bb588..a314457423819 100644
--- a/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp
+++ b/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp
@@ -8,6 +8,7 @@
//
#include "llvm/Transforms/Instrumentation/PGOCtxProfLowering.h"
+#include "llvm/ADT/STLExtras.h"
#include "llvm/Analysis/CtxProfAnalysis.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/IR/Analysis.h"
@@ -206,6 +207,17 @@ PreservedAnalyses PGOCtxProfLoweringPass::run(Module &M,
bool CtxInstrumentationLowerer::lowerFunction(Function &F) {
if (F.isDeclaration())
return false;
+
+ // Probably pointless to try to do anything here, unlikely to be
+ // performance-affecting.
+ if (F.doesNotReturn()) {
+ for (auto &BB : F)
+ for (auto &I : make_early_inc_range(BB))
+ if (isa<InstrProfCntrInstBase>(&I))
+ I.eraseFromParent();
+ return true;
+ }
+
auto &FAM = MAM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager();
auto &ORE = FAM.getResult<OptimizationRemarkEmitterAnalysis>(F);
diff --git a/llvm/test/Transforms/PGOProfile/ctx-instrumentation.ll b/llvm/test/Transforms/PGOProfile/ctx-instrumentation.ll
index 75f292deb71c2..8f72711a9c8b1 100644
--- a/llvm/test/Transforms/PGOProfile/ctx-instrumentation.ll
+++ b/llvm/test/Transforms/PGOProfile/ctx-instrumentation.ll
@@ -310,11 +310,26 @@ define void @has_musttail_calls() {
musttail call void @bar()
ret void
}
+
+define void @does_not_return() noreturn {
+; INSTRUMENT-LABEL: define void @does_not_return(
+; INSTRUMENT-SAME: ) #[[ATTR0:[0-9]+]] {
+; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @does_not_return, i64 742261418966908927, i32 1, i32 0)
+; INSTRUMENT-NEXT: unreachable
+;
+; LOWERING-LABEL: define void @does_not_return(
+; LOWERING-SAME: ) #[[ATTR0:[0-9]+]] !guid [[META8:![0-9]+]] {
+; LOWERING-NEXT: unreachable
+;
+ unreachable
+}
;.
-; LOWERING: attributes #[[ATTR0:[0-9]+]] = { nounwind }
-; LOWERING: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
+; LOWERING: attributes #[[ATTR0]] = { noreturn }
+; LOWERING: attributes #[[ATTR1:[0-9]+]] = { nounwind }
+; LOWERING: attributes #[[ATTR2:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
;.
-; INSTRUMENT: attributes #[[ATTR0:[0-9]+]] = { nounwind }
+; INSTRUMENT: attributes #[[ATTR0]] = { noreturn }
+; INSTRUMENT: attributes #[[ATTR1:[0-9]+]] = { nounwind }
;.
; LOWERING: [[META0]] = !{i64 6699318081062747564}
; LOWERING: [[META1]] = !{i64 4909520559318251808}
@@ -324,4 +339,5 @@ define void @has_musttail_calls() {
; LOWERING: [[META5]] = !{i64 5458232184388660970}
; LOWERING: [[META6]] = !{i64 -3771893999295659109}
; LOWERING: [[META7]] = !{i64 -4680624981836544329}
+; LOWERING: [[META8]] = !{i64 5519225910966780583}
;.
More information about the llvm-commits
mailing list