HelloWorld

help

Click on a value or block to toggle highlighting of that value/block and its uses. (Values and blocks are highlighted by ID, and IDs of dead items may be reused, so not all highlights necessarily correspond to the clicked item.)

Faded out values and blocks are dead code that has not been eliminated.

Values printed in italics have a dependency cycle.

CFG: Dashed edge is for unlikely branches. Blue color is for backward edges. Edge with a dot means that this edge follows the order in which blocks were laidout.

sources

 
 
3
4
5
 
/Users/colinking/dev/src/github.com/colinking/about/f.go
func HelloWorld() {
println("hello, world!")
}

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

  • 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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [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 [51730 ns]

  • b1:
    • v1 (?) = InitMem <mem>
    • v4 (+4) = CALLstatic <mem> {runtime.printlock} v1
    • v10 (?) = SB <uintptr> : SB
    • v2 (?) = SP <uintptr> : SP
    • v12 (4) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 : AX
    • v13 (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 [330 ns]

  • b1:
    • v1 (?) = InitMem <mem>
    • v4 (+4) = CALLstatic <mem> {runtime.printlock} v1
    • v10 (?) = SB <uintptr> : SB
    • v2 (?) = SP <uintptr> : SP
    • v12 (4) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 : AX
    • v13 (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 [3117 ns]

  • b1:
    • v1 (?) = InitMem <mem>
    • v4 (+4) = CALLstatic <mem> {runtime.printlock} v1
    • v10 (?) = SB <uintptr> : SB
    • v2 (?) = SP <uintptr> : SP
    • v12 (4) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 : AX
    • v13 (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 [548 ns]

  • b1:
    • v1 (?) = InitMem <mem>
    • v4 (+4) = CALLstatic <mem> {runtime.printlock} v1
    • v10 (?) = SB <uintptr> : SB
    • v2 (?) = SP <uintptr> : SP
    • v12 (4) = LEAQ <*uint8> {go.string."hello, world!\n"} v10 : AX
    • v13 (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

# /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