diff options
| author | Alexander Musman <alexander.musman@gmail.com> | 2025-02-17 23:27:38 +0300 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2025-03-11 14:18:43 -0700 |
| commit | 6c70f2b960b39e37a6534948d32c02735afcd774 (patch) | |
| tree | 2597ca457ed77dc8674ed9b55a5cc3387082a0a3 /src/cmd/compile/internal/noder/reader.go | |
| parent | c18ff21cc897e9b675310c62045e88e4ba1d50bb (diff) | |
| download | go-6c70f2b960b39e37a6534948d32c02735afcd774.tar.xz | |
cmd/compile: Enable inlining of tail calls
Enable inlining tail calls and do not limit emitting tail calls only to the
non-inlineable methods when generating wrappers. This change produces
additional code size reduction.
Code size difference measured with this change (tried for x86_64):
etcd binary:
.text section size: 10613393 -> 10593841 (0.18%)
total binary size: 33450787 -> 33424307 (0.07%)
compile binary:
.text section size: 10171025 -> 10126545 (0.43%)
total binary size: 28241012 -> 28192628 (0.17%)
cockroach binary:
.text section size: 83947260 -> 83694140 (0.3%)
total binary size: 263799808 -> 263534160 (0.1%)
Change-Id: I694f83cb838e64bd4c51f05b7b9f2bf0193bb551
Reviewed-on: https://go-review.googlesource.com/c/go/+/650455
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Auto-Submit: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/noder/reader.go')
| -rw-r--r-- | src/cmd/compile/internal/noder/reader.go | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index eca66487fa..0f08bce10f 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -3983,12 +3983,11 @@ func addTailCall(pos src.XPos, fn *ir.Func, recv ir.Node, method *types.Field) { if recv.Type() != nil && recv.Type().IsPtr() && method.Type.Recv().Type.IsPtr() && method.Embedded != 0 && !types.IsInterfaceMethod(method.Type) && - !unifiedHaveInlineBody(ir.MethodExprName(dot).Func) && !(base.Ctxt.Arch.Name == "ppc64le" && base.Ctxt.Flag_dynlink) { if base.Debug.TailCall != 0 { base.WarnfAt(fn.Nname.Type().Recv().Type.Elem().Pos(), "tail call emitted for the method %v wrapper", method.Nname) } - // Prefer OTAILCALL to reduce code size (except the case when the called method can be inlined). + // Prefer OTAILCALL to reduce code size (the called method can be inlined). fn.Body.Append(ir.NewTailCallStmt(pos, call)) return } |
