sources
sources
/Users/colinking/dev/src/github.com/colinking/about/f.go
func HelloWorld() {
println("hello, world!")
}
AST
AST
buildssa-enter
buildssa-body
. EMPTY-init
. . CALLFUNC l(4) tc(1) hascall
. . . NAME-runtime.printlock a(true) x(0) class(PFUNC) tc(1) used FUNC-func()
. . CALLFUNC l(4) tc(1) hascall
. . . NAME-runtime.printstring a(true) x(0) class(PFUNC) tc(1) used
FUNC-func(string)
. . CALLFUNC-rlist
. . . LITERAL-"hello, world!\n" l(4) tc(1) string
. . CALLFUNC l(4) tc(1) hascall
. . . NAME-runtime.printunlock a(true) x(0) class(PFUNC) tc(1) used FUNC-func()
. EMPTY l(4) tc(1) hascall
buildssa-exit
start
start
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (4) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v6 (?) = ConstString <string> {"hello, world!\n"}v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (5)
number lines
number lines [18300 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v6 (?) = ConstString <string> {"hello, world!\n"}v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
early phielim
early phielim [4562 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v6 (?) = ConstString <string> {"hello, world!\n"}v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
early copyelim
early copyelim [695 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v6 (?) = ConstString <string> {"hello, world!\n"}v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
early deadcode
early deadcode [5841 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v6 (?) = ConstString <string> {"hello, world!\n"}v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
short circuit
short circuit [5019 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v6 (?) = ConstString <string> {"hello, world!\n"}v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
decompose args
decompose args [7926 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v6 (?) = ConstString <string> {"hello, world!\n"}v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
decompose user
decompose user [2469 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v6 (?) = ConstString <string> {"hello, world!\n"}v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
opt
opt [62815 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
zero arg cse
zero arg cse [5220 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
opt deadcode
opt deadcode [2161 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
generic cse
generic cse [16163 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
phiopt
phiopt [263 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
nilcheckelim
nilcheckelim [8280 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
prove
prove [19894 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
fuse plain
fuse plain [2628 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {string} v5 v6 v4 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
decompose builtin
decompose builtin [27030 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v12 (4 ) = OffPtr <*int> [8] v5 v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = Store <mem> {*uint8} v5 v3 v4 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {int} v12 v11 v13 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
softfloat
softfloat [273 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v12 (4 ) = OffPtr <*int> [8] v5 v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = Store <mem> {*uint8} v5 v3 v4 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {int} v12 v11 v13 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
late opt
late opt [2061 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v12 (4 ) = OffPtr <*int> [8] v2 v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = Store <mem> {*uint8} v5 v3 v4 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {int} v12 v11 v13 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
dead auto elim
dead auto elim [14199 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v12 (4 ) = OffPtr <*int> [8] v2 v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = Store <mem> {*uint8} v5 v3 v4 v6 (?) = StringMake <string> v3 v11 v7 (4 ) = Store <mem> {int} v12 v11 v13 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
generic deadcode
generic deadcode [2624 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v12 (4 ) = OffPtr <*int> [8] v2 v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = Store <mem> {*uint8} v5 v3 v4 v7 (4 ) = Store <mem> {int} v12 v11 v13 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
check bce
check bce [272 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v12 (4 ) = OffPtr <*int> [8] v2 v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = Store <mem> {*uint8} v5 v3 v4 v7 (4 ) = Store <mem> {int} v12 v11 v13 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
branchelim
branchelim [5170 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v12 (4 ) = OffPtr <*int> [8] v2 v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = Store <mem> {*uint8} v5 v3 v4 v7 (4 ) = Store <mem> {int} v12 v11 v13 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
fuse
fuse [342 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v12 (4 ) = OffPtr <*int> [8] v2 v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = Store <mem> {*uint8} v5 v3 v4 v7 (4 ) = Store <mem> {int} v12 v11 v13 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
dse
dse [7444 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v12 (4 ) = OffPtr <*int> [8] v2 v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = Store <mem> {*uint8} v5 v3 v4 v7 (4 ) = Store <mem> {int} v12 v11 v13 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
writebarrier
writebarrier [932 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = StaticCall <mem> {runtime.printlock} v1 v5 (?) = OffPtr <*string> [0] v2 v10 (?) = SB <uintptr>v11 (?) = Const64 <int> [14]v12 (4 ) = OffPtr <*int> [8] v2 v3 (?) = Addr <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = Store <mem> {*uint8} v5 v3 v4 v7 (4 ) = Store <mem> {int} v12 v11 v13 v8 (4) = StaticCall <mem> {runtime.printstring} [16] v7 v9 (4) = StaticCall <mem> {runtime.printunlock} v8 Ret v9 (+5 )
lower
lower [38093 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v11 (?) = MOVQconst <int> [14]v12 (4 ) = LEAQ <*int> [8] v2 v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
lowered cse
lowered cse [4525 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v11 (?) = MOVQconst <int> [14]v12 (4 ) = LEAQ <*int> [8] v2 v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
elim unread autos
elim unread autos [1424 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v11 (?) = MOVQconst <int> [14]v12 (4 ) = LEAQ <*int> [8] v2 v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
lowered deadcode
lowered deadcode [3209 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
checkLower
checkLower [884 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
late phielim
late phielim [408 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
late copyelim
late copyelim [314 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
tighten
tighten [18168 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
phi tighten
phi tighten [214 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
late deadcode
late deadcode [1637 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
critical
critical [489 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
likelyadjust
likelyadjust [702 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
layout
layout [1589 ns]
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
schedule
schedule [6530 ns]
b1 :- v1 (?) = InitMem <mem>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v2 (?) = SP <uintptr>v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
late nilcheck
late nilcheck [1573 ns]
b1 :- v1 (?) = InitMem <mem>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v2 (?) = SP <uintptr>v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
flagalloc
flagalloc [4223 ns]
b1 :- v1 (?) = InitMem <mem>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr>v3 (?) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 v2 (?) = SP <uintptr>v13 (4 ) = MOVQstore <mem> v2 v3 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
regalloc
regalloc [51730 ns]
b1 :- v1 (?) = InitMem <mem>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr> : SBv2 (?) = SP <uintptr> : SPv12 (4 ) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 : AXv13 (4 ) = MOVQstore <mem> v2 v12 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
loop rotate
loop rotate [330 ns]
b1 :- v1 (?) = InitMem <mem>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr> : SBv2 (?) = SP <uintptr> : SPv12 (4 ) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 : AXv13 (4 ) = MOVQstore <mem> v2 v12 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
stackframe
stackframe [3117 ns]
b1 :- v1 (?) = InitMem <mem>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr> : SBv2 (?) = SP <uintptr> : SPv12 (4 ) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 : AXv13 (4 ) = MOVQstore <mem> v2 v12 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
trim
trim [548 ns]
b1 :- v1 (?) = InitMem <mem>v4 (+4 ) = CALLstatic <mem> {runtime.printlock} v1 v10 (?) = SB <uintptr> : SBv2 (?) = SP <uintptr> : SPv12 (4 ) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 : AXv13 (4 ) = MOVQstore <mem> v2 v12 v4 v7 (4 ) = MOVQstoreconst <mem> [val=14,off=8] v2 v13 v8 (4) = CALLstatic <mem> {runtime.printstring} [16] v7 v9 (4) = CALLstatic <mem> {runtime.printunlock} v8 Ret v9 (+5 )
genssa
genssa
# /Users/colinking/dev/src/github.com/colinking/about/f.go 00000 (3) TEXT "".HelloWorld(SB), ABIInternal 00001 (3) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) 00002 (3) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) 00003 (3) FUNCDATA $3, gclocals·9fb7f0986f647f17cb53dda1484e0f7a(SB) v4 00004 (+4 ) PCDATA $2, $0 v4 00005 (+4 ) PCDATA $0, $0 v4 00006 (4) CALL runtime.printlock(SB) v12 00007 (4 ) PCDATA $2, $1 v12 00008 (4 ) LEAQ go.string."hello, world!\n"(SB), AX v13 00009 (4 ) PCDATA $2, $0 v13 00010 (4 ) MOVQ AX, (SP) v7 00011 (4 ) MOVQ $14, 8(SP) v8 00012 (4) CALL runtime.printstring(SB) v9 00013 (4) CALL runtime.printunlock(SB) b1 00014 (+5 ) RET 00015 (?) END