sources
sources
benchmark_test.go
func mapImplementation() int {
return map[string]int{
"amd64": 0,
"arm": 1,
"arm64": 2,
}[runtime.GOARCH]
}
AST
AST buildssa-enter
. AS l(31)
. . NAME-benchmark.~r0 g(1) l(31) x(0) class(PPARAMOUT) esc(no) int
buildssa-body
. RETURN l(32) tc(1)
. RETURN-list
. . AS l(36) tc(1)
. . . NAME-benchmark.~r0 g(1) l(31) x(0) class(PPARAMOUT) esc(no) int
. . . LITERAL-0 l(33) tc(1) int
buildssa-exit
start
start b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (32) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) number lines
number lines [3201 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) early phielim
early phielim [559 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) early copyelim
early copyelim [555 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) early deadcode
early deadcode [3121 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) short circuit
short circuit [632 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) decompose args
decompose args [2172 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) decompose user
decompose user [385 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) pre-opt deadcode
pre-opt deadcode [2311 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) opt
opt [2507 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) zero arg cse
zero arg cse [2720 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) opt deadcode
opt deadcode [1824 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) generic cse
generic cse [6126 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) phiopt
phiopt [328 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) gcse deadcode
gcse deadcode [1868 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) nilcheckelim
nilcheckelim [3293 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) prove
prove [4996 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 v3 (?) = Const64 <int64> [0]Ret v7 (+33 ) fuse plain
fuse plain [397 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 v3 (?) = Const64 <int64> [0]Ret v7 (+33 ) decompose builtin
decompose builtin [2178 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 v3 (?) = Const64 <int64> [0]Ret v7 (+33 ) softfloat
softfloat [312 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 v3 (?) = Const64 <int64> [0]Ret v7 (+33 ) late opt
late opt [2018 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 v3 (?) = Const64 <int64> [0]Ret v7 (+33 ) dead auto elim
dead auto elim [1279 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 v3 (?) = Const64 <int64> [0]Ret v7 (+33 ) generic deadcode
generic deadcode [2580 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) check bce
check bce [293 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) branchelim
branchelim [1216 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) fuse
fuse [408 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) dse
dse [2626 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) writebarrier
writebarrier [1894 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LocalAddr <*int> {~r0} v2 v1 v5 (?) = Const64 <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = Store <mem> {int} v4 v5 v6 Ret v7 (+33 ) lower
lower [5512 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v4 (?) = LEAQ <*int> {~r0} v2 v5 (?) = MOVQconst <int> [0]v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) lowered deadcode for cse
lowered deadcode for cse [2466 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) lowered cse
lowered cse [2904 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) elim unread autos
elim unread autos [729 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) lowered deadcode
lowered deadcode [1687 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) checkLower
checkLower [601 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) late phielim
late phielim [435 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) late copyelim
late copyelim [376 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) tighten
tighten [4426 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) late deadcode
late deadcode [2182 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) critical
critical [869 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) phi tighten
phi tighten [303 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) likelyadjust
likelyadjust [2027 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) layout
layout [28770 ns] b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (32 ) = VarDef <mem> {~r0} v1 v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) schedule
schedule [11076 ns] b1 :- v1 (?) = InitMem <mem>v6 (32 ) = VarDef <mem> {~r0} v1 v2 (?) = SP <uintptr>v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) late nilcheck
late nilcheck [3404 ns] b1 :- v1 (?) = InitMem <mem>v6 (32 ) = VarDef <mem> {~r0} v1 v2 (?) = SP <uintptr>v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) flagalloc
flagalloc [3437 ns] b1 :- v1 (?) = InitMem <mem>v6 (32 ) = VarDef <mem> {~r0} v1 v2 (?) = SP <uintptr>v7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) regalloc
regalloc [31639 ns] b1 :- v1 (?) = InitMem <mem>v6 (32 ) = VarDef <mem> {~r0} v1 v2 (?) = SP <uintptr> : SPv7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) loop rotate
loop rotate [291 ns] b1 :- v1 (?) = InitMem <mem>v6 (32 ) = VarDef <mem> {~r0} v1 v2 (?) = SP <uintptr> : SPv7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) stackframe
stackframe [1937 ns] b1 :- v1 (?) = InitMem <mem>v6 (32 ) = VarDef <mem> {~r0} v1 v2 (?) = SP <uintptr> : SPv7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) trim
trim [424 ns] b1 :- v1 (?) = InitMem <mem>v6 (32 ) = VarDef <mem> {~r0} v1 v2 (?) = SP <uintptr> : SPv7 (+32 ) = MOVQstoreconst <mem> {~r0} [val=0,off=0] v2 v6 Ret v7 (+33 ) genssa
genssa # benchmark_test.go 00000 (31) TEXT "".mapImplementation(SB), ABIInternal 00001 (31) PCDATA $0, $-2 00002 (31) PCDATA $1, $-2 00003 (31) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) 00004 (31) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) 00005 (31) FUNCDATA $2, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) v7 00006 (+32 ) PCDATA $0, $0 v7 00007 (+32 ) PCDATA $1, $0 v7 00008 (+32 ) MOVQ $0, "".~r0(SP) b1 00009 (+33 ) RET 00010 (?) END