diff --git a/bin/verilator b/bin/verilator
index 62970eadd..730148ed8 100755
--- a/bin/verilator
+++ b/bin/verilator
@@ -408,6 +408,8 @@ detailed descriptions of these arguments.
-I
Directory to search for includes
--if-depth Tune IFDEPTH warning
+incdir+ Directory to search for includes
+ --inline-cfuncs Inline CFuncs with <=value nodes (0=off)
+ --inline-cfuncs-product Inline CFuncs if size*calls <= value
--inline-mult Tune module inlining
--instr-count-dpi Assumed dynamic instruction count of DPI imports
-j Parallelism for --build-jobs/--verilate-jobs
diff --git a/docs/CONTRIBUTORS b/docs/CONTRIBUTORS
index 1db8feecd..2ca03eddd 100644
--- a/docs/CONTRIBUTORS
+++ b/docs/CONTRIBUTORS
@@ -125,6 +125,7 @@ John Wehle
Jonathan Drolet
Jonathan Schröter
Jordan McConnon
+Jose Drowne
Jose Loyola
Josep Sans
Joseph Nwabueze
diff --git a/docs/guide/exe_verilator.rst b/docs/guide/exe_verilator.rst
index 1e94aedae..11add271f 100644
--- a/docs/guide/exe_verilator.rst
+++ b/docs/guide/exe_verilator.rst
@@ -867,6 +867,29 @@ Summary:
compatibility and is not recommended usage as this is not supported by
some third-party tools.
+.. option:: --inline-cfuncs
+
+ Inline small CFunc calls directly into their callers when the function
+ has at most nodes. This reduces function call overhead when
+ :vlopt:`--output-split-cfuncs` places functions in separate compilation
+ units that the C++ compiler cannot inline.
+
+ Set to 0 to disable this optimization. The default is 20.
+
+ This optimization is automatically disabled when :vlopt:`--prof-cfuncs`
+ or :vlopt:`--trace` is used.
+
+.. option:: --inline-cfuncs-product
+
+ Tune the inlining of CFunc calls for larger functions. When a function
+ is too large to always inline (exceeds :vlopt:`--inline-cfuncs` threshold),
+ it may still be inlined if the function size multiplied by the number of
+ call sites is at most .
+
+ This allows functions that are called only once or twice to be inlined
+ even if they exceed the small function threshold. Set to 0 to only inline
+ functions below the :vlopt:`--inline-cfuncs` threshold. The default is 200.
+
.. option:: --inline-mult
Tune the inlining of modules. The default value of 2000 specifies that
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a08cb45c2..487980e40 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -114,6 +114,7 @@ set(HEADERS
V3Hasher.h
V3HierBlock.h
V3Inline.h
+ V3InlineCFuncs.h
V3Inst.h
V3InstrCount.h
V3Interface.h
@@ -287,6 +288,7 @@ set(COMMON_SOURCES
V3Hasher.cpp
V3HierBlock.cpp
V3Inline.cpp
+ V3InlineCFuncs.cpp
V3Inst.cpp
V3InstrCount.cpp
V3Interface.cpp
diff --git a/src/Makefile_obj.in b/src/Makefile_obj.in
index 74696c1b1..1bc6cc3af 100644
--- a/src/Makefile_obj.in
+++ b/src/Makefile_obj.in
@@ -284,6 +284,7 @@ RAW_OBJS_PCH_ASTNOMT = \
V3Gate.o \
V3HierBlock.o \
V3Inline.o \
+ V3InlineCFuncs.o \
V3Inst.o \
V3InstrCount.o \
V3Interface.o \
diff --git a/src/V3InlineCFuncs.cpp b/src/V3InlineCFuncs.cpp
new file mode 100644
index 000000000..95927d19e
--- /dev/null
+++ b/src/V3InlineCFuncs.cpp
@@ -0,0 +1,269 @@
+// -*- mode: C++; c-file-style: "cc-mode" -*-
+//*************************************************************************
+// DESCRIPTION: Verilator: Inline small CFuncs into their callers
+//
+// Code available from: https://verilator.org
+//
+//*************************************************************************
+//
+// Copyright 2003-2025 by Wilson Snyder. This program is free software; you
+// can redistribute it and/or modify it under the terms of either the GNU
+// Lesser General Public License Version 3 or the Perl Artistic License
+// Version 2.0.
+// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
+//
+//*************************************************************************
+// V3InlineCFuncs's Transformations:
+//
+// For each CCall to a small CFunc:
+// - Check if function is eligible for inlining (small enough, same scope)
+// - Clone local variables with unique names to avoid collisions
+// - Replace CCall with cloned function body statements
+//
+// Two tunables control inlining:
+// --inline-cfuncs : Always inline if size <= n (default 20)
+// --inline-cfuncs-product : Also inline if size * call_count <= n (default 200)
+//
+//*************************************************************************
+
+#include "V3PchAstNoMT.h" // VL_MT_DISABLED_CODE_UNIT
+
+#include "V3InlineCFuncs.h"
+
+#include "V3AstUserAllocator.h"
+#include "V3Stats.h"
+
+#include