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] (w[int], x[int], y[int], z[int])
    • v5 (?) = Const64 <int> [5] (x[int])
    • v6 (?) = Const64 <int> [3]
    • v7 (9) = Sub64 <int> v5 v6 (x[int])
    • v8 (10) = Less64 <bool> v7 v6
    • v10 (?) = Const64 <int> [2]
    • v23 (?) = Addr <*uint8> {type.int} v3
    • v24 (?) = OffPtr <**byte> [0] v2
    • v26 (?) = OffPtr <*int> [8] v2
    • v29 (?) = OffPtr <*interface {}> [16] v2
    • v34 (?) = Addr <*uint8> {type.int} v3
    • v40 (?) = Const64 <int> [1]
    • v49 (?) = ConstString <string> {"%d, %d\n"}
    • v50 (?) = OffPtr <*string> [0] v2
    • v53 (?) = OffPtr <*[]interface {}> [16] v2
    • v56 (?) = OffPtr <*int> [40] v2
  • If v8b2 b4 (line 10)
  • b2: ← b1
    • v9 (11) = Copy <int> v7 (x[int])
    • v11 (11) = Mul64 <int> v9 v10 (w[int], y[int])
  • Plainb3 (line 12)
  • b3: ← b2 b4
    • v14 (16) = Phi <int> v9 v12 (x[int])
    • v15 (16) = Phi <int> v11 v13 (y[int])
    • v16 (16) = Sub64 <int> v14 v15 (w[int])
    • v17 (17) = Add64 <int> v14 v15 (z[int])
    • v18 (19) = Copy <mem> v1
    • v19 (19) = VarDef <mem> {.autotmp_4} v18
    • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
    • v21 (19) = Zero <mem> {[2]interface {}} [32] v20 v19
    • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
    • v25 (19) = Store <mem> {*byte} v24 v23 v21
    • v27 (19) = Store <mem> {int} v26 v16 v25
    • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
    • v30 (19) = Load <interface {}> v29 v28
    • v31 (19) = NilCheck <void> v22 v28
    • v32 (19) = PtrIndex <*interface {}> v22 v4
    • v33 (19) = Store <mem> {interface {}} v32 v30 v28
    • v35 (19) = Store <mem> {*byte} v24 v34 v33
    • v36 (19) = Store <mem> {int} v26 v17 v35
    • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
    • v38 (19) = Load <interface {}> v29 v37
    • v39 (19) = NilCheck <void> v22 v37
    • v41 (19) = PtrIndex <*interface {}> v22 v40
    • v42 (19) = Store <mem> {interface {}} v41 v38 v37
    • v43 (19) = NilCheck <void> v22 v42
    • v44 (19) = IsSliceInBounds <bool> v4 v10
  • If v44b5 b6 (likely) (line 19)
  • b4: ← b1
    • v12 (14) = Copy <int> v7 (x[int])
    • v13 (14) = Sub64 <int> v12 v6 (y[int])
  • Plainb3 (line 14)
  • b5: ← b3
    • v47 (19) = Sub64 <int> v10 v4
    • v48 (19) = SliceMake <[]interface {}> v22 v47 v47
    • v51 (19) = Copy <mem> v42
    • v52 (19) = Store <mem> {string} v50 v49 v51
    • v54 (19) = Store <mem> {[]interface {}} v53 v48 v52
    • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
    • v57 (5) = VarKill <mem> {.autotmp_4} v55
  • Ret v57 (line 20)
  • b6: ← b3
    • v45 (19) = Copy <mem> v42
    • v46 (19) = StaticCall <mem> {runtime.panicslice} v45
  • Exit v46 (line 19)
  • 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
  • number lines [29400 ns]

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

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

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

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

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

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

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

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

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v34 (?) = Addr <*uint8> {type.int} v3
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v11 (+11) = Const64 <int> [4] (w[int], y[int])
      • v49 (?) = StringMake <string> v45 v12
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Sub64 <int> v7 v11 (w[int])
      • v17 (+17) = Add64 <int> v7 v11 (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v30 (19) = Load <interface {}> v29 v28
      • v31 (19) = NilCheck <void> v22 v28
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v33 (19) = Store <mem> {interface {}} v32 v30 v28
      • v35 (19) = Store <mem> {*byte} v24 v34 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v38 (19) = Load <interface {}> v29 v37
      • v39 (19) = NilCheck <void> v22 v37
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v42 (19) = Store <mem> {interface {}} v41 v38 v37
      • v43 (19) = NilCheck <void> v22 v42
    • Plainb5 (line 19)
    • b5: ← b3
      • v48 (+19) = SliceMake <[]interface {}> v22 v7 v7
      • v52 (19) = Store <mem> {string} v50 v49 v42
      • v54 (19) = Store <mem> {[]interface {}} v53 v48 v52
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • generic cse [377200 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v34 (?) = Addr <*uint8> {type.int} v3
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v11 (+11) = Const64 <int> [4] (w[int], y[int])
      • v49 (?) = StringMake <string> v45 v12
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Sub64 <int> v7 v11 (w[int])
      • v17 (+17) = Add64 <int> v7 v11 (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v30 (19) = Load <interface {}> v29 v28
      • v31 (19) = NilCheck <void> v22 v28
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v33 (19) = Store <mem> {interface {}} v32 v30 v28
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v38 (19) = Load <interface {}> v29 v37
      • v39 (19) = NilCheck <void> v22 v37
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v42 (19) = Store <mem> {interface {}} v41 v38 v37
      • v43 (19) = NilCheck <void> v22 v42
    • Plainb5 (line 19)
    • b5: ← b3
      • v48 (+19) = SliceMake <[]interface {}> v22 v7 v7
      • v52 (19) = Store <mem> {string} v50 v49 v42
      • v54 (19) = Store <mem> {[]interface {}} v53 v48 v52
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • phiopt [21500 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v34 (?) = Addr <*uint8> {type.int} v3
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v11 (+11) = Const64 <int> [4] (w[int], y[int])
      • v49 (?) = StringMake <string> v45 v12
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Sub64 <int> v7 v11 (w[int])
      • v17 (+17) = Add64 <int> v7 v11 (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v30 (19) = Load <interface {}> v29 v28
      • v31 (19) = NilCheck <void> v22 v28
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v33 (19) = Store <mem> {interface {}} v32 v30 v28
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v38 (19) = Load <interface {}> v29 v37
      • v39 (19) = NilCheck <void> v22 v37
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v42 (19) = Store <mem> {interface {}} v41 v38 v37
      • v43 (19) = NilCheck <void> v22 v42
    • Plainb5 (line 19)
    • b5: ← b3
      • v48 (+19) = SliceMake <[]interface {}> v22 v7 v7
      • v52 (19) = Store <mem> {string} v50 v49 v42
      • v54 (19) = Store <mem> {[]interface {}} v53 v48 v52
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • nilcheckelim [34500 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v34 (?) = Addr <*uint8> {type.int} v3
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v11 (+11) = Const64 <int> [4] (w[int], y[int])
      • v49 (?) = StringMake <string> v45 v12
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Sub64 <int> v7 v11 (w[int])
      • v17 (+17) = Add64 <int> v7 v11 (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v30 (19) = Load <interface {}> v29 v28
      • v33 (19) = Store <mem> {interface {}} v32 v30 v28
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v38 (19) = Load <interface {}> v29 v37
      • v42 (19) = Store <mem> {interface {}} v41 v38 v37
    • Plainb5 (line 19)
    • b5: ← b3
      • v48 (+19) = SliceMake <[]interface {}> v22 v7 v7
      • v52 (19) = Store <mem> {string} v50 v49 v42
      • v54 (19) = Store <mem> {[]interface {}} v53 v48 v52
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • prove [178200 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v34 (?) = Addr <*uint8> {type.int} v3
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v11 (+11) = Const64 <int> [4] (w[int], y[int])
      • v49 (?) = StringMake <string> v45 v12
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Sub64 <int> v7 v11 (w[int])
      • v17 (+17) = Add64 <int> v7 v11 (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v30 (19) = Load <interface {}> v29 v28
      • v33 (19) = Store <mem> {interface {}} v32 v30 v28
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v38 (19) = Load <interface {}> v29 v37
      • v42 (19) = Store <mem> {interface {}} v41 v38 v37
    • Plainb5 (line 19)
    • b5: ← b3
      • v48 (+19) = SliceMake <[]interface {}> v22 v7 v7
      • v52 (19) = Store <mem> {string} v50 v49 v42
      • v54 (19) = Store <mem> {[]interface {}} v53 v48 v52
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • decompose builtin [45500 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v34 (?) = Addr <*uint8> {type.int} v3
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v11 (+11) = Const64 <int> [4] (w[int], y[int])
      • v49 (?) = StringMake <string> v45 v12
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Sub64 <int> v7 v11 (w[int])
      • v17 (+17) = Add64 <int> v7 v11 (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = Load <uintptr> v29 v28
      • v31 (19) = OffPtr <**uint8> [8] v29
      • v46 (19) = OffPtr <**uint8> [8] v32
      • v47 (19) = Store <mem> {uintptr} v32 v43 v28
      • v18 (19) = OffPtr <**uint8> [8] v29
      • v44 (19) = OffPtr <**uint8> [8] v41
      • v39 (19) = Load <*uint8> v31 v28
      • v30 (19) = IMake <interface {}> v43 v39
      • v33 (19) = Store <mem> {*uint8} v46 v39 v47
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = Load <uintptr> v29 v37
      • v56 (19) = Load <*uint8> v18 v37
      • v15 (19) = Store <mem> {uintptr} v41 v9 v37
      • v38 (19) = IMake <interface {}> v9 v56
      • v42 (19) = Store <mem> {*uint8} v44 v56 v15
    • Plainb5 (line 19)
    • b5: ← b3
      • v48 (+19) = SliceMake <[]interface {}> v22 v7 v7
      • v13 (19) = OffPtr <*int> [8] v50
      • v14 (19) = Store <mem> {*uint8} v50 v45 v42
      • v51 (19) = OffPtr <*int> [16] v53
      • v10 (19) = OffPtr <*int> [8] v53
      • v52 (19) = Store <mem> {int} v13 v12 v14
      • v8 (19) = Store <mem> {*uint8} v53 v22 v52
      • v40 (19) = Store <mem> {int} v10 v7 v8
      • v54 (19) = Store <mem> {int} v51 v7 v40
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • softfloat [21100 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v34 (?) = Addr <*uint8> {type.int} v3
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v11 (+11) = Const64 <int> [4] (w[int], y[int])
      • v49 (?) = StringMake <string> v45 v12
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Sub64 <int> v7 v11 (w[int])
      • v17 (+17) = Add64 <int> v7 v11 (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = Load <uintptr> v29 v28
      • v31 (19) = OffPtr <**uint8> [8] v29
      • v46 (19) = OffPtr <**uint8> [8] v32
      • v47 (19) = Store <mem> {uintptr} v32 v43 v28
      • v18 (19) = OffPtr <**uint8> [8] v29
      • v44 (19) = OffPtr <**uint8> [8] v41
      • v39 (19) = Load <*uint8> v31 v28
      • v30 (19) = IMake <interface {}> v43 v39
      • v33 (19) = Store <mem> {*uint8} v46 v39 v47
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = Load <uintptr> v29 v37
      • v56 (19) = Load <*uint8> v18 v37
      • v15 (19) = Store <mem> {uintptr} v41 v9 v37
      • v38 (19) = IMake <interface {}> v9 v56
      • v42 (19) = Store <mem> {*uint8} v44 v56 v15
    • Plainb5 (line 19)
    • b5: ← b3
      • v48 (+19) = SliceMake <[]interface {}> v22 v7 v7
      • v13 (19) = OffPtr <*int> [8] v50
      • v14 (19) = Store <mem> {*uint8} v50 v45 v42
      • v51 (19) = OffPtr <*int> [16] v53
      • v10 (19) = OffPtr <*int> [8] v53
      • v52 (19) = Store <mem> {int} v13 v12 v14
      • v8 (19) = Store <mem> {*uint8} v53 v22 v52
      • v40 (19) = Store <mem> {int} v10 v7 v8
      • v54 (19) = Store <mem> {int} v51 v7 v40
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • late opt [54200 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v34 (?) = Addr <*uint8> {type.int} v3
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v11 (+11) = Const64 <int> [4] (w[int], y[int])
      • v49 (?) = StringMake <string> v45 v12
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Const64 <int> [-2] (w[int])
      • v17 (+17) = Const64 <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = Load <uintptr> v29 v28
      • v31 (19) = OffPtr <**uint8> [24] v2
      • v46 (19) = OffPtr <**uint8> [8] v22
      • v47 (19) = Store <mem> {uintptr} v32 v43 v28
      • v18 (19) = OffPtr <**uint8> [24] v2
      • v44 (19) = OffPtr <**uint8> [24] v22
      • v39 (19) = Load <*uint8> v31 v28
      • v30 (19) = IMake <interface {}> v43 v39
      • v33 (19) = Store <mem> {*uint8} v46 v39 v47
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = Load <uintptr> v29 v37
      • v56 (19) = Load <*uint8> v18 v37
      • v15 (19) = Store <mem> {uintptr} v41 v9 v37
      • v38 (19) = IMake <interface {}> v9 v56
      • v42 (19) = Store <mem> {*uint8} v44 v56 v15
    • Plainb5 (line 19)
    • b5: ← b3
      • v48 (+19) = SliceMake <[]interface {}> v22 v7 v7
      • v13 (19) = OffPtr <*int> [8] v2
      • v14 (19) = Store <mem> {*uint8} v50 v45 v42
      • v51 (19) = OffPtr <*int> [32] v2
      • v10 (19) = OffPtr <*int> [24] v2
      • v52 (19) = Store <mem> {int} v13 v12 v14
      • v8 (19) = Store <mem> {*uint8} v53 v22 v52
      • v40 (19) = Store <mem> {int} v10 v7 v8
      • v54 (19) = Store <mem> {int} v51 v7 v40
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • dead auto elim [43000 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v34 (?) = Addr <*uint8> {type.int} v3
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v11 (+11) = Const64 <int> [4] (w[int], y[int])
      • v49 (?) = StringMake <string> v45 v12
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Const64 <int> [-2] (w[int])
      • v17 (+17) = Const64 <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = Load <uintptr> v29 v28
      • v31 (19) = OffPtr <**uint8> [24] v2
      • v46 (19) = OffPtr <**uint8> [8] v22
      • v47 (19) = Store <mem> {uintptr} v32 v43 v28
      • v18 (19) = OffPtr <**uint8> [24] v2
      • v44 (19) = OffPtr <**uint8> [24] v22
      • v39 (19) = Load <*uint8> v31 v28
      • v30 (19) = IMake <interface {}> v43 v39
      • v33 (19) = Store <mem> {*uint8} v46 v39 v47
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = Load <uintptr> v29 v37
      • v56 (19) = Load <*uint8> v18 v37
      • v15 (19) = Store <mem> {uintptr} v41 v9 v37
      • v38 (19) = IMake <interface {}> v9 v56
      • v42 (19) = Store <mem> {*uint8} v44 v56 v15
    • Plainb5 (line 19)
    • b5: ← b3
      • v48 (+19) = SliceMake <[]interface {}> v22 v7 v7
      • v13 (19) = OffPtr <*int> [8] v2
      • v14 (19) = Store <mem> {*uint8} v50 v45 v42
      • v51 (19) = OffPtr <*int> [32] v2
      • v10 (19) = OffPtr <*int> [24] v2
      • v52 (19) = Store <mem> {int} v13 v12 v14
      • v8 (19) = Store <mem> {*uint8} v53 v22 v52
      • v40 (19) = Store <mem> {int} v10 v7 v8
      • v54 (19) = Store <mem> {int} v51 v7 v40
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v11 v16
  • name x[int]: v7
  • name y[int]: v11
  • name z[int]: v17
  • generic deadcode [39000 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Const64 <int> [-2] (w[int])
      • v17 (+17) = Const64 <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = Load <uintptr> v29 v28
      • v31 (19) = OffPtr <**uint8> [24] v2
      • v46 (19) = OffPtr <**uint8> [8] v22
      • v47 (19) = Store <mem> {uintptr} v32 v43 v28
      • v18 (19) = OffPtr <**uint8> [24] v2
      • v44 (19) = OffPtr <**uint8> [24] v22
      • v39 (19) = Load <*uint8> v31 v28
      • v33 (19) = Store <mem> {*uint8} v46 v39 v47
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = Load <uintptr> v29 v37
      • v56 (19) = Load <*uint8> v18 v37
      • v15 (19) = Store <mem> {uintptr} v41 v9 v37
      • v42 (19) = Store <mem> {*uint8} v44 v56 v15
    • Plainb5 (line 19)
    • b5: ← b3
      • v13 (19) = OffPtr <*int> [8] v2
      • v14 (+19) = Store <mem> {*uint8} v50 v45 v42
      • v51 (19) = OffPtr <*int> [32] v2
      • v10 (19) = OffPtr <*int> [24] v2
      • v52 (19) = Store <mem> {int} v13 v12 v14
      • v8 (19) = Store <mem> {*uint8} v53 v22 v52
      • v40 (19) = Store <mem> {int} v10 v7 v8
      • v54 (19) = Store <mem> {int} v51 v7 v40
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • check bce [20700 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Const64 <int> [-2] (w[int])
      • v17 (+17) = Const64 <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = Load <uintptr> v29 v28
      • v31 (19) = OffPtr <**uint8> [24] v2
      • v46 (19) = OffPtr <**uint8> [8] v22
      • v47 (19) = Store <mem> {uintptr} v32 v43 v28
      • v18 (19) = OffPtr <**uint8> [24] v2
      • v44 (19) = OffPtr <**uint8> [24] v22
      • v39 (19) = Load <*uint8> v31 v28
      • v33 (19) = Store <mem> {*uint8} v46 v39 v47
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = Load <uintptr> v29 v37
      • v56 (19) = Load <*uint8> v18 v37
      • v15 (19) = Store <mem> {uintptr} v41 v9 v37
      • v42 (19) = Store <mem> {*uint8} v44 v56 v15
    • Plainb5 (line 19)
    • b5: ← b3
      • v13 (19) = OffPtr <*int> [8] v2
      • v14 (+19) = Store <mem> {*uint8} v50 v45 v42
      • v51 (19) = OffPtr <*int> [32] v2
      • v10 (19) = OffPtr <*int> [24] v2
      • v52 (19) = Store <mem> {int} v13 v12 v14
      • v8 (19) = Store <mem> {*uint8} v53 v22 v52
      • v40 (19) = Store <mem> {int} v10 v7 v8
      • v54 (19) = Store <mem> {int} v51 v7 v40
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • branchelim [21400 ns]

    • b1:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
    • Plainb2 (line +10)
    • b2: ← b1
    • Plainb3 (line +12)
    • b3: ← b2
      • v16 (+16) = Const64 <int> [-2] (w[int])
      • v17 (+17) = Const64 <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = Load <uintptr> v29 v28
      • v31 (19) = OffPtr <**uint8> [24] v2
      • v46 (19) = OffPtr <**uint8> [8] v22
      • v47 (19) = Store <mem> {uintptr} v32 v43 v28
      • v18 (19) = OffPtr <**uint8> [24] v2
      • v44 (19) = OffPtr <**uint8> [24] v22
      • v39 (19) = Load <*uint8> v31 v28
      • v33 (19) = Store <mem> {*uint8} v46 v39 v47
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = Load <uintptr> v29 v37
      • v56 (19) = Load <*uint8> v18 v37
      • v15 (19) = Store <mem> {uintptr} v41 v9 v37
      • v42 (19) = Store <mem> {*uint8} v44 v56 v15
    • Plainb5 (line 19)
    • b5: ← b3
      • v13 (19) = OffPtr <*int> [8] v2
      • v14 (+19) = Store <mem> {*uint8} v50 v45 v42
      • v51 (19) = OffPtr <*int> [32] v2
      • v10 (19) = OffPtr <*int> [24] v2
      • v52 (19) = Store <mem> {int} v13 v12 v14
      • v8 (19) = Store <mem> {*uint8} v53 v22 v52
      • v40 (19) = Store <mem> {int} v10 v7 v8
      • v54 (19) = Store <mem> {int} v51 v7 v40
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • fuse [26000 ns]

    • b1:
    • BlockInvalid (line +10)
    • b2:
    • BlockInvalid (line +12)
    • b3:
    • BlockInvalid (line 19)
    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v16 (+16) = Const64 <int> [-2] (w[int])
      • v17 (+17) = Const64 <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = Load <uintptr> v29 v28
      • v31 (19) = OffPtr <**uint8> [24] v2
      • v46 (19) = OffPtr <**uint8> [8] v22
      • v47 (19) = Store <mem> {uintptr} v32 v43 v28
      • v18 (19) = OffPtr <**uint8> [24] v2
      • v44 (19) = OffPtr <**uint8> [24] v22
      • v13 (19) = OffPtr <*int> [8] v2
      • v51 (19) = OffPtr <*int> [32] v2
      • v10 (19) = OffPtr <*int> [24] v2
      • v39 (19) = Load <*uint8> v31 v28
      • v33 (19) = Store <mem> {*uint8} v46 v39 v47
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = Load <uintptr> v29 v37
      • v56 (19) = Load <*uint8> v18 v37
      • v15 (19) = Store <mem> {uintptr} v41 v9 v37
      • v42 (19) = Store <mem> {*uint8} v44 v56 v15
      • v14 (+19) = Store <mem> {*uint8} v50 v45 v42
      • v52 (19) = Store <mem> {int} v13 v12 v14
      • v8 (19) = Store <mem> {*uint8} v53 v22 v52
      • v40 (19) = Store <mem> {int} v10 v7 v8
      • v54 (19) = Store <mem> {int} v51 v7 v40
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • dse [31600 ns]

    • b1:
    • BlockInvalid (line +10)
    • b2:
    • BlockInvalid (line +12)
    • b3:
    • BlockInvalid (line 19)
    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v16 (+16) = Const64 <int> [-2] (w[int])
      • v17 (+17) = Const64 <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = Load <uintptr> v29 v28
      • v31 (19) = OffPtr <**uint8> [24] v2
      • v46 (19) = OffPtr <**uint8> [8] v22
      • v47 (19) = Store <mem> {uintptr} v32 v43 v28
      • v18 (19) = OffPtr <**uint8> [24] v2
      • v44 (19) = OffPtr <**uint8> [24] v22
      • v13 (19) = OffPtr <*int> [8] v2
      • v51 (19) = OffPtr <*int> [32] v2
      • v10 (19) = OffPtr <*int> [24] v2
      • v39 (19) = Load <*uint8> v31 v28
      • v33 (19) = Store <mem> {*uint8} v46 v39 v47
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = Load <uintptr> v29 v37
      • v56 (19) = Load <*uint8> v18 v37
      • v15 (19) = Store <mem> {uintptr} v41 v9 v37
      • v42 (19) = Store <mem> {*uint8} v44 v56 v15
      • v14 (+19) = Store <mem> {*uint8} v50 v45 v42
      • v52 (19) = Store <mem> {int} v13 v12 v14
      • v8 (19) = Store <mem> {*uint8} v53 v22 v52
      • v40 (19) = Store <mem> {int} v10 v7 v8
      • v54 (19) = Store <mem> {int} v51 v7 v40
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • writebarrier [19400 ns]

    • b1:
    • BlockInvalid (line +10)
    • b2:
    • BlockInvalid (line +12)
    • b3:
    • BlockInvalid (line 19)
    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = Const64 <int> [2] (x[int])
      • v23 (?) = Addr <*uint8> {type.int} v3
      • v24 (?) = OffPtr <**byte> [0] v2
      • v26 (?) = OffPtr <*int> [8] v2
      • v29 (?) = OffPtr <*interface {}> [16] v2
      • v50 (?) = OffPtr <*string> [0] v2
      • v53 (?) = OffPtr <*[]interface {}> [16] v2
      • v45 (?) = Addr <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = Const64 <int> [7]
      • v16 (+16) = Const64 <int> [-2] (w[int])
      • v17 (+17) = Const64 <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v19
      • v21 (+19) = Zero <mem> {[2]interface {}} [32] v20 v19
      • v22 (19) = LocalAddr <*[2]interface {}> {.autotmp_4} v2 v21
      • v32 (19) = OffPtr <*interface {}> [0] v22
      • v41 (19) = OffPtr <*interface {}> [16] v22
      • v25 (19) = Store <mem> {*byte} v24 v23 v21
      • v27 (19) = Store <mem> {int} v26 v16 v25
      • v28 (19) = StaticCall <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = Load <uintptr> v29 v28
      • v31 (19) = OffPtr <**uint8> [24] v2
      • v46 (19) = OffPtr <**uint8> [8] v22
      • v47 (19) = Store <mem> {uintptr} v32 v43 v28
      • v18 (19) = OffPtr <**uint8> [24] v2
      • v44 (19) = OffPtr <**uint8> [24] v22
      • v13 (19) = OffPtr <*int> [8] v2
      • v51 (19) = OffPtr <*int> [32] v2
      • v10 (19) = OffPtr <*int> [24] v2
      • v39 (19) = Load <*uint8> v31 v28
      • v33 (19) = Store <mem> {*uint8} v46 v39 v47
      • v35 (19) = Store <mem> {*byte} v24 v23 v33
      • v36 (19) = Store <mem> {int} v26 v17 v35
      • v37 (19) = StaticCall <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = Load <uintptr> v29 v37
      • v56 (19) = Load <*uint8> v18 v37
      • v15 (19) = Store <mem> {uintptr} v41 v9 v37
      • v42 (19) = Store <mem> {*uint8} v44 v56 v15
      • v14 (+19) = Store <mem> {*uint8} v50 v45 v42
      • v52 (19) = Store <mem> {int} v13 v12 v14
      • v8 (19) = Store <mem> {*uint8} v53 v22 v52
      • v40 (19) = Store <mem> {int} v10 v7 v8
      • v54 (19) = Store <mem> {int} v51 v7 v40
      • v55 (19) = StaticCall <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • lower [131500 ns]

    • b1:
    • BlockInvalid (line +10)
    • b2:
    • BlockInvalid (line +12)
    • b3:
    • BlockInvalid (line 19)
    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = MOVQconst <int> [2] (x[int])
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v26 (?) = LEAQ <*int> [8] v2
      • v29 (?) = LEAQ <*interface {}> [16] v2
      • v53 (?) = LEAQ <*[]interface {}> [16] v2
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = MOVQconst <int> [7]
      • v16 (+16) = MOVQconst <int> [-2] (w[int])
      • v17 (+17) = MOVQconst <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v22 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v32 (19) = LEAQ <*interface {}> {.autotmp_4} v2
      • v41 (19) = LEAQ <*interface {}> {.autotmp_4} [16] v2
      • v31 (19) = LEAQ <**uint8> [24] v2
      • v46 (19) = LEAQ <**uint8> {.autotmp_4} [8] v2
      • v18 (19) = LEAQ <**uint8> [24] v2
      • v44 (19) = LEAQ <**uint8> {.autotmp_4} [24] v2
      • v13 (19) = LEAQ <*int> [8] v2
      • v51 (19) = LEAQ <*int> [32] v2
      • v10 (19) = LEAQ <*int> [24] v2
      • v48 (+19) = LEAQ <*[2]interface {}> {.autotmp_4} [16] v2
      • v38 (+19) = MOVOconst <int128> [0]
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v38 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v22 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • lowered cse [72500 ns]

    • b1:
    • BlockInvalid (line +10)
    • b2:
    • BlockInvalid (line +12)
    • b3:
    • BlockInvalid (line 19)
    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = MOVQconst <int> [2] (x[int])
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v26 (?) = LEAQ <*int> [8] v2
      • v29 (?) = LEAQ <*interface {}> [16] v2
      • v53 (?) = LEAQ <*[]interface {}> [16] v2
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = MOVQconst <int> [7]
      • v16 (+16) = MOVQconst <int> [-2] (w[int])
      • v17 (+17) = MOVQconst <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v22 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v32 (19) = LEAQ <*interface {}> {.autotmp_4} v2
      • v41 (19) = LEAQ <*interface {}> {.autotmp_4} [16] v2
      • v31 (19) = LEAQ <**uint8> [24] v2
      • v46 (19) = LEAQ <**uint8> {.autotmp_4} [8] v2
      • v18 (19) = LEAQ <**uint8> [24] v2
      • v44 (19) = LEAQ <**uint8> {.autotmp_4} [24] v2
      • v13 (19) = LEAQ <*int> [8] v2
      • v51 (19) = LEAQ <*int> [32] v2
      • v10 (19) = LEAQ <*int> [24] v2
      • v48 (+19) = LEAQ <*[2]interface {}> {.autotmp_4} [16] v2
      • v38 (19) = MOVOconst <int128> [0]
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • elim unread autos [19400 ns]

    • b1:
    • BlockInvalid (line +10)
    • b2:
    • BlockInvalid (line +12)
    • b3:
    • BlockInvalid (line 19)
    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v7 (+9) = MOVQconst <int> [2] (x[int])
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v26 (?) = LEAQ <*int> [8] v2
      • v29 (?) = LEAQ <*interface {}> [16] v2
      • v53 (?) = LEAQ <*[]interface {}> [16] v2
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v12 (?) = MOVQconst <int> [7]
      • v16 (+16) = MOVQconst <int> [-2] (w[int])
      • v17 (+17) = MOVQconst <int> [6] (z[int])
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v22 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v32 (19) = LEAQ <*interface {}> {.autotmp_4} v2
      • v41 (19) = LEAQ <*interface {}> {.autotmp_4} [16] v2
      • v31 (19) = LEAQ <**uint8> [24] v2
      • v46 (19) = LEAQ <**uint8> {.autotmp_4} [8] v2
      • v18 (19) = LEAQ <**uint8> [24] v2
      • v44 (19) = LEAQ <**uint8> {.autotmp_4} [24] v2
      • v13 (19) = LEAQ <*int> [8] v2
      • v51 (19) = LEAQ <*int> [32] v2
      • v10 (19) = LEAQ <*int> [24] v2
      • v48 (+19) = LEAQ <*[2]interface {}> {.autotmp_4} [16] v2
      • v38 (19) = MOVOconst <int128> [0]
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)
  • name w[int]: v16
  • name x[int]: v7
  • name z[int]: v17
  • lowered deadcode [31000 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    checkLower [20700 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    late phielim [19400 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    late copyelim [21700 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    tighten [40400 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    phi tighten [21400 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    late deadcode [33000 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    critical [22800 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    likelyadjust [22300 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    layout [27100 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v2 (?) = SP <uintptr>
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    schedule [136900 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v2 (?) = SP <uintptr>
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    late nilcheck [25800 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v2 (?) = SP <uintptr>
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    flagalloc [28600 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v2 (?) = SP <uintptr>
      • v11 (+19) = MOVOconst <int128> [0]
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v11 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v11 v30
      • v3 (?) = SB <uintptr>
      • v23 (?) = LEAQ <*uint8> {type.int} v3
      • v25 (19) = MOVQstore <mem> v2 v23 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v39 (19) = MOVQload <*uint8> [24] v2 v28
      • v43 (19) = MOVQload <uintptr> [16] v2 v28
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v35 (19) = MOVQstore <mem> v2 v23 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37
      • v56 (19) = MOVQload <*uint8> [24] v2 v37
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v45 (?) = LEAQ <*uint8> {go.string."%d, %d\n"} v3
      • v14 (+19) = MOVQstore <mem> v2 v45 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v20 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2
      • v8 (19) = MOVQstore <mem> [16] v2 v20 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    regalloc [221500 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v2 (?) = SP <uintptr> : SP
      • v38 (19) = MOVOconst <int128> [0] : X0
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v38 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v38 v30
      • v3 (?) = SB <uintptr> : SB
      • v48 (19) = LEAQ <*uint8> {type.int} v3 : AX
      • v25 (19) = MOVQstore <mem> v2 v48 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v39 (19) = MOVQload <*uint8> [24] v2 v28 : AX
      • v43 (19) = MOVQload <uintptr> [16] v2 v28 : CX
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v10 (19) = LEAQ <*uint8> {type.int} v3 : AX
      • v35 (19) = MOVQstore <mem> v2 v10 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37 : AX
      • v56 (19) = MOVQload <*uint8> [24] v2 v37 : CX
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v51 (19) = LEAQ <*uint8> {go.string."%d, %d\n"} v3 : AX
      • v14 (+19) = MOVQstore <mem> v2 v51 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v13 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2 : AX
      • v8 (19) = MOVQstore <mem> [16] v2 v13 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    loop rotate [21100 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v2 (?) = SP <uintptr> : SP
      • v38 (19) = MOVOconst <int128> [0] : X0
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v38 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v38 v30
      • v3 (?) = SB <uintptr> : SB
      • v48 (19) = LEAQ <*uint8> {type.int} v3 : AX
      • v25 (19) = MOVQstore <mem> v2 v48 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v39 (19) = MOVQload <*uint8> [24] v2 v28 : AX
      • v43 (19) = MOVQload <uintptr> [16] v2 v28 : CX
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v10 (19) = LEAQ <*uint8> {type.int} v3 : AX
      • v35 (19) = MOVQstore <mem> v2 v10 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37 : AX
      • v56 (19) = MOVQload <*uint8> [24] v2 v37 : CX
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v51 (19) = LEAQ <*uint8> {go.string."%d, %d\n"} v3 : AX
      • v14 (+19) = MOVQstore <mem> v2 v51 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v13 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2 : AX
      • v8 (19) = MOVQstore <mem> [16] v2 v13 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    stackframe [31600 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v2 (?) = SP <uintptr> : SP
      • v38 (19) = MOVOconst <int128> [0] : X0
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v38 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v38 v30
      • v3 (?) = SB <uintptr> : SB
      • v48 (19) = LEAQ <*uint8> {type.int} v3 : AX
      • v25 (19) = MOVQstore <mem> v2 v48 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v39 (19) = MOVQload <*uint8> [24] v2 v28 : AX
      • v43 (19) = MOVQload <uintptr> [16] v2 v28 : CX
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v10 (19) = LEAQ <*uint8> {type.int} v3 : AX
      • v35 (19) = MOVQstore <mem> v2 v10 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37 : AX
      • v56 (19) = MOVQload <*uint8> [24] v2 v37 : CX
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v51 (19) = LEAQ <*uint8> {go.string."%d, %d\n"} v3 : AX
      • v14 (+19) = MOVQstore <mem> v2 v51 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v13 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2 : AX
      • v8 (19) = MOVQstore <mem> [16] v2 v13 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    trim [21000 ns]

    • b5:
      • v1 (?) = InitMem <mem>
      • v19 (19) = VarDef <mem> {.autotmp_4} v1
      • v2 (?) = SP <uintptr> : SP
      • v38 (19) = MOVOconst <int128> [0] : X0
      • v30 (+19) = MOVOstore <mem> {.autotmp_4} v2 v38 v19
      • v21 (+19) = MOVOstore <mem> {.autotmp_4} [16] v2 v38 v30
      • v3 (?) = SB <uintptr> : SB
      • v48 (19) = LEAQ <*uint8> {type.int} v3 : AX
      • v25 (19) = MOVQstore <mem> v2 v48 v21
      • v27 (19) = MOVQstoreconst <mem> [val=-2,off=8] v2 v25
      • v28 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v27
      • v39 (19) = MOVQload <*uint8> [24] v2 v28 : AX
      • v43 (19) = MOVQload <uintptr> [16] v2 v28 : CX
      • v47 (19) = MOVQstore <mem> {.autotmp_4} v2 v43 v28
      • v33 (19) = MOVQstore <mem> {.autotmp_4} [8] v2 v39 v47
      • v10 (19) = LEAQ <*uint8> {type.int} v3 : AX
      • v35 (19) = MOVQstore <mem> v2 v10 v33
      • v36 (19) = MOVQstoreconst <mem> [val=6,off=8] v2 v35
      • v37 (19) = CALLstatic <mem> {runtime.convT2E64} [32] v36
      • v9 (19) = MOVQload <uintptr> [16] v2 v37 : AX
      • v56 (19) = MOVQload <*uint8> [24] v2 v37 : CX
      • v15 (19) = MOVQstore <mem> {.autotmp_4} [16] v2 v9 v37
      • v42 (19) = MOVQstore <mem> {.autotmp_4} [24] v2 v56 v15
      • v51 (19) = LEAQ <*uint8> {go.string."%d, %d\n"} v3 : AX
      • v14 (+19) = MOVQstore <mem> v2 v51 v42
      • v52 (19) = MOVQstoreconst <mem> [val=7,off=8] v2 v14
      • v13 (19) = LEAQ <*[2]interface {}> {.autotmp_4} v2 : AX
      • v8 (19) = MOVQstore <mem> [16] v2 v13 v52
      • v40 (19) = MOVQstoreconst <mem> [val=2,off=24] v2 v8
      • v54 (19) = MOVQstoreconst <mem> [val=2,off=32] v2 v40
      • v55 (19) = CALLstatic <mem> {fmt.Printf} [64] v54
      • v57 (5) = VarKill <mem> {.autotmp_4} v55
    • Ret v57 (line +20)

    genssa

    # /root/main.go
    00000 (5) TEXT "".ssa(SB)
    00001 (5) FUNCDATA $0, gclocals·69c1753bd5f81501d95132d08af04464(SB)
    00002 (5) FUNCDATA $1, gclocals·ef901d0ae51b5399f7d4b5dfa3bc0b42(SB)
    00003 (5) FUNCDATA $3, gclocals·1cf923758aae2e428391d1783fe59973(SB)
    v38
    00004 (+19) PCDATA $2, $0
    v38
    00005 (+19) PCDATA $0, $1
    v38
    00006 (+19) XORPS X0, X0
    v30
    00007 (19) MOVUPS X0, ""..autotmp_4-32(SP)
    v21
    00008 (19) MOVUPS X0, ""..autotmp_4-16(SP)
    v48
    00009 (19) PCDATA $2, $1
    v48
    00010 (19) LEAQ type.int(SB), AX
    v25
    00011 (19) PCDATA $2, $0
    v25
    00012 (19) MOVQ AX, (SP)
    v27
    00013 (19) MOVQ $-2, 8(SP)
    v28
    00014 (19) CALL runtime.convT2E64(SB)
    v39
    00015 (19) PCDATA $2, $1
    v39
    00016 (19) MOVQ 24(SP), AX
    v43
    00017 (19) MOVQ 16(SP), CX
    v47
    00018 (19) MOVQ CX, ""..autotmp_4-32(SP)
    v33
    00019 (19) PCDATA $2, $0
    v33
    00020 (19) MOVQ AX, ""..autotmp_4-24(SP)
    v10
    00021 (19) PCDATA $2, $1
    v10
    00022 (19) LEAQ type.int(SB), AX
    v35
    00023 (19) PCDATA $2, $0
    v35
    00024 (19) MOVQ AX, (SP)
    v36
    00025 (19) MOVQ $6, 8(SP)
    v37
    00026 (19) CALL runtime.convT2E64(SB)
    v9
    00027 (19) MOVQ 16(SP), AX
    v56
    00028 (19) PCDATA $2, $2
    v56
    00029 (19) MOVQ 24(SP), CX
    v15
    00030 (19) MOVQ AX, ""..autotmp_4-16(SP)
    v42
    00031 (19) PCDATA $2, $0
    v42
    00032 (19) MOVQ CX, ""..autotmp_4-8(SP)
    v51
    00033 (19) PCDATA $2, $1
    v51
    00034 (19) LEAQ go.string."%d, %d\n"(SB), AX
    v14
    00035 (+19) PCDATA $2, $0
    v14
    00036 (19) MOVQ AX, (SP)
    v52
    00037 (19) MOVQ $7, 8(SP)
    v13
    00038 (19) PCDATA $2, $1
    v13
    00039 (19) LEAQ ""..autotmp_4-32(SP), AX
    v8
    00040 (19) PCDATA $2, $0
    v8
    00041 (19) MOVQ AX, 16(SP)
    v40
    00042 (19) MOVQ $2, 24(SP)
    v54
    00043 (19) MOVQ $2, 32(SP)
    v55
    00044 (19) CALL fmt.Printf(SB)
    b5
    00045 (+20) PCDATA $0, $0
    b5
    00046 (+20) RET
    00047 (?) END