]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix race in SSA construction
authorJosh Bleecher Snyder <josharian@gmail.com>
Wed, 18 Apr 2018 15:48:04 +0000 (08:48 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Wed, 18 Apr 2018 17:15:35 +0000 (17:15 +0000)
syslook cannot be called safely during SSA construction.

Change-Id: Ief173babd2e964fd5016578073dd3ba12e5731c5
Reviewed-on: https://go-review.googlesource.com/107815
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/gc/go.go
src/cmd/compile/internal/gc/ssa.go

index 3ba0598f612b17450e6c9f281b8f49f95c15ca52..572afdb4b4d9b32b5a80a6528a5e3218ac199b4f 100644 (file)
@@ -304,7 +304,9 @@ var (
        racewriterange,
        msanread,
        msanwrite,
-       Udiv *obj.LSym
+       Udiv,
+       supportPopcnt,
+       supportSSE41 *obj.LSym
 
        // GO386=387
        ControlWord64trunc,
index 59de5efe112ecbaf8b64fdb4c9c94e427f6fa67d..82811ccd2022e6fb754df576aa2a035531bfb38a 100644 (file)
@@ -81,6 +81,8 @@ func initssaconfig() {
        msanread = sysfunc("msanread")
        msanwrite = sysfunc("msanwrite")
        Udiv = sysfunc("udiv")
+       supportPopcnt = sysfunc("support_popcnt")
+       supportSSE41 = sysfunc("support_sse41")
 
        // GO386=387 runtime functions
        ControlWord64trunc = sysfunc("controlWord64trunc")
@@ -3019,8 +3021,7 @@ func init() {
 
        makeRoundAMD64 := func(op ssa.Op) func(s *state, n *Node, args []*ssa.Value) *ssa.Value {
                return func(s *state, n *Node, args []*ssa.Value) *ssa.Value {
-                       aux := syslook("support_sse41").Sym.Linksym()
-                       addr := s.entryNewValue1A(ssa.OpAddr, types.Types[TBOOL].PtrTo(), aux, s.sb)
+                       addr := s.entryNewValue1A(ssa.OpAddr, types.Types[TBOOL].PtrTo(), supportSSE41, s.sb)
                        v := s.load(types.Types[TBOOL], addr)
                        b := s.endBlock()
                        b.Kind = ssa.BlockIf
@@ -3183,8 +3184,7 @@ func init() {
                sys.ARM64)
        makeOnesCountAMD64 := func(op64 ssa.Op, op32 ssa.Op) func(s *state, n *Node, args []*ssa.Value) *ssa.Value {
                return func(s *state, n *Node, args []*ssa.Value) *ssa.Value {
-                       aux := syslook("support_popcnt").Sym.Linksym()
-                       addr := s.entryNewValue1A(ssa.OpAddr, types.Types[TBOOL].PtrTo(), aux, s.sb)
+                       addr := s.entryNewValue1A(ssa.OpAddr, types.Types[TBOOL].PtrTo(), supportPopcnt, s.sb)
                        v := s.load(types.Types[TBOOL], addr)
                        b := s.endBlock()
                        b.Kind = ssa.BlockIf