ssa

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.

start

  • b1:
    • v1 = InitMem <mem>
    • v2 = SP <uintptr>
    • v3 = SB <uintptr>
    • v4 = Const64 <int> [0]
    • v5 = Const64 <int> [5]
    • v6 = Const64 <int> [3]
    • v7 = Sub64 <int> v5 v6
    • v8 = Less64 <bool> v7 v6
    • v10 = Const64 <int> [2]
    • v29 = Addr <*uint8> {type.int} v3
    • v30 = OffPtr <**byte> [0] v2
    • v33 = OffPtr <**int> [8] v2
    • v36 = OffPtr <*interface {}> [16] v2
    • v41 = Addr <*uint8> {type.int} v3
    • v48 = Const64 <int> [1]
    • v57 = ConstString <string> {"%d, %d\n"}
    • v58 = OffPtr <*string> [0] v2
    • v61 = OffPtr <*[]interface {}> [16] v2
    • v64 = OffPtr <*int> [40] v2
  • If v8b2 b4
  • b2: ← b1
    • v9 = Copy <int> v7
    • v11 = Mul64 <int> v9 v10
  • Plainb3
  • b3: ← b2 b4
    • v14 = Phi <int> v9 v12
    • v15 = Phi <int> v11 v13
    • v16 = Sub64 <int> v14 v15
    • v17 = Add64 <int> v14 v15
    • v18 = Addr <*int> {.autotmp_5} v2
    • v19 = Copy <mem> v1
    • v20 = VarDef <mem> {.autotmp_5} v19
    • v21 = Store <mem> {int} v18 v16 v20
    • v22 = Addr <*int> {.autotmp_6} v2
    • v23 = VarDef <mem> {.autotmp_6} v21
    • v24 = Store <mem> {int} v22 v17 v23
    • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
    • v26 = VarDef <mem> {.autotmp_4} v24
    • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
    • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
    • v31 = Store <mem> {*byte} v30 v29 v27
    • v32 = Addr <*int> {.autotmp_5} v2
    • v34 = Store <mem> {*int} v33 v32 v31
    • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
    • v37 = Load <interface {}> v36 v35
    • v38 = NilCheck <void> v28 v35
    • v39 = PtrIndex <*interface {}> v28 v4
    • v40 = Store <mem> {interface {}} v39 v37 v35
    • v42 = Store <mem> {*byte} v30 v41 v40
    • v43 = Addr <*int> {.autotmp_6} v2
    • v44 = Store <mem> {*int} v33 v43 v42
    • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
    • v46 = Load <interface {}> v36 v45
    • v47 = NilCheck <void> v28 v45
    • v49 = PtrIndex <*interface {}> v28 v48
    • v50 = Store <mem> {interface {}} v49 v46 v45
    • v51 = NilCheck <void> v28 v50
    • v52 = IsSliceInBounds <bool> v4 v10
  • If v52b5 b6 (likely)
  • b4: ← b1
    • v12 = Copy <int> v7
    • v13 = Sub64 <int> v12 v6
  • Plainb3
  • b5: ← b3
    • v55 = Sub64 <int> v10 v4
    • v56 = SliceMake <[]interface {}> v28 v55 v55
    • v59 = Copy <mem> v50
    • v60 = Store <mem> {string} v58 v57 v59
    • v62 = Store <mem> {[]interface {}} v61 v56 v60
    • v63 = StaticCall <mem> {fmt.Printf} [64] v62
    • v65 = VarKill <mem> {.autotmp_6} v63
    • v66 = VarKill <mem> {.autotmp_5} v65
    • v67 = VarKill <mem> {.autotmp_4} v66
  • Ret v67
  • b6: ← b3
    • v53 = Copy <mem> v50
    • v54 = StaticCall <mem> {runtime.panicslice} v53
  • Exit v54
  • name w[int]: v4 v11 v16
  • name x[int]: v4 v5 v7 v9 v12 v14
  • name y[int]: v4 v11 v13 v15
  • name z[int]: v4 v17
  • after early phielim [25600 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v4 = Const64 <int> [0]
      • v5 = Const64 <int> [5]
      • v6 = Const64 <int> [3]
      • v7 = Sub64 <int> v5 v6
      • v8 = Less64 <bool> v7 v6
      • v10 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v48 = Const64 <int> [1]
      • v57 = ConstString <string> {"%d, %d\n"}
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v64 = OffPtr <*int> [40] v2
    • If v8b2 b4
    • b2: ← b1
      • v9 = Copy <int> v7
      • v11 = Mul64 <int> v7 v10
    • Plainb3
    • b3: ← b2 b4
      • v15 = Phi <int> v11 v13
      • v14 = Copy <int> v7
      • v16 = Sub64 <int> v7 v15
      • v17 = Add64 <int> v7 v15
      • v18 = Addr <*int> {.autotmp_5} v2
      • v19 = Copy <mem> v1
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v22 = Addr <*int> {.autotmp_6} v2
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v32 = Addr <*int> {.autotmp_5} v2
      • v34 = Store <mem> {*int} v33 v32 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v38 = NilCheck <void> v28 v35
      • v39 = PtrIndex <*interface {}> v28 v4
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v41 v40
      • v43 = Addr <*int> {.autotmp_6} v2
      • v44 = Store <mem> {*int} v33 v43 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v47 = NilCheck <void> v28 v45
      • v49 = PtrIndex <*interface {}> v28 v48
      • v50 = Store <mem> {interface {}} v49 v46 v45
      • v51 = NilCheck <void> v28 v50
      • v52 = IsSliceInBounds <bool> v4 v10
    • If v52b5 b6 (likely)
    • b4: ← b1
      • v12 = Copy <int> v7
      • v13 = Sub64 <int> v7 v6
    • Plainb3
    • b5: ← b3
      • v55 = Sub64 <int> v10 v4
      • v56 = SliceMake <[]interface {}> v28 v55 v55
      • v59 = Copy <mem> v50
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
    • b6: ← b3
      • v53 = Copy <mem> v50
      • v54 = StaticCall <mem> {runtime.panicslice} v50
    • Exit v54
  • name w[int]: v4 v11 v16
  • name x[int]: v4 v5 v7 v9 v12 v14
  • name y[int]: v4 v11 v13 v15
  • name z[int]: v4 v17
  • after early copyelim [29500 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v4 = Const64 <int> [0]
      • v5 = Const64 <int> [5]
      • v6 = Const64 <int> [3]
      • v7 = Sub64 <int> v5 v6
      • v8 = Less64 <bool> v7 v6
      • v10 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v48 = Const64 <int> [1]
      • v57 = ConstString <string> {"%d, %d\n"}
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v64 = OffPtr <*int> [40] v2
    • If v8b2 b4
    • b2: ← b1
      • v9 = Copy <int> v7
      • v11 = Mul64 <int> v7 v10
    • Plainb3
    • b3: ← b2 b4
      • v15 = Phi <int> v11 v13
      • v14 = Copy <int> v7
      • v16 = Sub64 <int> v7 v15
      • v17 = Add64 <int> v7 v15
      • v18 = Addr <*int> {.autotmp_5} v2
      • v19 = Copy <mem> v1
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v22 = Addr <*int> {.autotmp_6} v2
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v32 = Addr <*int> {.autotmp_5} v2
      • v34 = Store <mem> {*int} v33 v32 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v38 = NilCheck <void> v28 v35
      • v39 = PtrIndex <*interface {}> v28 v4
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v41 v40
      • v43 = Addr <*int> {.autotmp_6} v2
      • v44 = Store <mem> {*int} v33 v43 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v47 = NilCheck <void> v28 v45
      • v49 = PtrIndex <*interface {}> v28 v48
      • v50 = Store <mem> {interface {}} v49 v46 v45
      • v51 = NilCheck <void> v28 v50
      • v52 = IsSliceInBounds <bool> v4 v10
    • If v52b5 b6 (likely)
    • b4: ← b1
      • v12 = Copy <int> v7
      • v13 = Sub64 <int> v7 v6
    • Plainb3
    • b5: ← b3
      • v55 = Sub64 <int> v10 v4
      • v56 = SliceMake <[]interface {}> v28 v55 v55
      • v59 = Copy <mem> v50
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
    • b6: ← b3
      • v53 = Copy <mem> v50
      • v54 = StaticCall <mem> {runtime.panicslice} v50
    • Exit v54
  • name w[int]: v4 v11 v16
  • name x[int]: v4 v5 v7 v7 v7 v7
  • name y[int]: v4 v11 v13 v15
  • name z[int]: v4 v17
  • after early deadcode [73300 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v4 = Const64 <int> [0]
      • v5 = Const64 <int> [5]
      • v6 = Const64 <int> [3]
      • v7 = Sub64 <int> v5 v6
      • v8 = Less64 <bool> v7 v6
      • v10 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v48 = Const64 <int> [1]
      • v57 = ConstString <string> {"%d, %d\n"}
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
    • If v8b2 b4
    • b2: ← b1
      • v11 = Mul64 <int> v7 v10
    • Plainb3
    • b3: ← b2 b4
      • v15 = Phi <int> v11 v13
      • v16 = Sub64 <int> v7 v15
      • v17 = Add64 <int> v7 v15
      • v18 = Addr <*int> {.autotmp_5} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v22 = Addr <*int> {.autotmp_6} v2
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v32 = Addr <*int> {.autotmp_5} v2
      • v34 = Store <mem> {*int} v33 v32 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v38 = NilCheck <void> v28 v35
      • v39 = PtrIndex <*interface {}> v28 v4
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v41 v40
      • v43 = Addr <*int> {.autotmp_6} v2
      • v44 = Store <mem> {*int} v33 v43 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v47 = NilCheck <void> v28 v45
      • v49 = PtrIndex <*interface {}> v28 v48
      • v50 = Store <mem> {interface {}} v49 v46 v45
      • v51 = NilCheck <void> v28 v50
      • v52 = IsSliceInBounds <bool> v4 v10
    • If v52b5 b6 (likely)
    • b4: ← b1
      • v13 = Sub64 <int> v7 v6
    • Plainb3
    • b5: ← b3
      • v55 = Sub64 <int> v10 v4
      • v56 = SliceMake <[]interface {}> v28 v55 v55
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
    • b6: ← b3
      • v54 = StaticCall <mem> {runtime.panicslice} v50
    • Exit v54
  • name w[int]: v4 v11 v16
  • name x[int]: v4 v5 v7
  • name y[int]: v4 v11 v13 v15
  • name z[int]: v4 v17
  • after short circuit [30300 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v4 = Const64 <int> [0]
      • v5 = Const64 <int> [5]
      • v6 = Const64 <int> [3]
      • v7 = Sub64 <int> v5 v6
      • v8 = Less64 <bool> v7 v6
      • v10 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v48 = Const64 <int> [1]
      • v57 = ConstString <string> {"%d, %d\n"}
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
    • If v8b2 b4
    • b2: ← b1
      • v11 = Mul64 <int> v7 v10
    • Plainb3
    • b3: ← b2 b4
      • v15 = Phi <int> v11 v13
      • v16 = Sub64 <int> v7 v15
      • v17 = Add64 <int> v7 v15
      • v18 = Addr <*int> {.autotmp_5} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v22 = Addr <*int> {.autotmp_6} v2
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v32 = Addr <*int> {.autotmp_5} v2
      • v34 = Store <mem> {*int} v33 v32 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v38 = NilCheck <void> v28 v35
      • v39 = PtrIndex <*interface {}> v28 v4
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v41 v40
      • v43 = Addr <*int> {.autotmp_6} v2
      • v44 = Store <mem> {*int} v33 v43 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v47 = NilCheck <void> v28 v45
      • v49 = PtrIndex <*interface {}> v28 v48
      • v50 = Store <mem> {interface {}} v49 v46 v45
      • v51 = NilCheck <void> v28 v50
      • v52 = IsSliceInBounds <bool> v4 v10
    • If v52b5 b6 (likely)
    • b4: ← b1
      • v13 = Sub64 <int> v7 v6
    • Plainb3
    • b5: ← b3
      • v55 = Sub64 <int> v10 v4
      • v56 = SliceMake <[]interface {}> v28 v55 v55
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
    • b6: ← b3
      • v54 = StaticCall <mem> {runtime.panicslice} v50
    • Exit v54
  • name w[int]: v4 v11 v16
  • name x[int]: v4 v5 v7
  • name y[int]: v4 v11 v13 v15
  • name z[int]: v4 v17
  • after decompose user [23800 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v4 = Const64 <int> [0]
      • v5 = Const64 <int> [5]
      • v6 = Const64 <int> [3]
      • v7 = Sub64 <int> v5 v6
      • v8 = Less64 <bool> v7 v6
      • v10 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v48 = Const64 <int> [1]
      • v57 = ConstString <string> {"%d, %d\n"}
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
    • If v8b2 b4
    • b2: ← b1
      • v11 = Mul64 <int> v7 v10
    • Plainb3
    • b3: ← b2 b4
      • v15 = Phi <int> v11 v13
      • v16 = Sub64 <int> v7 v15
      • v17 = Add64 <int> v7 v15
      • v18 = Addr <*int> {.autotmp_5} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v22 = Addr <*int> {.autotmp_6} v2
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v32 = Addr <*int> {.autotmp_5} v2
      • v34 = Store <mem> {*int} v33 v32 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v38 = NilCheck <void> v28 v35
      • v39 = PtrIndex <*interface {}> v28 v4
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v41 v40
      • v43 = Addr <*int> {.autotmp_6} v2
      • v44 = Store <mem> {*int} v33 v43 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v47 = NilCheck <void> v28 v45
      • v49 = PtrIndex <*interface {}> v28 v48
      • v50 = Store <mem> {interface {}} v49 v46 v45
      • v51 = NilCheck <void> v28 v50
      • v52 = IsSliceInBounds <bool> v4 v10
    • If v52b5 b6 (likely)
    • b4: ← b1
      • v13 = Sub64 <int> v7 v6
    • Plainb3
    • b5: ← b3
      • v55 = Sub64 <int> v10 v4
      • v56 = SliceMake <[]interface {}> v28 v55 v55
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
    • b6: ← b3
      • v54 = StaticCall <mem> {runtime.panicslice} v50
    • Exit v54
  • name w[int]: v4 v11 v16
  • name x[int]: v4 v5 v7
  • name y[int]: v4 v11 v13 v15
  • name z[int]: v4 v17
  • after opt [12046500 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v4 = Const64 <int> [0]
      • v5 = Const64 <int> [5]
      • v6 = Const64 <int> [3]
      • v7 = Const64 <int> [2]
      • v8 = ConstBool <bool> [true]
      • v10 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v48 = Const64 <int> [1]
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v59 = SB <uintptr>
      • v12 = Const64 <int> [7]
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v59
      • v57 = StringMake <string> v53 v12
    • Firstb2 b4
    • b2: ← b1
      • v11 = Const64 <int> [4]
    • Plainb3
    • b3: ← b2 b4
      • v15 = Phi <int> v11 v13
      • v16 = Sub64 <int> v7 v15
      • v17 = Add64 <int> v7 v15
      • v18 = Addr <*int> {.autotmp_5} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v22 = Addr <*int> {.autotmp_6} v2
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v32 = Addr <*int> {.autotmp_5} v2
      • v34 = Store <mem> {*int} v33 v32 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v38 = NilCheck <void> v28 v35
      • v39 = OffPtr <*interface {}> [0] v28
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v41 v40
      • v43 = Addr <*int> {.autotmp_6} v2
      • v44 = Store <mem> {*int} v33 v43 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v47 = NilCheck <void> v28 v45
      • v49 = OffPtr <*interface {}> [16] v28
      • v50 = Store <mem> {interface {}} v49 v46 v45
      • v51 = NilCheck <void> v28 v50
      • v52 = ConstBool <bool> [true]
      • v19 = Const64 <int> [0]
      • v14 = Const64 <int> [16]
      • v9 = Const64 <int> [16]
      • v64 = Const64 <int> [16]
    • Firstb5 b6 (likely)
    • b4: ← b1
      • v13 = Const64 <int> [-1]
    • Plainb3
    • b5: ← b3
      • v55 = Const64 <int> [2]
      • v56 = SliceMake <[]interface {}> v28 v55 v55
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
    • b6: ← b3
      • v54 = StaticCall <mem> {runtime.panicslice} v50
    • Exit v54
  • name w[int]: v4 v11 v16
  • name x[int]: v4 v5 v7
  • name y[int]: v4 v11 v13 v15
  • name z[int]: v4 v17
  • after zero arg cse [38000 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v4 = Const64 <int> [0]
      • v5 = Const64 <int> [5]
      • v6 = Const64 <int> [3]
      • v7 = Const64 <int> [2]
      • v8 = ConstBool <bool> [true]
      • v10 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v48 = Const64 <int> [1]
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v59 = SB <uintptr>
      • v12 = Const64 <int> [7]
      • v11 = Const64 <int> [4]
      • v14 = Const64 <int> [16]
      • v13 = Const64 <int> [-1]
      • v57 = StringMake <string> v53 v12
    • Firstb2 b4
    • b2: ← b1
    • Plainb3
    • b3: ← b2 b4
      • v15 = Phi <int> v11 v13
      • v16 = Sub64 <int> v7 v15
      • v17 = Add64 <int> v7 v15
      • v18 = Addr <*int> {.autotmp_5} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v22 = Addr <*int> {.autotmp_6} v2
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v32 = Addr <*int> {.autotmp_5} v2
      • v34 = Store <mem> {*int} v33 v32 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v38 = NilCheck <void> v28 v35
      • v39 = OffPtr <*interface {}> [0] v28
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v41 v40
      • v43 = Addr <*int> {.autotmp_6} v2
      • v44 = Store <mem> {*int} v33 v43 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v47 = NilCheck <void> v28 v45
      • v49 = OffPtr <*interface {}> [16] v28
      • v50 = Store <mem> {interface {}} v49 v46 v45
      • v51 = NilCheck <void> v28 v50
      • v52 = ConstBool <bool> [true]
      • v19 = Const64 <int> [0]
      • v64 = Const64 <int> [16]
      • v9 = Const64 <int> [16]
    • Firstb5 b6 (likely)
    • b4: ← b1
    • Plainb3
    • b5: ← b3
      • v55 = Const64 <int> [2]
      • v56 = SliceMake <[]interface {}> v28 v7 v7
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
    • b6: ← b3
      • v54 = StaticCall <mem> {runtime.panicslice} v50
    • Exit v54
  • name w[int]: v4 v11 v16
  • name x[int]: v4 v5 v7
  • name y[int]: v4 v11 v13 v15
  • name z[int]: v4 v17
  • after opt deadcode [33700 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v11 = Const64 <int> [4]
      • v57 = StringMake <string> v53 v12
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Sub64 <int> v7 v11
      • v17 = Add64 <int> v7 v11
      • v18 = Addr <*int> {.autotmp_5} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v22 = Addr <*int> {.autotmp_6} v2
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v32 = Addr <*int> {.autotmp_5} v2
      • v34 = Store <mem> {*int} v33 v32 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v38 = NilCheck <void> v28 v35
      • v39 = OffPtr <*interface {}> [0] v28
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v41 v40
      • v43 = Addr <*int> {.autotmp_6} v2
      • v44 = Store <mem> {*int} v33 v43 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v47 = NilCheck <void> v28 v45
      • v49 = OffPtr <*interface {}> [16] v28
      • v50 = Store <mem> {interface {}} v49 v46 v45
      • v51 = NilCheck <void> v28 v50
    • Plainb5
    • b5: ← b3
      • v56 = SliceMake <[]interface {}> v28 v7 v7
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • after generic cse [9359800 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v11 = Const64 <int> [4]
      • v57 = StringMake <string> v53 v12
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Sub64 <int> v7 v11
      • v17 = Add64 <int> v7 v11
      • v18 = Addr <*int> {.autotmp_5} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v22 = Addr <*int> {.autotmp_6} v2
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v32 = Addr <*int> {.autotmp_5} v2
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v38 = NilCheck <void> v25 v35
      • v39 = OffPtr <*interface {}> [0] v25
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v43 = Addr <*int> {.autotmp_6} v2
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v47 = NilCheck <void> v25 v45
      • v49 = OffPtr <*interface {}> [16] v25
      • v50 = Store <mem> {interface {}} v49 v46 v45
      • v51 = NilCheck <void> v25 v50
    • Plainb5
    • b5: ← b3
      • v56 = SliceMake <[]interface {}> v25 v7 v7
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • after phiopt [20900 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v11 = Const64 <int> [4]
      • v57 = StringMake <string> v53 v12
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Sub64 <int> v7 v11
      • v17 = Add64 <int> v7 v11
      • v18 = Addr <*int> {.autotmp_5} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v22 = Addr <*int> {.autotmp_6} v2
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v32 = Addr <*int> {.autotmp_5} v2
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v38 = NilCheck <void> v25 v35
      • v39 = OffPtr <*interface {}> [0] v25
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v43 = Addr <*int> {.autotmp_6} v2
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v47 = NilCheck <void> v25 v45
      • v49 = OffPtr <*interface {}> [16] v25
      • v50 = Store <mem> {interface {}} v49 v46 v45
      • v51 = NilCheck <void> v25 v50
    • Plainb5
    • b5: ← b3
      • v56 = SliceMake <[]interface {}> v25 v7 v7
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • after nilcheckelim [33500 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v11 = Const64 <int> [4]
      • v57 = StringMake <string> v53 v12
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Sub64 <int> v7 v11
      • v17 = Add64 <int> v7 v11
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v32 = Addr <*int> {.autotmp_5} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v43 = Addr <*int> {.autotmp_6} v2
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v50 = Store <mem> {interface {}} v49 v46 v45
    • Plainb5
    • b5: ← b3
      • v56 = SliceMake <[]interface {}> v25 v7 v7
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • after prove [30500 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v11 = Const64 <int> [4]
      • v57 = StringMake <string> v53 v12
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Sub64 <int> v7 v11
      • v17 = Add64 <int> v7 v11
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v32 = Addr <*int> {.autotmp_5} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v43 = Addr <*int> {.autotmp_6} v2
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v50 = Store <mem> {interface {}} v49 v46 v45
    • Plainb5
    • b5: ← b3
      • v56 = SliceMake <[]interface {}> v25 v7 v7
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • after loopbce [24400 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v11 = Const64 <int> [4]
      • v57 = StringMake <string> v53 v12
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Sub64 <int> v7 v11
      • v17 = Add64 <int> v7 v11
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v32 = Addr <*int> {.autotmp_5} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v43 = Addr <*int> {.autotmp_6} v2
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v50 = Store <mem> {interface {}} v49 v46 v45
    • Plainb5
    • b5: ← b3
      • v56 = SliceMake <[]interface {}> v25 v7 v7
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • after decompose builtin [25200 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v11 = Const64 <int> [4]
      • v57 = StringMake <string> v53 v12
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Sub64 <int> v7 v11
      • v17 = Add64 <int> v7 v11
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v32 = Addr <*int> {.autotmp_5} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v43 = Addr <*int> {.autotmp_6} v2
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v37 = Load <interface {}> v36 v35
      • v40 = Store <mem> {interface {}} v39 v37 v35
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v46 = Load <interface {}> v36 v45
      • v50 = Store <mem> {interface {}} v49 v46 v45
    • Plainb5
    • b5: ← b3
      • v56 = SliceMake <[]interface {}> v25 v7 v7
      • v60 = Store <mem> {string} v58 v57 v50
      • v62 = Store <mem> {[]interface {}} v61 v56 v60
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • after dec [1122900 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v11 = Const64 <int> [4]
      • v57 = StringMake <string> v53 v12
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Sub64 <int> v7 v11
      • v17 = Add64 <int> v7 v11
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v32 = Addr <*int> {.autotmp_5} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v43 = Addr <*int> {.autotmp_6} v2
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v54 = Load <*uint8> v36 v35
      • v9 = OffPtr <**uint8> [8] v36
      • v64 = OffPtr <**uint8> [8] v39
      • v19 = Store <mem> {uintptr} v39 v54 v35
      • v13 = OffPtr <**uint8> [8] v36
      • v14 = OffPtr <**uint8> [8] v49
      • v55 = Load <*uint8> v9 v35
      • v37 = IMake <interface {}> v54 v55
      • v40 = Store <mem> {*uint8} v64 v55 v19
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v52 = Load <*uint8> v36 v45
      • v15 = Load <*uint8> v13 v45
      • v59 = Store <mem> {uintptr} v49 v52 v45
      • v46 = IMake <interface {}> v52 v15
      • v50 = Store <mem> {*uint8} v14 v15 v59
    • Plainb5
    • b5: ← b3
      • v56 = SliceMake <[]interface {}> v25 v7 v7
      • v48 = OffPtr <*int> [8] v58
      • v10 = Store <mem> {*uint8} v58 v53 v50
      • v8 = OffPtr <*int> [16] v61
      • v5 = OffPtr <*int> [8] v61
      • v60 = Store <mem> {int} v48 v12 v10
      • v4 = Store <mem> {*uint8} v61 v25 v60
      • v6 = Store <mem> {int} v5 v7 v4
      • v62 = Store <mem> {int} v8 v7 v6
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • after late opt [30800 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v41 = Addr <*uint8> {type.int} v3
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v11 = Const64 <int> [4]
      • v57 = StringMake <string> v53 v12
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Const64 <int> [-2]
      • v17 = Const64 <int> [6]
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v28 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v32 = Addr <*int> {.autotmp_5} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v43 = Addr <*int> {.autotmp_6} v2
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v54 = Load <*uint8> v36 v35
      • v9 = OffPtr <**uint8> [24] v2
      • v64 = OffPtr <**uint8> [8] v25
      • v19 = Store <mem> {uintptr} v39 v54 v35
      • v13 = OffPtr <**uint8> [24] v2
      • v14 = OffPtr <**uint8> [24] v25
      • v55 = Load <*uint8> v9 v35
      • v37 = IMake <interface {}> v54 v55
      • v40 = Store <mem> {*uint8} v64 v55 v19
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v52 = Load <*uint8> v36 v45
      • v15 = Load <*uint8> v13 v45
      • v59 = Store <mem> {uintptr} v49 v52 v45
      • v46 = IMake <interface {}> v52 v15
      • v50 = Store <mem> {*uint8} v14 v15 v59
    • Plainb5
    • b5: ← b3
      • v56 = SliceMake <[]interface {}> v25 v7 v7
      • v48 = OffPtr <*int> [8] v2
      • v10 = Store <mem> {*uint8} v58 v53 v50
      • v8 = OffPtr <*int> [32] v2
      • v5 = OffPtr <*int> [24] v2
      • v60 = Store <mem> {int} v48 v12 v10
      • v4 = Store <mem> {*uint8} v61 v25 v60
      • v6 = Store <mem> {int} v5 v7 v4
      • v62 = Store <mem> {int} v8 v7 v6
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • after generic deadcode [35800 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Const64 <int> [-2]
      • v17 = Const64 <int> [6]
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v54 = Load <*uint8> v36 v35
      • v9 = OffPtr <**uint8> [24] v2
      • v64 = OffPtr <**uint8> [8] v25
      • v19 = Store <mem> {uintptr} v39 v54 v35
      • v13 = OffPtr <**uint8> [24] v2
      • v14 = OffPtr <**uint8> [24] v25
      • v55 = Load <*uint8> v9 v35
      • v40 = Store <mem> {*uint8} v64 v55 v19
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v52 = Load <*uint8> v36 v45
      • v15 = Load <*uint8> v13 v45
      • v59 = Store <mem> {uintptr} v49 v52 v45
      • v50 = Store <mem> {*uint8} v14 v15 v59
    • Plainb5
    • b5: ← b3
      • v48 = OffPtr <*int> [8] v2
      • v10 = Store <mem> {*uint8} v58 v53 v50
      • v8 = OffPtr <*int> [32] v2
      • v5 = OffPtr <*int> [24] v2
      • v60 = Store <mem> {int} v48 v12 v10
      • v4 = Store <mem> {*uint8} v61 v25 v60
      • v6 = Store <mem> {int} v5 v7 v4
      • v62 = Store <mem> {int} v8 v7 v6
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • after check bce [20300 ns]

    • b1:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
    • Plainb2
    • b2: ← b1
    • Plainb3
    • b3: ← b2
      • v16 = Const64 <int> [-2]
      • v17 = Const64 <int> [6]
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v54 = Load <*uint8> v36 v35
      • v9 = OffPtr <**uint8> [24] v2
      • v64 = OffPtr <**uint8> [8] v25
      • v19 = Store <mem> {uintptr} v39 v54 v35
      • v13 = OffPtr <**uint8> [24] v2
      • v14 = OffPtr <**uint8> [24] v25
      • v55 = Load <*uint8> v9 v35
      • v40 = Store <mem> {*uint8} v64 v55 v19
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v52 = Load <*uint8> v36 v45
      • v15 = Load <*uint8> v13 v45
      • v59 = Store <mem> {uintptr} v49 v52 v45
      • v50 = Store <mem> {*uint8} v14 v15 v59
    • Plainb5
    • b5: ← b3
      • v48 = OffPtr <*int> [8] v2
      • v10 = Store <mem> {*uint8} v58 v53 v50
      • v8 = OffPtr <*int> [32] v2
      • v5 = OffPtr <*int> [24] v2
      • v60 = Store <mem> {int} v48 v12 v10
      • v4 = Store <mem> {*uint8} v61 v25 v60
      • v6 = Store <mem> {int} v5 v7 v4
      • v62 = Store <mem> {int} v8 v7 v6
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • after fuse [22800 ns]

    • b1:
    • BlockInvalid
    • b2:
    • BlockInvalid
    • b3:
    • BlockInvalid
    • b5:
      • v16 = Const64 <int> [-2]
      • v17 = Const64 <int> [6]
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v54 = Load <*uint8> v36 v35
      • v9 = OffPtr <**uint8> [24] v2
      • v64 = OffPtr <**uint8> [8] v25
      • v19 = Store <mem> {uintptr} v39 v54 v35
      • v13 = OffPtr <**uint8> [24] v2
      • v14 = OffPtr <**uint8> [24] v25
      • v48 = OffPtr <*int> [8] v2
      • v8 = OffPtr <*int> [32] v2
      • v5 = OffPtr <*int> [24] v2
      • v55 = Load <*uint8> v9 v35
      • v40 = Store <mem> {*uint8} v64 v55 v19
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v52 = Load <*uint8> v36 v45
      • v15 = Load <*uint8> v13 v45
      • v59 = Store <mem> {uintptr} v49 v52 v45
      • v50 = Store <mem> {*uint8} v14 v15 v59
      • v10 = Store <mem> {*uint8} v58 v53 v50
      • v60 = Store <mem> {int} v48 v12 v10
      • v4 = Store <mem> {*uint8} v61 v25 v60
      • v6 = Store <mem> {int} v5 v7 v4
      • v62 = Store <mem> {int} v8 v7 v6
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • after dse [40400 ns]

    • b1:
    • BlockInvalid
    • b2:
    • BlockInvalid
    • b3:
    • BlockInvalid
    • b5:
      • v16 = Const64 <int> [-2]
      • v17 = Const64 <int> [6]
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v54 = Load <*uint8> v36 v35
      • v9 = OffPtr <**uint8> [24] v2
      • v64 = OffPtr <**uint8> [8] v25
      • v19 = Store <mem> {uintptr} v39 v54 v35
      • v13 = OffPtr <**uint8> [24] v2
      • v14 = OffPtr <**uint8> [24] v25
      • v48 = OffPtr <*int> [8] v2
      • v8 = OffPtr <*int> [32] v2
      • v5 = OffPtr <*int> [24] v2
      • v55 = Load <*uint8> v9 v35
      • v40 = Store <mem> {*uint8} v64 v55 v19
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v52 = Load <*uint8> v36 v45
      • v15 = Load <*uint8> v13 v45
      • v59 = Store <mem> {uintptr} v49 v52 v45
      • v50 = Store <mem> {*uint8} v14 v15 v59
      • v10 = Store <mem> {*uint8} v58 v53 v50
      • v60 = Store <mem> {int} v48 v12 v10
      • v4 = Store <mem> {*uint8} v61 v25 v60
      • v6 = Store <mem> {int} v5 v7 v4
      • v62 = Store <mem> {int} v8 v7 v6
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • after writebarrier [125900 ns]

    • b1:
    • BlockInvalid
    • b2:
    • BlockInvalid
    • b3:
    • BlockInvalid
    • b5:
      • v16 = Const64 <int> [-2]
      • v17 = Const64 <int> [6]
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v54 = Load <*uint8> v36 v35
      • v9 = OffPtr <**uint8> [24] v2
      • v64 = OffPtr <**uint8> [8] v25
      • v19 = Store <mem> {uintptr} v39 v54 v35
      • v13 = OffPtr <**uint8> [24] v2
      • v14 = OffPtr <**uint8> [24] v25
      • v48 = OffPtr <*int> [8] v2
      • v8 = OffPtr <*int> [32] v2
      • v5 = OffPtr <*int> [24] v2
      • v55 = Load <*uint8> v9 v35
      • v40 = Store <mem> {*uint8} v64 v55 v19
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v52 = Load <*uint8> v36 v45
      • v15 = Load <*uint8> v13 v45
      • v59 = Store <mem> {uintptr} v49 v52 v45
      • v50 = Store <mem> {*uint8} v14 v15 v59
      • v10 = Store <mem> {*uint8} v58 v53 v50
      • v60 = Store <mem> {int} v48 v12 v10
      • v4 = Store <mem> {*uint8} v61 v25 v60
      • v6 = Store <mem> {int} v5 v7 v4
      • v62 = Store <mem> {int} v8 v7 v6
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • after tighten [10784400 ns]

    • b1:
    • BlockInvalid
    • b2:
    • BlockInvalid
    • b3:
    • BlockInvalid
    • b5:
      • v16 = Const64 <int> [-2]
      • v17 = Const64 <int> [6]
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = Const64 <int> [2]
      • v29 = Addr <*uint8> {type.int} v3
      • v30 = OffPtr <**byte> [0] v2
      • v33 = OffPtr <**int> [8] v2
      • v36 = OffPtr <*interface {}> [16] v2
      • v58 = OffPtr <*string> [0] v2
      • v61 = OffPtr <*[]interface {}> [16] v2
      • v53 = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 = Const64 <int> [7]
      • v18 = Addr <*int> {.autotmp_5} v2
      • v22 = Addr <*int> {.autotmp_6} v2
      • v25 = Addr <*[2]interface {}> {.autotmp_4} v2
      • v39 = OffPtr <*interface {}> [0] v25
      • v49 = OffPtr <*interface {}> [16] v25
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = Store <mem> {int} v18 v16 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = Store <mem> {int} v22 v17 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v27 = Zero <mem> {[2]interface {}} [32] v25 v26
      • v31 = Store <mem> {*byte} v30 v29 v27
      • v34 = Store <mem> {*int} v33 v18 v31
      • v35 = StaticCall <mem> {runtime.convT2E64} [32] v34
      • v54 = Load <*uint8> v36 v35
      • v9 = OffPtr <**uint8> [24] v2
      • v64 = OffPtr <**uint8> [8] v25
      • v19 = Store <mem> {uintptr} v39 v54 v35
      • v13 = OffPtr <**uint8> [24] v2
      • v14 = OffPtr <**uint8> [24] v25
      • v48 = OffPtr <*int> [8] v2
      • v8 = OffPtr <*int> [32] v2
      • v5 = OffPtr <*int> [24] v2
      • v55 = Load <*uint8> v9 v35
      • v40 = Store <mem> {*uint8} v64 v55 v19
      • v42 = Store <mem> {*byte} v30 v29 v40
      • v44 = Store <mem> {*int} v33 v22 v42
      • v45 = StaticCall <mem> {runtime.convT2E64} [32] v44
      • v52 = Load <*uint8> v36 v45
      • v15 = Load <*uint8> v13 v45
      • v59 = Store <mem> {uintptr} v49 v52 v45
      • v50 = Store <mem> {*uint8} v14 v15 v59
      • v10 = Store <mem> {*uint8} v58 v53 v50
      • v60 = Store <mem> {int} v48 v12 v10
      • v4 = Store <mem> {*uint8} v61 v25 v60
      • v6 = Store <mem> {int} v5 v7 v4
      • v62 = Store <mem> {int} v8 v7 v6
      • v63 = StaticCall <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • after lower [10257000 ns]

    • b1:
    • BlockInvalid
    • b2:
    • BlockInvalid
    • b3:
    • BlockInvalid
    • b5:
      • v16 = MOVQconst <int> [-2]
      • v17 = MOVQconst <int> [6]
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = MOVQconst <int> [2]
      • v29 = LEAQ <*uint8> {type.int} v3
      • v30 = Copy <uintptr> v2
      • v33 = ADDQconst <**int> [8] v2
      • v36 = ADDQconst <*interface {}> [16] v2
      • v58 = Copy <uintptr> v2
      • v61 = ADDQconst <*[]interface {}> [16] v2
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v12 = MOVQconst <int> [7]
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v39 = LEAQ <*interface {}> {.autotmp_4} v2
      • v49 = LEAQ <*interface {}> {.autotmp_4} [16] v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v9 = ADDQconst <**uint8> [24] v2
      • v64 = LEAQ <**uint8> {.autotmp_4} [8] v2
      • v13 = ADDQconst <**uint8> [24] v2
      • v14 = LEAQ <**uint8> {.autotmp_4} [24] v2
      • v48 = ADDQconst <*int> [8] v2
      • v8 = ADDQconst <*int> [32] v2
      • v5 = ADDQconst <*int> [24] v2
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • after lowered cse [59700 ns]

    • b1:
    • BlockInvalid
    • b2:
    • BlockInvalid
    • b3:
    • BlockInvalid
    • b5:
      • v16 = MOVQconst <int> [-2]
      • v17 = MOVQconst <int> [6]
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v7 = MOVQconst <int> [2]
      • v29 = LEAQ <*uint8> {type.int} v3
      • v30 = Copy <uintptr> v2
      • v33 = ADDQconst <**int> [8] v2
      • v36 = ADDQconst <*interface {}> [16] v2
      • v58 = Copy <uintptr> v2
      • v61 = ADDQconst <*[]interface {}> [16] v2
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v12 = MOVQconst <int> [7]
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v39 = LEAQ <*interface {}> {.autotmp_4} v2
      • v49 = LEAQ <*interface {}> {.autotmp_4} [16] v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v9 = ADDQconst <**uint8> [24] v2
      • v64 = LEAQ <**uint8> {.autotmp_4} [8] v2
      • v13 = ADDQconst <**uint8> [24] v2
      • v14 = LEAQ <**uint8> {.autotmp_4} [24] v2
      • v48 = ADDQconst <*int> [8] v2
      • v8 = ADDQconst <*int> [32] v2
      • v5 = ADDQconst <*int> [24] v2
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • after lowered deadcode [40400 ns]

    • b5:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after checkLower [121900 ns]

    • b5:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after late phielim [174400 ns]

    • b5:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after late copyelim [22000 ns]

    • b5:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after phi tighten [21400 ns]

    • b5:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after late deadcode [28200 ns]

    • b5:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after critical [22100 ns]

    • b5:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after likelyadjust [19500 ns]

    • b5:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after layout [19400 ns]

    • b5:
      • v1 = InitMem <mem>
      • v2 = SP <uintptr>
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v31 = MOVQstore <mem> v2 v29 v27
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after schedule [45200 ns]

    • b5:
      • v1 = InitMem <mem>
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v2 = SP <uintptr>
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v31 = MOVQstore <mem> v2 v29 v27
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after late nilcheck [19700 ns]

    • b5:
      • v1 = InitMem <mem>
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v2 = SP <uintptr>
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v31 = MOVQstore <mem> v2 v29 v27
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after flagalloc [19400 ns]

    • b5:
      • v1 = InitMem <mem>
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v2 = SP <uintptr>
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v3 = SB <uintptr>
      • v29 = LEAQ <*uint8> {type.int} v3
      • v31 = MOVQstore <mem> v2 v29 v27
      • v18 = LEAQ <*int> {.autotmp_5} v2
      • v34 = MOVQstore <mem> [8] v2 v18 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35
      • v55 = MOVQload <*uint8> [24] v2 v35
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v42 = MOVQstore <mem> v2 v29 v40
      • v22 = LEAQ <*int> {.autotmp_6} v2
      • v44 = MOVQstore <mem> [8] v2 v22 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v15 = MOVQload <*uint8> [24] v2 v45
      • v52 = MOVQload <*uint8> [16] v2 v45
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v53 = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v10 = MOVQstore <mem> v2 v53 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v25 = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v4 = MOVQstore <mem> [16] v2 v25 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after regalloc [386600 ns]

    • b5:
      • v1 = InitMem <mem>
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v2 = SP <uintptr> : SP
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v3 = SB <uintptr> : SB
      • v12 = LEAQ <*uint8> {type.int} v3 : AX
      • v31 = MOVQstore <mem> v2 v12 v27
      • v61 = LEAQ <*int> {.autotmp_5} v2 : CX
      • v34 = MOVQstore <mem> [8] v2 v61 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35 : AX
      • v55 = MOVQload <*uint8> [24] v2 v35 : CX
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v58 = LEAQ <*uint8> {type.int} v3 : AX
      • v42 = MOVQstore <mem> v2 v58 v40
      • v36 = LEAQ <*int> {.autotmp_6} v2 : AX
      • v44 = MOVQstore <mem> [8] v2 v36 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v15 = MOVQload <*uint8> [24] v2 v45 : AX
      • v52 = MOVQload <*uint8> [16] v2 v45 : CX
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v33 = LEAQ <*uint8> {go.string."%d, %d\n"} v3 : AX
      • v10 = MOVQstore <mem> v2 v33 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v30 = LEAQ <*[2]interface {}> {.autotmp_4} v2 : AX
      • v4 = MOVQstore <mem> [16] v2 v30 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after loop rotate [150200 ns]

    • b5:
      • v1 = InitMem <mem>
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v2 = SP <uintptr> : SP
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v3 = SB <uintptr> : SB
      • v12 = LEAQ <*uint8> {type.int} v3 : AX
      • v31 = MOVQstore <mem> v2 v12 v27
      • v61 = LEAQ <*int> {.autotmp_5} v2 : CX
      • v34 = MOVQstore <mem> [8] v2 v61 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35 : AX
      • v55 = MOVQload <*uint8> [24] v2 v35 : CX
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v58 = LEAQ <*uint8> {type.int} v3 : AX
      • v42 = MOVQstore <mem> v2 v58 v40
      • v36 = LEAQ <*int> {.autotmp_6} v2 : AX
      • v44 = MOVQstore <mem> [8] v2 v36 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v15 = MOVQload <*uint8> [24] v2 v45 : AX
      • v52 = MOVQload <*uint8> [16] v2 v45 : CX
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v33 = LEAQ <*uint8> {go.string."%d, %d\n"} v3 : AX
      • v10 = MOVQstore <mem> v2 v33 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v30 = LEAQ <*[2]interface {}> {.autotmp_4} v2 : AX
      • v4 = MOVQstore <mem> [16] v2 v30 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after stackframe [23200 ns]

    • b5:
      • v1 = InitMem <mem>
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v2 = SP <uintptr> : SP
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v3 = SB <uintptr> : SB
      • v12 = LEAQ <*uint8> {type.int} v3 : AX
      • v31 = MOVQstore <mem> v2 v12 v27
      • v61 = LEAQ <*int> {.autotmp_5} v2 : CX
      • v34 = MOVQstore <mem> [8] v2 v61 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35 : AX
      • v55 = MOVQload <*uint8> [24] v2 v35 : CX
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v58 = LEAQ <*uint8> {type.int} v3 : AX
      • v42 = MOVQstore <mem> v2 v58 v40
      • v36 = LEAQ <*int> {.autotmp_6} v2 : AX
      • v44 = MOVQstore <mem> [8] v2 v36 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v15 = MOVQload <*uint8> [24] v2 v45 : AX
      • v52 = MOVQload <*uint8> [16] v2 v45 : CX
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v33 = LEAQ <*uint8> {go.string."%d, %d\n"} v3 : AX
      • v10 = MOVQstore <mem> v2 v33 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v30 = LEAQ <*[2]interface {}> {.autotmp_4} v2 : AX
      • v4 = MOVQstore <mem> [16] v2 v30 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    after trim [20900 ns]

    • b5:
      • v1 = InitMem <mem>
      • v20 = VarDef <mem> {.autotmp_5} v1
      • v2 = SP <uintptr> : SP
      • v21 = MOVQstoreconst <mem> {.autotmp_5} [val=-2,off=0] v2 v20
      • v23 = VarDef <mem> {.autotmp_6} v21
      • v24 = MOVQstoreconst <mem> {.autotmp_6} [val=6,off=0] v2 v23
      • v26 = VarDef <mem> {.autotmp_4} v24
      • v37 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=0] v2 v26
      • v46 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=8] v2 v37
      • v56 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=16] v2 v46
      • v27 = MOVQstoreconst <mem> {.autotmp_4} [val=0,off=24] v2 v56
      • v3 = SB <uintptr> : SB
      • v12 = LEAQ <*uint8> {type.int} v3 : AX
      • v31 = MOVQstore <mem> v2 v12 v27
      • v61 = LEAQ <*int> {.autotmp_5} v2 : CX
      • v34 = MOVQstore <mem> [8] v2 v61 v31
      • v35 = CALLstatic <mem> {runtime.convT2E64} [32] v34
      • v54 = MOVQload <*uint8> [16] v2 v35 : AX
      • v55 = MOVQload <*uint8> [24] v2 v35 : CX
      • v19 = MOVQstore <mem> {.autotmp_4} v2 v54 v35
      • v40 = MOVQstore <mem> {.autotmp_4} [8] v2 v55 v19
      • v58 = LEAQ <*uint8> {type.int} v3 : AX
      • v42 = MOVQstore <mem> v2 v58 v40
      • v36 = LEAQ <*int> {.autotmp_6} v2 : AX
      • v44 = MOVQstore <mem> [8] v2 v36 v42
      • v45 = CALLstatic <mem> {runtime.convT2E64} [32] v44
      • v15 = MOVQload <*uint8> [24] v2 v45 : AX
      • v52 = MOVQload <*uint8> [16] v2 v45 : CX
      • v59 = MOVQstore <mem> {.autotmp_4} [16] v2 v52 v45
      • v50 = MOVQstore <mem> {.autotmp_4} [24] v2 v15 v59
      • v33 = LEAQ <*uint8> {go.string."%d, %d\n"} v3 : AX
      • v10 = MOVQstore <mem> v2 v33 v50
      • v60 = MOVQstoreconst <mem> [val=7,off=8] v2 v10
      • v30 = LEAQ <*[2]interface {}> {.autotmp_4} v2 : AX
      • v4 = MOVQstore <mem> [16] v2 v30 v60
      • v6 = MOVQstoreconst <mem> [val=2,off=24] v2 v4
      • v62 = MOVQstoreconst <mem> [val=2,off=32] v2 v6
      • v63 = CALLstatic <mem> {fmt.Printf} [64] v62
      • v65 = VarKill <mem> {.autotmp_6} v63
      • v66 = VarKill <mem> {.autotmp_5} v65
      • v67 = VarKill <mem> {.autotmp_4} v66
    • Ret v67

    genssa

    00000 (/root/main.go:5) TEXT "".ssa(SB)
    00001 (/root/main.go:5) FUNCDATA $0, gclocals·69c1753bd5f81501d95132d08af04464(SB)
    00002 (/root/main.go:5) FUNCDATA $1, gclocals·037c1360cc57929d7f2b26c892bdc785(SB)
    v21
    00003 (/root/main.go:19) MOVQ $-2, ""..autotmp_5-40(SP)
    v24
    00004 (/root/main.go:19) MOVQ $6, ""..autotmp_6-48(SP)
    v37
    00005 (/root/main.go:19) MOVQ $0, ""..autotmp_4-32(SP)
    v46
    00006 (/root/main.go:19) MOVQ $0, ""..autotmp_4-24(SP)
    v56
    00007 (/root/main.go:19) MOVQ $0, ""..autotmp_4-16(SP)
    v27
    00008 (/root/main.go:19) MOVQ $0, ""..autotmp_4-8(SP)
    v12
    00009 (/root/main.go:19) LEAQ type.int(SB), AX
    v31
    00010 (/root/main.go:19) MOVQ AX, (SP)
    v61
    00011 (/root/main.go:19) LEAQ ""..autotmp_5-40(SP), CX
    v34
    00012 (/root/main.go:19) MOVQ CX, 8(SP)
    v35
    00013 (/root/main.go:19) PCDATA $0, $1
    v35
    00014 (/root/main.go:19) CALL runtime.convT2E64(SB)
    v54
    00015 (/root/main.go:19) MOVQ 16(SP), AX
    v55
    00016 (/root/main.go:19) MOVQ 24(SP), CX
    v19
    00017 (/root/main.go:19) MOVQ AX, ""..autotmp_4-32(SP)
    v40
    00018 (/root/main.go:19) MOVQ CX, ""..autotmp_4-24(SP)
    v58
    00019 (/root/main.go:19) LEAQ type.int(SB), AX
    v42
    00020 (/root/main.go:19) MOVQ AX, (SP)
    v36
    00021 (/root/main.go:19) LEAQ ""..autotmp_6-48(SP), AX
    v44
    00022 (/root/main.go:19) MOVQ AX, 8(SP)
    v45
    00023 (/root/main.go:19) PCDATA $0, $1
    v45
    00024 (/root/main.go:19) CALL runtime.convT2E64(SB)
    v15
    00025 (/root/main.go:19) MOVQ 24(SP), AX
    v52
    00026 (/root/main.go:19) MOVQ 16(SP), CX
    v59
    00027 (/root/main.go:19) MOVQ CX, ""..autotmp_4-16(SP)
    v50
    00028 (/root/main.go:19) MOVQ AX, ""..autotmp_4-8(SP)
    v33
    00029 (/root/main.go:19) LEAQ go.string."%d, %d\n"(SB), AX
    v10
    00030 (/root/main.go:19) MOVQ AX, (SP)
    v60
    00031 (/root/main.go:19) MOVQ $7, 8(SP)
    v30
    00032 (/root/main.go:19) LEAQ ""..autotmp_4-32(SP), AX
    v4
    00033 (/root/main.go:19) MOVQ AX, 16(SP)
    v6
    00034 (/root/main.go:19) MOVQ $2, 24(SP)
    v62
    00035 (/root/main.go:19) MOVQ $2, 32(SP)
    v63
    00036 (/root/main.go:19) PCDATA $0, $1
    v63
    00037 (/root/main.go:19) CALL fmt.Printf(SB)
    b5
    00038 (/root/main.go:20) RET
    00039 (<unknown line number>) END