From 5416e92dbf51f7645299120edd93fd179c439fcf Mon Sep 17 00:00:00 2001 From: xushiwei Date: Sun, 16 Jun 2024 16:39:55 +0800 Subject: [PATCH] atomic demo --- cl/_testlibc/atomic/in.go | 2 +- cl/_testlibc/atomic/out.ll | 39 +++++++++++--------------------------- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/cl/_testlibc/atomic/in.go b/cl/_testlibc/atomic/in.go index eebc7a3f..ed847a2d 100644 --- a/cl/_testlibc/atomic/in.go +++ b/cl/_testlibc/atomic/in.go @@ -9,7 +9,7 @@ func main() { var v int64 atomic.Store(&v, 100) - println("store:", atomic.Load(&v)) + c.Printf(c.Str("store: %ld\n"), atomic.Load(&v)) atomic.Add(&v, 1) c.Printf(c.Str("v: %ld\n"), v) diff --git a/cl/_testlibc/atomic/out.ll b/cl/_testlibc/atomic/out.ll index 93f07288..80b97edd 100644 --- a/cl/_testlibc/atomic/out.ll +++ b/cl/_testlibc/atomic/out.ll @@ -1,12 +1,10 @@ ; ModuleID = 'main' source_filename = "main" -%"github.com/goplus/llgo/internal/runtime.String" = type { ptr, i64 } - @"main.init$guard" = global i1 false, align 1 @__llgo_argc = global i32 0, align 4 @__llgo_argv = global ptr null, align 8 -@0 = private unnamed_addr constant [6 x i8] c"store:", align 1 +@0 = private unnamed_addr constant [12 x i8] c"store: %ld\0A\00", align 1 @1 = private unnamed_addr constant [8 x i8] c"v: %ld\0A\00", align 1 @2 = private unnamed_addr constant [8 x i8] c"v: %ld\0A\00", align 1 @3 = private unnamed_addr constant [8 x i8] c"v: %ld\0A\00", align 1 @@ -34,28 +32,19 @@ _llgo_0: %2 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 8) store atomic i64 100, ptr %2 seq_cst, align 4 %3 = load atomic i64, ptr %2 seq_cst, align 4 - %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 - store ptr @0, ptr %5, align 8 - %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 - store i64 6, ptr %6, align 4 - %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %7) - call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %3) - call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) - %8 = atomicrmw add ptr %2, i64 1 seq_cst, align 8 + %4 = call i32 (ptr, ...) @printf(ptr @0, i64 %3) + %5 = atomicrmw add ptr %2, i64 1 seq_cst, align 8 + %6 = load i64, ptr %2, align 4 + %7 = call i32 (ptr, ...) @printf(ptr @1, i64 %6) + %8 = cmpxchg ptr %2, i64 100, i64 102 seq_cst seq_cst, align 8 %9 = load i64, ptr %2, align 4 - %10 = call i32 (ptr, ...) @printf(ptr @1, i64 %9) - %11 = cmpxchg ptr %2, i64 100, i64 102 seq_cst seq_cst, align 8 + %10 = call i32 (ptr, ...) @printf(ptr @2, i64 %9) + %11 = cmpxchg ptr %2, i64 101, i64 102 seq_cst seq_cst, align 8 %12 = load i64, ptr %2, align 4 - %13 = call i32 (ptr, ...) @printf(ptr @2, i64 %12) - %14 = cmpxchg ptr %2, i64 101, i64 102 seq_cst seq_cst, align 8 + %13 = call i32 (ptr, ...) @printf(ptr @3, i64 %12) + %14 = atomicrmw sub ptr %2, i64 1 seq_cst, align 8 %15 = load i64, ptr %2, align 4 - %16 = call i32 (ptr, ...) @printf(ptr @3, i64 %15) - %17 = atomicrmw sub ptr %2, i64 1 seq_cst, align 8 - %18 = load i64, ptr %2, align 4 - %19 = call i32 (ptr, ...) @printf(ptr @4, i64 %18) + %16 = call i32 (ptr, ...) @printf(ptr @4, i64 %15) ret i32 0 } @@ -63,10 +52,4 @@ declare void @"github.com/goplus/llgo/internal/runtime.init"() declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64) -declare void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String") - -declare void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8) - -declare void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64) - declare i32 @printf(ptr, ...)