ssa: fix global array
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
; ModuleID = 'main'
|
; ModuleID = 'main'
|
||||||
source_filename = "main"
|
source_filename = "main"
|
||||||
|
|
||||||
@main.hello = global ptr null
|
@main.hello = global [7 x i8] undef
|
||||||
@"main.init$guard" = global ptr null
|
@"main.init$guard" = global ptr null
|
||||||
@__llgo_argc = global ptr null
|
@__llgo_argc = global ptr null
|
||||||
@__llgo_argv = global ptr null
|
@__llgo_argv = global ptr null
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; ModuleID = 'main'
|
; ModuleID = 'main'
|
||||||
source_filename = "main"
|
source_filename = "main"
|
||||||
|
|
||||||
@main.format = global ptr null
|
@main.format = global [10 x i8] undef
|
||||||
@"main.init$guard" = global ptr null
|
@"main.init$guard" = global ptr null
|
||||||
@__llgo_argc = global ptr null
|
@__llgo_argc = global ptr null
|
||||||
@__llgo_argv = global ptr null
|
@__llgo_argv = global ptr null
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; ModuleID = 'main'
|
; ModuleID = 'main'
|
||||||
source_filename = "main"
|
source_filename = "main"
|
||||||
|
|
||||||
@main.hello = global ptr null
|
@main.hello = global [7 x i8] undef
|
||||||
@"main.init$guard" = global ptr null
|
@"main.init$guard" = global ptr null
|
||||||
@__llgo_argc = global ptr null
|
@__llgo_argc = global ptr null
|
||||||
@__llgo_argv = global ptr null
|
@__llgo_argv = global ptr null
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; ModuleID = 'main'
|
; ModuleID = 'main'
|
||||||
source_filename = "main"
|
source_filename = "main"
|
||||||
|
|
||||||
@main.format = global ptr null
|
@main.format = global [10 x i8] undef
|
||||||
@"main.init$guard" = global ptr null
|
@"main.init$guard" = global ptr null
|
||||||
@__llgo_argc = global ptr null
|
@__llgo_argc = global ptr null
|
||||||
@__llgo_argv = global ptr null
|
@__llgo_argv = global ptr null
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; ModuleID = 'main'
|
; ModuleID = 'main'
|
||||||
source_filename = "main"
|
source_filename = "main"
|
||||||
|
|
||||||
@main.format = global ptr null
|
@main.format = global [10 x i8] undef
|
||||||
@"main.init$guard" = global ptr null
|
@"main.init$guard" = global ptr null
|
||||||
@__llgo_argc = global ptr null
|
@__llgo_argc = global ptr null
|
||||||
@__llgo_argv = global ptr null
|
@__llgo_argv = global ptr null
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ source_filename = "main"
|
|||||||
|
|
||||||
%"github.com/goplus/llgo/internal/abi.Type" = type { i64, i64, i32, i8, i8, i8, i8, { ptr, ptr }, ptr, i32, i32 }
|
%"github.com/goplus/llgo/internal/abi.Type" = type { i64, i64, i32, i8, i8, i8, i8, { ptr, ptr }, ptr, i32, i32 }
|
||||||
|
|
||||||
@main.basicTypes = global ptr null
|
@main.basicTypes = global [25 x ptr] undef
|
||||||
@"main.init$guard" = global ptr null
|
@"main.init$guard" = global ptr null
|
||||||
@main.sizeBasicTypes = global ptr null
|
@main.sizeBasicTypes = global [25 x i64] undef
|
||||||
@__llgo_argc = global ptr null
|
@__llgo_argc = global ptr null
|
||||||
@__llgo_argv = global ptr null
|
@__llgo_argv = global ptr null
|
||||||
@0 = private unnamed_addr constant [20 x i8] c"Kind: %d, Size: %d\0A\00", align 1
|
@0 = private unnamed_addr constant [20 x i8] c"Kind: %d, Size: %d\0A\00", align 1
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; ModuleID = 'main'
|
; ModuleID = 'main'
|
||||||
source_filename = "main"
|
source_filename = "main"
|
||||||
|
|
||||||
@main.format = global ptr null
|
@main.format = global [10 x i8] undef
|
||||||
@"main.init$guard" = global ptr null
|
@"main.init$guard" = global ptr null
|
||||||
@__llgo_argc = global ptr null
|
@__llgo_argc = global ptr null
|
||||||
@__llgo_argv = global ptr null
|
@__llgo_argv = global ptr null
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; ModuleID = 'main'
|
; ModuleID = 'main'
|
||||||
source_filename = "main"
|
source_filename = "main"
|
||||||
|
|
||||||
@main.format = global ptr null
|
@main.format = global [10 x i8] undef
|
||||||
@"main.init$guard" = global ptr null
|
@"main.init$guard" = global ptr null
|
||||||
@__llgo_argc = global ptr null
|
@__llgo_argc = global ptr null
|
||||||
@__llgo_argv = global ptr null
|
@__llgo_argv = global ptr null
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ source_filename = "main"
|
|||||||
|
|
||||||
%main.Foo = type { i32, i1 }
|
%main.Foo = type { i32, i1 }
|
||||||
|
|
||||||
@main.format = global ptr null
|
@main.format = global [10 x i8] undef
|
||||||
@"main.init$guard" = global ptr null
|
@"main.init$guard" = global ptr null
|
||||||
@__llgo_argc = global ptr null
|
@__llgo_argc = global ptr null
|
||||||
@__llgo_argv = global ptr null
|
@__llgo_argv = global ptr null
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; ModuleID = 'main'
|
; ModuleID = 'main'
|
||||||
source_filename = "main"
|
source_filename = "main"
|
||||||
|
|
||||||
@main.format = global ptr null
|
@main.format = global [10 x i8] undef
|
||||||
@"main.init$guard" = global ptr null
|
@"main.init$guard" = global ptr null
|
||||||
@__llgo_argc = global ptr null
|
@__llgo_argc = global ptr null
|
||||||
@__llgo_argv = global ptr null
|
@__llgo_argv = global ptr null
|
||||||
|
|||||||
Binary file not shown.
17
ssa/decl.go
17
ssa/decl.go
@@ -60,6 +60,7 @@ type NamedConst = *aNamedConst
|
|||||||
|
|
||||||
type aGlobal struct {
|
type aGlobal struct {
|
||||||
Expr
|
Expr
|
||||||
|
array bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// A Global is a named Value holding the address of a package-level
|
// A Global is a named Value holding the address of a package-level
|
||||||
@@ -72,8 +73,17 @@ func (p Package) NewVar(name string, typ types.Type, bg Background) Global {
|
|||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
t := p.Prog.Type(typ, bg)
|
t := p.Prog.Type(typ, bg)
|
||||||
gbl := llvm.AddGlobal(p.mod, t.ll, name)
|
var gbl llvm.Value
|
||||||
ret := &aGlobal{Expr{gbl, t}}
|
var array bool
|
||||||
|
if t.kind == vkPtr && p.Prog.Elem(t).kind == vkArray {
|
||||||
|
typ := p.Prog.Elem(t).ll
|
||||||
|
gbl = llvm.AddGlobal(p.mod, typ, name)
|
||||||
|
gbl.SetInitializer(llvm.Undef(typ))
|
||||||
|
array = true
|
||||||
|
} else {
|
||||||
|
gbl = llvm.AddGlobal(p.mod, t.ll, name)
|
||||||
|
}
|
||||||
|
ret := &aGlobal{Expr{gbl, t}, array}
|
||||||
p.vars[name] = ret
|
p.vars[name] = ret
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
@@ -85,6 +95,9 @@ func (p Package) VarOf(name string) Global {
|
|||||||
|
|
||||||
// Init initializes the global variable with the given value.
|
// Init initializes the global variable with the given value.
|
||||||
func (g Global) Init(v Expr) {
|
func (g Global) Init(v Expr) {
|
||||||
|
if g.array && v.kind == vkPtr {
|
||||||
|
return
|
||||||
|
}
|
||||||
g.impl.SetInitializer(v.impl)
|
g.impl.SetInitializer(v.impl)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user