sources
sources
/root/main.go
func min(x, y int) int {
if x < y {
return x
}
return y
}
AST
AST buildssa-enter
. AS l(22)
. . NAME-main.~r2 g(1) l(22) x(16) class(PPARAMOUT) esc(no) int
buildssa-body
. IF l(23) tc(1)
. . LT l(23) tc(1) bool
. . . NAME-main.x g(2) l(22) x(0) class(PPARAM) esc(no) tc(1) used int
. . . NAME-main.y g(3) l(22) x(8) class(PPARAM) esc(no) tc(1) used int
. IF-body
. . RETURN l(24) tc(1)
. . RETURN-list
. . . AS l(24) tc(1)
. . . . NAME-main.~r2 g(1) l(22) x(16) class(PPARAMOUT) esc(no) int
. . . . NAME-main.x g(2) l(22) x(0) class(PPARAM) esc(no) tc(1) used int
. RETURN l(26) tc(1)
. RETURN-list
. . AS l(26) tc(1)
. . . NAME-main.~r2 g(1) l(22) x(16) class(PPARAMOUT) esc(no) int
. . . NAME-main.y g(3) l(22) x(8) class(PPARAM) esc(no) tc(1) used int
buildssa-exit
start
start b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (?) = LocalAddr <*int> {x} v2 v1 v5 (?) = LocalAddr <*int> {y} v2 v1 v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v9 (?) = Const64 <int> [0]v10 (23) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v15 (26 ) = Copy <int> v8 (y[int])v16 (26 ) = Copy <mem> v1 v17 (26 ) = VarDef <mem> {~r2} v16 v18 (26) = Store <mem> {int} v6 v15 v17 Ret v18 (+26 ) b3 : ← b1 - v11 (24 ) = Copy <int> v7 (x[int])v12 (24 ) = Copy <mem> v1 v13 (24 ) = VarDef <mem> {~r2} v12 v14 (24) = Store <mem> {int} v6 v11 v13 Ret v14 (+24 ) name x[int]: v7 v11 name y[int]: v8 v15 number lines
number lines [20300 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (?) = LocalAddr <*int> {x} v2 v1 v5 (?) = LocalAddr <*int> {y} v2 v1 v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v9 (?) = Const64 <int> [0]v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v15 (26 ) = Copy <int> v8 (y[int])v16 (26 ) = Copy <mem> v1 v17 (26 ) = VarDef <mem> {~r2} v16 v18 (+26 ) = Store <mem> {int} v6 v15 v17 Ret v18 (+26 ) b3 : ← b1 - v11 (24 ) = Copy <int> v7 (x[int])v12 (24 ) = Copy <mem> v1 v13 (24 ) = VarDef <mem> {~r2} v12 v14 (+24 ) = Store <mem> {int} v6 v11 v13 Ret v14 (+24 ) name x[int]: v7 v11 name y[int]: v8 v15 early phielim
early phielim [19500 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (?) = LocalAddr <*int> {x} v2 v1 v5 (?) = LocalAddr <*int> {y} v2 v1 v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v9 (?) = Const64 <int> [0]v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v15 (26 ) = Copy <int> v8 (y[int])v16 (26 ) = Copy <mem> v1 v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v11 (24 ) = Copy <int> v7 (x[int])v12 (24 ) = Copy <mem> v1 v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 v11 name y[int]: v8 v15 early copyelim
early copyelim [23300 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v3 (?) = SB <uintptr>v4 (?) = LocalAddr <*int> {x} v2 v1 v5 (?) = LocalAddr <*int> {y} v2 v1 v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v9 (?) = Const64 <int> [0]v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v15 (26 ) = Copy <int> v8 v16 (26 ) = Copy <mem> v1 v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v11 (24 ) = Copy <int> v7 v12 (24 ) = Copy <mem> v1 v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 v7 name y[int]: v8 v8 early deadcode
early deadcode [20800 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 short circuit
short circuit [23500 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 decompose args
decompose args [25400 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 decompose user
decompose user [21900 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 pre-opt deadcode
pre-opt deadcode [28100 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 opt
opt [26200 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 zero arg cse
zero arg cse [22200 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 opt deadcode
opt deadcode [41300 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 generic cse
generic cse [139100 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 phiopt
phiopt [109000 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 gcse deadcode
gcse deadcode [35000 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 nilcheckelim
nilcheckelim [31100 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 prove
prove [46800 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 v12 (?) = Const64 <int64> [0]If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 fuse plain
fuse plain [20600 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 v12 (?) = Const64 <int64> [0]If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 decompose builtin
decompose builtin [27600 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 v12 (?) = Const64 <int64> [0]If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 softfloat
softfloat [20600 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 v12 (?) = Const64 <int64> [0]If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 late opt
late opt [33300 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 v12 (?) = Const64 <int64> [0]If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 dead auto elim
dead auto elim [30300 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 v12 (?) = Const64 <int64> [0]If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 generic deadcode
generic deadcode [34700 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 check bce
check bce [20500 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 branchelim
branchelim [21900 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 fuse
fuse [22500 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 dse
dse [25500 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 writebarrier
writebarrier [23400 ns] - +
b1
b1
If
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = LocalAddr <*int> {~r2} v2 v1 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v10 (+23 ) = Less64 <bool> v7 v8 If v10 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = Store <mem> {int} v6 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = Store <mem> {int} v6 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 lower
lower [37300 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v6 (?) = MOVDaddr <*int> {~r2} v2 v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v11 (+23 ) = MOVDconst <uint64> [0]v16 (+23 ) = MOVDconst <uint64> [1]v15 (+23 ) = CMP <flags> v7 v8 v10 (+23 ) = LOCGR <bool> {Less} v11 v16 v15 v12 (+23 ) = Copy <bool> v10 CGRJ {Less} v7 v8 → b3 b2 (23) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 lowered deadcode for cse
lowered deadcode for cse [37800 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 lowered cse
lowered cse [28900 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 elim unread autos
elim unread autos [21900 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 lowered deadcode
lowered deadcode [28400 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 checkLower
checkLower [21300 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 late phielim
late phielim [21700 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 late copyelim
late copyelim [20300 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 tighten
tighten [31100 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 late deadcode
late deadcode [22400 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 critical
critical [34600 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 phi tighten
phi tighten [22000 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 likelyadjust
likelyadjust [139100 ns] - +
b1
b1
CGRJ
b2
b2
Ret
b1->b2
1
b3
b3
Ret
b1->b3
0
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) name x[int]: v7 name y[int]: v8 layout
layout [23900 ns] - +
b1
b1 #0
CGRJ
b3
b3 #1
Ret
b1->b3
0
b2
b2 #2
Ret
b1->b2
1
b3->b2
b1 :- v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])CGRJ {Less} v7 v8 → b3 b2 (+23 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) name x[int]: v7 name y[int]: v8 schedule
schedule [49600 ns] - +
b1
b1 #0
CGRJ
b3
b3 #1
Ret
b1->b3
0
b2
b2 #2
Ret
b1->b2
1
b3->b2
b1 :- v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>CGRJ {Less} v7 v8 → b3 b2 (+23 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) name x[int]: v7 name y[int]: v8 late nilcheck
late nilcheck [28900 ns] - +
b1
b1 #0
CGRJ
b3
b3 #1
Ret
b1->b3
0
b2
b2 #2
Ret
b1->b2
1
b3->b2
b1 :- v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>CGRJ {Less} v7 v8 → b3 b2 (+23 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) name x[int]: v7 name y[int]: v8 flagalloc
flagalloc [36000 ns] - +
b1
b1 #0
CGRJ
b3
b3 #1
Ret
b1->b3
0
b2
b2 #2
Ret
b1->b2
1
b3->b2
b1 :- v7 (22 ) = Arg <int> {x} (x[int])v8 (22 ) = Arg <int> {y} (y[int])v1 (?) = InitMem <mem>v2 (?) = SP <uintptr>CGRJ {Less} v7 v8 → b3 b2 (+23 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v7 v13 Ret v14 (+24 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v8 v17 Ret v18 (+26 ) name x[int]: v7 name y[int]: v8 regalloc
regalloc [67000 ns] - +
b1
b1 #0
CGRJ
b3
b3 #1
Ret
b1->b3
0
b2
b2 #2
Ret
b1->b2
1
b3->b2
b1 :- v7 (22 ) = Arg <int> {x} : x[int] (x[int])v8 (22 ) = Arg <int> {y} : y[int] (y[int])v1 (?) = InitMem <mem>v2 (?) = SP <uintptr> : SPv15 (23 ) = LoadReg <int> v7 : R0v16 (23 ) = LoadReg <int> v8 : R1CGRJ {Less} v15 v16 → b3 b2 (+23 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v15 v13 Ret v14 (+24 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v16 v17 Ret v18 (+26 ) name x[int]: v7 name y[int]: v8 loop rotate
loop rotate [21700 ns] - +
b1
b1 #0
CGRJ
b3
b3 #1
Ret
b1->b3
0
b2
b2 #2
Ret
b1->b2
1
b3->b2
b1 :- v7 (22 ) = Arg <int> {x} : x[int] (x[int])v8 (22 ) = Arg <int> {y} : y[int] (y[int])v1 (?) = InitMem <mem>v2 (?) = SP <uintptr> : SPv15 (23 ) = LoadReg <int> v7 : R0v16 (23 ) = LoadReg <int> v8 : R1CGRJ {Less} v15 v16 → b3 b2 (+23 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v15 v13 Ret v14 (+24 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v16 v17 Ret v18 (+26 ) name x[int]: v7 name y[int]: v8 stackframe
stackframe [30200 ns] - +
b1
b1 #0
CGRJ
b3
b3 #1
Ret
b1->b3
0
b2
b2 #2
Ret
b1->b2
1
b3->b2
b1 :- v7 (22 ) = Arg <int> {x} : x[int] (x[int])v8 (22 ) = Arg <int> {y} : y[int] (y[int])v1 (?) = InitMem <mem>v2 (?) = SP <uintptr> : SPv15 (23 ) = LoadReg <int> v7 : R0v16 (23 ) = LoadReg <int> v8 : R1CGRJ {Less} v15 v16 → b3 b2 (+23 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v15 v13 Ret v14 (+24 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v16 v17 Ret v18 (+26 ) name x[int]: v7 name y[int]: v8 trim
trim [23600 ns] - +
b1
b1 #0
CGRJ
b3
b3 #1
Ret
b1->b3
0
b2
b2 #2
Ret
b1->b2
1
b3->b2
b1 :- v7 (22 ) = Arg <int> {x} : x[int] (x[int])v8 (22 ) = Arg <int> {y} : y[int] (y[int])v1 (?) = InitMem <mem>v2 (?) = SP <uintptr> : SPv15 (23 ) = LoadReg <int> v7 : R0v16 (23 ) = LoadReg <int> v8 : R1CGRJ {Less} v15 v16 → b3 b2 (+23 ) b3 : ← b1 - v13 (24 ) = VarDef <mem> {~r2} v1 v14 (+24 ) = MOVDstore <mem> {~r2} v2 v15 v13 Ret v14 (+24 ) b2 : ← b1 - v17 (26 ) = VarDef <mem> {~r2} v1 v18 (+26 ) = MOVDstore <mem> {~r2} v2 v16 v17 Ret v18 (+26 ) name x[int]: v7 name y[int]: v8 genssa
genssa # /root/main.go 00000 (22) TEXT "".min(SB), ABIInternal 00001 (22) PCDATA $0, $-2 00002 (22) PCDATA $1, $-2 00003 (22) FUNCDATA $0, gclocals·2002e13acf59079a1a5782c918894579(SB) 00004 (22) FUNCDATA $1, gclocals·2002e13acf59079a1a5782c918894579(SB) 00005 (22) FUNCDATA $2, gclocals·2002e13acf59079a1a5782c918894579(SB) v15 00006 (23 ) PCDATA $0, $0 v15 00007 (23 ) PCDATA $1, $0 v15 00008 (+23 ) MOVD "".x(R15), R0 v16 00009 (23 ) MOVD "".y+8(R15), R1 b1 00010 (23 ) CGRJ $10, R0, R1, 13 v14 00011 (+24 ) MOVD R0, "".~r2+16(R15) b3 00012 (24 ) RET v18 00013 (+26 ) MOVD R1, "".~r2+16(R15) b2 00014 (26 ) RET 00015 (?) END