diff --git a/go.mod b/go.mod index 8768b130..19124c36 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/aykevl/go-wasm v0.0.1 github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb github.com/goplus/gop v1.2.6 - github.com/goplus/llvm v0.7.1-0.20240418070213-5013f6a4299b + github.com/goplus/llvm v0.7.1-0.20240418094455-718cc880283b github.com/qiniu/x v1.13.10 golang.org/x/tools v0.19.0 ) diff --git a/go.sum b/go.sum index b557f82b..615f1325 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,8 @@ github.com/goplus/llvm v0.7.1-0.20240417171659-4fb15c5dc82a h1:pKOqI/f4lyPAlto2M github.com/goplus/llvm v0.7.1-0.20240417171659-4fb15c5dc82a/go.mod h1:PeVK8GgzxwAYCiMiUAJb5wJR6xbhj989tu9oulKLLT4= github.com/goplus/llvm v0.7.1-0.20240418070213-5013f6a4299b h1:sRVmYXGgKjqgaoVQ1bshnw9Ar77stDtjHC4A/PDJ0fk= github.com/goplus/llvm v0.7.1-0.20240418070213-5013f6a4299b/go.mod h1:PeVK8GgzxwAYCiMiUAJb5wJR6xbhj989tu9oulKLLT4= +github.com/goplus/llvm v0.7.1-0.20240418094455-718cc880283b h1:vSEAK8m49NUX0YKyF+7m/wAkrRe8pf94PfFmJ/5+xKo= +github.com/goplus/llvm v0.7.1-0.20240418094455-718cc880283b/go.mod h1:PeVK8GgzxwAYCiMiUAJb5wJR6xbhj989tu9oulKLLT4= github.com/goplus/mod v0.13.10 h1:5Om6KOvo31daN7N30kWU1vC5zhsJPM+uPbcEN/FnlzE= github.com/goplus/mod v0.13.10/go.mod h1:HDuPZgpWiaTp3PUolFgsiX+Q77cbUWB/mikVHfYND3c= github.com/qiniu/x v1.13.10 h1:J4Z3XugYzAq85SlyAfqlKVrbf05glMbAOh+QncsDQpE= diff --git a/ssa/ssa_test.go b/ssa/ssa_test.go index 97e91028..9900d171 100644 --- a/ssa/ssa_test.go +++ b/ssa/ssa_test.go @@ -17,6 +17,7 @@ package ssa import ( + "go/token" "go/types" "testing" ) @@ -120,12 +121,34 @@ func TestFuncParam(t *testing.T) { rets := types.NewTuple(types.NewVar(0, nil, "", types.Typ[types.Int])) sig := types.NewSignatureType(nil, nil, nil, params, rets, false) fn := pkg.NewFunc("fn", sig) - fn.MakeBody("").Return(fn.Param(1)) + fn.MakeBody("").Return(fn.Param(0)) assertPkg(t, pkg, `; ModuleID = 'foo/bar' source_filename = "foo/bar" define i64 @fn(i64 %0, double %1) { - ret double %1 + ret i64 %0 +} +`) +} + +func TestBinOp(t *testing.T) { + prog := NewProgram(nil) + pkg := prog.NewPackage("bar", "foo/bar") + params := types.NewTuple( + types.NewVar(0, nil, "a", types.Typ[types.Int]), + types.NewVar(0, nil, "b", types.Typ[types.Float64])) + rets := types.NewTuple(types.NewVar(0, nil, "", types.Typ[types.Int])) + sig := types.NewSignatureType(nil, nil, nil, params, rets, false) + fn := pkg.NewFunc("fn", sig) + b := fn.MakeBody("") + ret := b.BinOp(token.ADD, fn.Param(0), prog.Val(1)) + b.Return(ret) + assertPkg(t, pkg, `; ModuleID = 'foo/bar' +source_filename = "foo/bar" + +define i64 @fn(i64 %0, double %1) { + %3 = add i64 %0, 1 + ret i64 %3 } `) }