From cffb5e953904cc662e538aaac3e465363b192c2c Mon Sep 17 00:00:00 2001 From: xushiwei Date: Mon, 6 May 2024 16:40:52 +0800 Subject: [PATCH] closureStub: SetTailCall --- cl/_testrt/callback/out.ll | 2 +- cl/_testrt/closure/out.ll | 2 +- cl/_testrt/intgen/out.ll | 2 +- ssa/package.go | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cl/_testrt/callback/out.ll b/cl/_testrt/callback/out.ll index ae9e2a94..ec2be34b 100644 --- a/cl/_testrt/callback/out.ll +++ b/cl/_testrt/callback/out.ll @@ -57,7 +57,7 @@ declare void @"github.com/goplus/llgo/internal/runtime.init"() define linkonce void @__llgo_stub.main.print(ptr %0, ptr %1) { _llgo_0: - call void @main.print(ptr %1) + tail call void @main.print(ptr %1) ret void } diff --git a/cl/_testrt/closure/out.ll b/cl/_testrt/closure/out.ll index e4024527..f3bf7842 100644 --- a/cl/_testrt/closure/out.ll +++ b/cl/_testrt/closure/out.ll @@ -56,7 +56,7 @@ _llgo_0: define linkonce void @"__llgo_stub.main.main$1"(ptr %0, i64 %1, i64 %2) { _llgo_0: - call void @"main.main$1"(i64 %1, i64 %2) + tail call void @"main.main$1"(i64 %1, i64 %2) ret void } diff --git a/cl/_testrt/intgen/out.ll b/cl/_testrt/intgen/out.ll index d12316e5..ac5171bf 100644 --- a/cl/_testrt/intgen/out.ll +++ b/cl/_testrt/intgen/out.ll @@ -165,7 +165,7 @@ declare i32 @rand() define linkonce i32 @__llgo_stub.rand(ptr %0) { _llgo_0: - %1 = call i32 @rand() + %1 = tail call i32 @rand() ret i32 %1 } diff --git a/ssa/package.go b/ssa/package.go index 6065e83a..ff5031a5 100644 --- a/ssa/package.go +++ b/ssa/package.go @@ -388,6 +388,7 @@ func (p Package) closureStub(b Builder, t *types.Struct, v Expr) Expr { } b := fn.MakeBody(1) call := b.Call(v, args...) + call.impl.SetTailCall(true) switch nret { case 0: b.impl.CreateRetVoid()