From 1e075d4830bc2999def728f616dd13b2cc5c6247 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Mon, 6 May 2024 16:11:14 +0800 Subject: [PATCH] closure --- cl/_testrt/closure/out.ll | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/cl/_testrt/closure/out.ll b/cl/_testrt/closure/out.ll index 173c914a..e4024527 100644 --- a/cl/_testrt/closure/out.ll +++ b/cl/_testrt/closure/out.ll @@ -22,19 +22,25 @@ _llgo_0: call void @"github.com/goplus/llgo/internal/runtime.init"() call void @main.init() %0 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 16) - store ptr @"main.main$1", ptr %0, align 8 - %1 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 8) - %2 = getelementptr inbounds { ptr }, ptr %1, i32 0, i32 0 - store ptr %0, ptr %2, align 8 - %3 = alloca { ptr, ptr }, align 8 - %4 = getelementptr inbounds { ptr, ptr }, ptr %3, i32 0, i32 0 - store ptr @"main.main$2", ptr %4, align 8 - %5 = getelementptr inbounds { ptr, ptr }, ptr %3, i32 0, i32 1 - store ptr %1, ptr %5, align 8 - %6 = load { ptr, ptr }, ptr %3, align 8 - %7 = extractvalue { ptr, ptr } %6, 1 - %8 = extractvalue { ptr, ptr } %6, 0 - call void %8(ptr %7) + %1 = alloca { ptr, ptr }, align 8 + %2 = getelementptr inbounds { ptr, ptr }, ptr %1, i32 0, i32 0 + store ptr @"__llgo_stub.main.main$1", ptr %2, align 8 + %3 = getelementptr inbounds { ptr, ptr }, ptr %1, i32 0, i32 1 + store ptr null, ptr %3, align 8 + %4 = load { ptr, ptr }, ptr %1, align 8 + store { ptr, ptr } %4, ptr %0, align 8 + %5 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 8) + %6 = getelementptr inbounds { ptr }, ptr %5, i32 0, i32 0 + store ptr %0, ptr %6, align 8 + %7 = alloca { ptr, ptr }, align 8 + %8 = getelementptr inbounds { ptr, ptr }, ptr %7, i32 0, i32 0 + store ptr @"main.main$2", ptr %8, align 8 + %9 = getelementptr inbounds { ptr, ptr }, ptr %7, i32 0, i32 1 + store ptr %5, ptr %9, align 8 + %10 = load { ptr, ptr }, ptr %7, align 8 + %11 = extractvalue { ptr, ptr } %10, 1 + %12 = extractvalue { ptr, ptr } %10, 0 + call void %12(ptr %11) ret void } @@ -48,6 +54,12 @@ _llgo_0: ret void } +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) + ret void +} + define void @"main.main$2"(ptr %0) { _llgo_0: %1 = load { ptr }, ptr %0, align 8