From b11a618d994475fd26466afd6d8b3b2450fb212f Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sun, 29 Apr 2018 00:57:50 +0200 Subject: [PATCH] compiler: Set actual initializer for global variables In the Go SSA, global variables are initialized in the init() function instead of declaring them in the global itself. Work around this oddity by simply setting the correct initializer when we find this global. This should produce more efficient code, both in RAM and code size. Apparently LLVM didn't optimize it away on it's own. --- tgo.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tgo.go b/tgo.go index 6a5b617f..d4586b29 100644 --- a/tgo.go +++ b/tgo.go @@ -583,7 +583,11 @@ func (c *Compiler) parseInstr(frame *Frame, instr ssa.Instruction) error { if err != nil { return err } - c.builder.CreateStore(val, addr) + if instr.Parent().Synthetic == "package initializer" { + addr.SetInitializer(val) + } else { + c.builder.CreateStore(val, addr) + } return nil default: return errors.New("unknown instruction: " + fmt.Sprintf("%#v", instr))