TC-8 Samples

First consider simple examples, without any branching:

tens.tig
10 + 20 * 30
tc -I tens.tig
$ tc -I tens.tig
# == Final assembler ouput. == #
# Routine: _main
tc_main:
# Allocate frame
	move	$x13, $ra
	move	$x5, $s0
	move	$x6, $s1
	move	$x7, $s2
	move	$x8, $s3
	move	$x9, $s4
	move	$x10, $s5
	move	$x11, $s6
	move	$x12, $s7
l0:
	li	$x1, 10
	li	$x2, 20
	mul	$x3, $x2, 30
	add	$x4, $x1, $x3
l1:
	move	$s0, $x5
	move	$s1, $x6
	move	$s2, $x7
	move	$s3, $x8
	move	$s4, $x9
	move	$s5, $x10
	move	$s6, $x11
	move	$s7, $x12
	move	$ra, $x13
# Deallocate frame
	jr	$ra
$ echo $?
0
tc -FVN tens.tig
$ tc -FVN tens.tig

$ echo $?
0
/* Graph Visualization */
digraph "tens.main._main.flow.gv" {
  node [shape=box];
  "0" [label="tc_main:"]
  "1" [label="# Allocate frame"]
  "2" [label="	move	t13, $ra"]
  "3" [label="	move	t5, $s0"]
  "4" [label="	move	t6, $s1"]
  "5" [label="	move	t7, $s2"]
  "6" [label="	move	t8, $s3"]
  "7" [label="	move	t9, $s4"]
  "8" [label="	move	t10, $s5"]
  "9" [label="	move	t11, $s6"]
  "10" [label="	move	t12, $s7"]
  "11" [label="l0:"]
  "12" [label="	li	t1, 10"]
  "13" [label="	li	t2, 20"]
  "14" [label="	mul	t3, t2, 30"]
  "15" [label="	add	t4, t1, t3"]
  "16" [label="l1:"]
  "17" [label="	move	$s0, t5"]
  "18" [label="	move	$s1, t6"]
  "19" [label="	move	$s2, t7"]
  "20" [label="	move	$s3, t8"]
  "21" [label="	move	$s4, t9"]
  "22" [label="	move	$s5, t10"]
  "23" [label="	move	$s6, t11"]
  "24" [label="	move	$s7, t12"]
  "25" [label="	move	$ra, t13"]
  "26" [label="# Deallocate frame"]
  "27" [label="	jr	$ra"]
  "0" -> "1"
  "1" -> "2"
  "2" -> "3"
  "3" -> "4"
  "4" -> "5"
  "5" -> "6"
  "6" -> "7"
  "7" -> "8"
  "8" -> "9"
  "9" -> "10"
  "10" -> "11"
  "11" -> "12"
  "12" -> "13"
  "13" -> "14"
  "14" -> "15"
  "15" -> "16"
  "16" -> "17"
  "17" -> "18"
  "18" -> "19"
  "19" -> "20"
  "20" -> "21"
  "21" -> "22"
  "22" -> "23"
  "23" -> "24"
  "24" -> "25"
  "25" -> "26"
  "26" -> "27"
}

tens.main._main.flow.gv

/* Graph Visualization */
digraph "tens.main._main.liveness.gv" {
  node [shape=box];
  "0" [label="tc_main:"]
  "1" [label="# Allocate frame"]
  "2" [label="	move	$x13, $ra"]
  "3" [label="	move	$x5, $s0"]
  "4" [label="	move	$x6, $s1"]
  "5" [label="	move	$x7, $s2"]
  "6" [label="	move	$x8, $s3"]
  "7" [label="	move	$x9, $s4"]
  "8" [label="	move	$x10, $s5"]
  "9" [label="	move	$x11, $s6"]
  "10" [label="	move	$x12, $s7"]
  "11" [label="l0:"]
  "12" [label="	li	$x1, 10"]
  "13" [label="	li	$x2, 20"]
  "14" [label="	mul	$x3, $x2, 30"]
  "15" [label="	add	$x4, $x1, $x3"]
  "16" [label="l1:"]
  "17" [label="	move	$s0, $x5"]
  "18" [label="	move	$s1, $x6"]
  "19" [label="	move	$s2, $x7"]
  "20" [label="	move	$s3, $x8"]
  "21" [label="	move	$s4, $x9"]
  "22" [label="	move	$s5, $x10"]
  "23" [label="	move	$s6, $x11"]
  "24" [label="	move	$s7, $x12"]
  "25" [label="	move	$ra, $x13"]
  "26" [label="# Deallocate frame"]
  "27" [label="	jr	$ra"]
  "0" -> "1" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
  "1" -> "2" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
  "2" -> "3" [label="$fp $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $x13 $zero"]
  "3" -> "4" [label="$fp $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $x13 $x5 $zero"]
  "4" -> "5" [label="$fp $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $x13 $x5 $x6 $zero"]
  "5" -> "6" [label="$fp $s3 $s4 $s5 $s6 $s7 $sp $v0 $x13 $x5 $x6 $x7 $zero"]
  "6" -> "7" [label="$fp $s4 $s5 $s6 $s7 $sp $v0 $x13 $x5 $x6 $x7 $x8 $zero"]
  "7" -> "8" [label="$fp $s5 $s6 $s7 $sp $v0 $x13 $x5 $x6 $x7 $x8 $x9 $zero"]
  "8" -> "9" [label="$fp $s6 $s7 $sp $v0 $x10 $x13 $x5 $x6 $x7 $x8 $x9 $zero"]
  "9" -> "10" [label="$fp $s7 $sp $v0 $x10 $x11 $x13 $x5 $x6 $x7 $x8 $x9 $zero"]
  "10" -> "11" [label="$fp $sp $v0 $x10 $x11 $x12 $x13 $x5 $x6 $x7 $x8 $x9 $zero"]
  "11" -> "12" [label="$fp $sp $v0 $x10 $x11 $x12 $x13 $x5 $x6 $x7 $x8 $x9 $zero"]
  "12" -> "13" [label="$fp $sp $v0 $x1 $x10 $x11 $x12 $x13 $x5 $x6 $x7 $x8 $x9 $zero"]
  "13" -> "14" [label="$fp $sp $v0 $x1 $x10 $x11 $x12 $x13 $x2 $x5 $x6 $x7 $x8 $x9 $zero"]
  "14" -> "15" [label="$fp $sp $v0 $x1 $x10 $x11 $x12 $x13 $x3 $x5 $x6 $x7 $x8 $x9 $zero"]
  "15" -> "16" [label="$fp $sp $v0 $x10 $x11 $x12 $x13 $x5 $x6 $x7 $x8 $x9 $zero"]
  "16" -> "17" [label="$fp $sp $v0 $x10 $x11 $x12 $x13 $x5 $x6 $x7 $x8 $x9 $zero"]
  "17" -> "18" [label="$fp $s0 $sp $v0 $x10 $x11 $x12 $x13 $x6 $x7 $x8 $x9 $zero"]
  "18" -> "19" [label="$fp $s0 $s1 $sp $v0 $x10 $x11 $x12 $x13 $x7 $x8 $x9 $zero"]
  "19" -> "20" [label="$fp $s0 $s1 $s2 $sp $v0 $x10 $x11 $x12 $x13 $x8 $x9 $zero"]
  "20" -> "21" [label="$fp $s0 $s1 $s2 $s3 $sp $v0 $x10 $x11 $x12 $x13 $x9 $zero"]
  "21" -> "22" [label="$fp $s0 $s1 $s2 $s3 $s4 $sp $v0 $x10 $x11 $x12 $x13 $zero"]
  "22" -> "23" [label="$fp $s0 $s1 $s2 $s3 $s4 $s5 $sp $v0 $x11 $x12 $x13 $zero"]
  "23" -> "24" [label="$fp $s0 $s1 $s2 $s3 $s4 $s5 $s6 $sp $v0 $x12 $x13 $zero"]
  "24" -> "25" [label="$fp $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $x13 $zero"]
  "25" -> "26" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
  "26" -> "27" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
}

tens.main._main.liveness.gv

/* Graph Visualization */
graph "tens.main._main" {
  node [shape=box];
  "0" [label="$a0"]
  "1" [label="$fp"]
  "2" [label="$ra"]
  "3" [label="$s0"]
  "4" [label="$s1"]
  "5" [label="$s2"]
  "6" [label="$s3"]
  "7" [label="$s4"]
  "8" [label="$s5"]
  "9" [label="$s6"]
  "10" [label="$s7"]
  "11" [label="$sp"]
  "12" [label="$v0"]
  "13" [label="$zero"]
  "14" [label="$a1"]
  "15" [label="$a2"]
  "16" [label="$a3"]
  "17" [label="$x13"]
  "18" [label="$x5"]
  "19" [label="$x6"]
  "20" [label="$x7"]
  "21" [label="$x8"]
  "22" [label="$x9"]
  "23" [label="$x10"]
  "24" [label="$x11"]
  "25" [label="$x12"]
  "26" [label="$x1"]
  "27" [label="$x2"]
  "28" [label="$x3"]
  "29" [label="$x4"]
  "0" -- "1"
  "0" -- "2"
  "0" -- "3"
  "0" -- "4"
  "0" -- "5"
  "0" -- "6"
  "0" -- "7"
  "0" -- "8"
  "0" -- "9"
  "0" -- "10"
  "0" -- "11"
  "0" -- "12"
  "0" -- "13"
  "1" -- "14"
  "2" -- "14"
  "3" -- "14"
  "4" -- "14"
  "5" -- "14"
  "6" -- "14"
  "7" -- "14"
  "8" -- "14"
  "9" -- "14"
  "10" -- "14"
  "11" -- "14"
  "12" -- "14"
  "13" -- "14"
  "1" -- "15"
  "2" -- "15"
  "3" -- "15"
  "4" -- "15"
  "5" -- "15"
  "6" -- "15"
  "7" -- "15"
  "8" -- "15"
  "9" -- "15"
  "10" -- "15"
  "11" -- "15"
  "12" -- "15"
  "13" -- "15"
  "1" -- "16"
  "2" -- "16"
  "3" -- "16"
  "4" -- "16"
  "5" -- "16"
  "6" -- "16"
  "7" -- "16"
  "8" -- "16"
  "9" -- "16"
  "10" -- "16"
  "11" -- "16"
  "12" -- "16"
  "13" -- "16"
  "1" -- "3"
  "2" -- "3"
  "3" -- "4"
  "3" -- "5"
  "3" -- "6"
  "3" -- "7"
  "3" -- "8"
  "3" -- "9"
  "3" -- "10"
  "3" -- "11"
  "3" -- "12"
  "3" -- "13"
  "1" -- "4"
  "2" -- "4"
  "4" -- "5"
  "4" -- "6"
  "4" -- "7"
  "4" -- "8"
  "4" -- "9"
  "4" -- "10"
  "4" -- "11"
  "4" -- "12"
  "4" -- "13"
  "1" -- "5"
  "2" -- "5"
  "5" -- "6"
  "5" -- "7"
  "5" -- "8"
  "5" -- "9"
  "5" -- "10"
  "5" -- "11"
  "5" -- "12"
  "5" -- "13"
  "1" -- "6"
  "2" -- "6"
  "6" -- "7"
  "6" -- "8"
  "6" -- "9"
  "6" -- "10"
  "6" -- "11"
  "6" -- "12"
  "6" -- "13"
  "1" -- "7"
  "2" -- "7"
  "7" -- "8"
  "7" -- "9"
  "7" -- "10"
  "7" -- "11"
  "7" -- "12"
  "7" -- "13"
  "1" -- "8"
  "2" -- "8"
  "8" -- "9"
  "8" -- "10"
  "8" -- "11"
  "8" -- "12"
  "8" -- "13"
  "1" -- "9"
  "2" -- "9"
  "9" -- "10"
  "9" -- "11"
  "9" -- "12"
  "9" -- "13"
  "1" -- "10"
  "2" -- "10"
  "10" -- "11"
  "10" -- "12"
  "10" -- "13"
  "1" -- "2"
  "1" -- "11"
  "1" -- "12"
  "1" -- "13"
  "2" -- "11"
  "11" -- "12"
  "11" -- "13"
  "2" -- "12"
  "12" -- "13"
  "2" -- "13"
  "1" -- "17"
  "3" -- "17"
  "4" -- "17"
  "5" -- "17"
  "6" -- "17"
  "7" -- "17"
  "8" -- "17"
  "9" -- "17"
  "10" -- "17"
  "11" -- "17"
  "12" -- "17"
  "13" -- "17"
  "1" -- "18"
  "4" -- "18"
  "5" -- "18"
  "6" -- "18"
  "7" -- "18"
  "8" -- "18"
  "9" -- "18"
  "10" -- "18"
  "11" -- "18"
  "12" -- "18"
  "17" -- "18"
  "13" -- "18"
  "1" -- "19"
  "5" -- "19"
  "6" -- "19"
  "7" -- "19"
  "8" -- "19"
  "9" -- "19"
  "10" -- "19"
  "11" -- "19"
  "12" -- "19"
  "17" -- "19"
  "18" -- "19"
  "13" -- "19"
  "1" -- "20"
  "6" -- "20"
  "7" -- "20"
  "8" -- "20"
  "9" -- "20"
  "10" -- "20"
  "11" -- "20"
  "12" -- "20"
  "17" -- "20"
  "18" -- "20"
  "19" -- "20"
  "13" -- "20"
  "1" -- "21"
  "7" -- "21"
  "8" -- "21"
  "9" -- "21"
  "10" -- "21"
  "11" -- "21"
  "12" -- "21"
  "17" -- "21"
  "18" -- "21"
  "19" -- "21"
  "20" -- "21"
  "13" -- "21"
  "1" -- "22"
  "8" -- "22"
  "9" -- "22"
  "10" -- "22"
  "11" -- "22"
  "12" -- "22"
  "17" -- "22"
  "18" -- "22"
  "19" -- "22"
  "20" -- "22"
  "21" -- "22"
  "13" -- "22"
  "1" -- "23"
  "9" -- "23"
  "10" -- "23"
  "11" -- "23"
  "12" -- "23"
  "17" -- "23"
  "18" -- "23"
  "19" -- "23"
  "20" -- "23"
  "21" -- "23"
  "22" -- "23"
  "13" -- "23"
  "1" -- "24"
  "10" -- "24"
  "11" -- "24"
  "12" -- "24"
  "23" -- "24"
  "17" -- "24"
  "18" -- "24"
  "19" -- "24"
  "20" -- "24"
  "21" -- "24"
  "22" -- "24"
  "13" -- "24"
  "1" -- "25"
  "11" -- "25"
  "12" -- "25"
  "23" -- "25"
  "24" -- "25"
  "17" -- "25"
  "18" -- "25"
  "19" -- "25"
  "20" -- "25"
  "21" -- "25"
  "22" -- "25"
  "13" -- "25"
  "1" -- "26"
  "11" -- "26"
  "12" -- "26"
  "23" -- "26"
  "24" -- "26"
  "25" -- "26"
  "17" -- "26"
  "18" -- "26"
  "19" -- "26"
  "20" -- "26"
  "21" -- "26"
  "22" -- "26"
  "13" -- "26"
  "1" -- "27"
  "11" -- "27"
  "12" -- "27"
  "26" -- "27"
  "23" -- "27"
  "24" -- "27"
  "25" -- "27"
  "17" -- "27"
  "18" -- "27"
  "19" -- "27"
  "20" -- "27"
  "21" -- "27"
  "22" -- "27"
  "13" -- "27"
  "1" -- "28"
  "11" -- "28"
  "12" -- "28"
  "26" -- "28"
  "23" -- "28"
  "24" -- "28"
  "25" -- "28"
  "17" -- "28"
  "18" -- "28"
  "19" -- "28"
  "20" -- "28"
  "21" -- "28"
  "22" -- "28"
  "13" -- "28"
  "1" -- "29"
  "11" -- "29"
  "12" -- "29"
  "23" -- "29"
  "24" -- "29"
  "25" -- "29"
  "17" -- "29"
  "18" -- "29"
  "19" -- "29"
  "20" -- "29"
  "21" -- "29"
  "22" -- "29"
  "13" -- "29"
  "3" -- "23"
  "3" -- "24"
  "3" -- "25"
  "3" -- "19"
  "3" -- "20"
  "3" -- "21"
  "3" -- "22"
  "4" -- "23"
  "4" -- "24"
  "4" -- "25"
  "4" -- "20"
  "4" -- "21"
  "4" -- "22"
  "5" -- "23"
  "5" -- "24"
  "5" -- "25"
  "5" -- "21"
  "5" -- "22"
  "6" -- "23"
  "6" -- "24"
  "6" -- "25"
  "6" -- "22"
  "7" -- "23"
  "7" -- "24"
  "7" -- "25"
  "8" -- "24"
  "8" -- "25"
  "9" -- "25"
/* Move related edges. */
  "2" -- "17" [style=dashed]
  "3" -- "18" [style=dashed]
  "4" -- "19" [style=dashed]
  "5" -- "20" [style=dashed]
  "6" -- "21" [style=dashed]
  "7" -- "22" [style=dashed]
  "8" -- "23" [style=dashed]
  "9" -- "24" [style=dashed]
  "10" -- "25" [style=dashed]
}

tens.main._main.interference.gv

But as you can see, the result is quite hairy, and unreadable, especially for interference graphs:

  • the callee save registers ($s0 to $s7 on Mips) collide with every other temporary.

  • the callee save registers have to be… saved, which doubles the number of Temp.

To circumvent this problem, use --callee-save to limit the number of such registers.

hundreds.tig
100 + 200 * 300
tc --callee-save=0 -VN hundreds.tig
$ tc --callee-save=0 -VN hundreds.tig

$ echo $?
0
/* Graph Visualization */
digraph "hundreds.main._main.liveness.gv" {
  node [shape=box];
  "0" [label="tc_main:"]
  "1" [label="# Allocate frame"]
  "2" [label="	move	$x5, $ra"]
  "3" [label="l0:"]
  "4" [label="	li	$x1, 100"]
  "5" [label="	li	$x2, 200"]
  "6" [label="	mul	$x3, $x2, 300"]
  "7" [label="	add	$x4, $x1, $x3"]
  "8" [label="l1:"]
  "9" [label="	move	$ra, $x5"]
  "10" [label="# Deallocate frame"]
  "11" [label="	jr	$ra"]
  "0" -> "1" [label="$fp $ra $sp $v0 $zero"]
  "1" -> "2" [label="$fp $ra $sp $v0 $zero"]
  "2" -> "3" [label="$fp $sp $v0 $x5 $zero"]
  "3" -> "4" [label="$fp $sp $v0 $x5 $zero"]
  "4" -> "5" [label="$fp $sp $v0 $x1 $x5 $zero"]
  "5" -> "6" [label="$fp $sp $v0 $x1 $x2 $x5 $zero"]
  "6" -> "7" [label="$fp $sp $v0 $x1 $x3 $x5 $zero"]
  "7" -> "8" [label="$fp $sp $v0 $x5 $zero"]
  "8" -> "9" [label="$fp $sp $v0 $x5 $zero"]
  "9" -> "10" [label="$fp $ra $sp $v0 $zero"]
  "10" -> "11" [label="$fp $ra $sp $v0 $zero"]
}

hundreds.main._main.liveness.gv

/* Graph Visualization */
graph "hundreds.main._main" {
  node [shape=box];
  "0" [label="$a0"]
  "1" [label="$fp"]
  "2" [label="$ra"]
  "3" [label="$sp"]
  "4" [label="$v0"]
  "5" [label="$zero"]
  "6" [label="$a1"]
  "7" [label="$a2"]
  "8" [label="$a3"]
  "9" [label="$x5"]
  "10" [label="$x1"]
  "11" [label="$x2"]
  "12" [label="$x3"]
  "13" [label="$x4"]
  "0" -- "1"
  "0" -- "2"
  "0" -- "3"
  "0" -- "4"
  "0" -- "5"
  "1" -- "6"
  "2" -- "6"
  "3" -- "6"
  "4" -- "6"
  "5" -- "6"
  "1" -- "7"
  "2" -- "7"
  "3" -- "7"
  "4" -- "7"
  "5" -- "7"
  "1" -- "8"
  "2" -- "8"
  "3" -- "8"
  "4" -- "8"
  "5" -- "8"
  "1" -- "2"
  "1" -- "3"
  "1" -- "4"
  "1" -- "5"
  "2" -- "3"
  "3" -- "4"
  "3" -- "5"
  "2" -- "4"
  "4" -- "5"
  "2" -- "5"
  "1" -- "9"
  "3" -- "9"
  "4" -- "9"
  "5" -- "9"
  "1" -- "10"
  "3" -- "10"
  "4" -- "10"
  "9" -- "10"
  "5" -- "10"
  "1" -- "11"
  "3" -- "11"
  "4" -- "11"
  "10" -- "11"
  "9" -- "11"
  "5" -- "11"
  "1" -- "12"
  "3" -- "12"
  "4" -- "12"
  "10" -- "12"
  "9" -- "12"
  "5" -- "12"
  "1" -- "13"
  "3" -- "13"
  "4" -- "13"
  "9" -- "13"
  "5" -- "13"
/* Move related edges. */
  "2" -- "9" [style=dashed]
}

hundreds.main._main.interference.gv

Branching is of course a most interesting feature to exercise.

ors.tig
1 | 2 | 3
tc --callee-save=0 -I ors.tig
$ tc --callee-save=0 -I ors.tig
# == Final assembler ouput. == #
# Routine: _main
tc_main:
# Allocate frame
	move	$x4, $ra
l5:
	li	$x1, 1
	bne	$x1, 0, l3
l4:
	li	$x2, 2
	bne	$x2, 0, l0
l1:
l2:
	j	l6
l0:
	j	l2
l3:
	li	$x3, 1
	bne	$x3, 0, l0
l7:
	j	l1
l6:
	move	$ra, $x4
# Deallocate frame
	jr	$ra
$ echo $?
0
tc -FVN ors.tig
$ tc -FVN ors.tig

$ echo $?
0
/* Graph Visualization */
digraph "ors.main._main.flow.gv" {
  node [shape=box];
  "0" [label="tc_main:"]
  "1" [label="# Allocate frame"]
  "2" [label="	move	t12, $ra"]
  "3" [label="	move	t4, $s0"]
  "4" [label="	move	t5, $s1"]
  "5" [label="	move	t6, $s2"]
  "6" [label="	move	t7, $s3"]
  "7" [label="	move	t8, $s4"]
  "8" [label="	move	t9, $s5"]
  "9" [label="	move	t10, $s6"]
  "10" [label="	move	t11, $s7"]
  "11" [label="l5:"]
  "12" [label="	li	t1, 1"]
  "13" [label="	bne	t1, 0, l3"]
  "14" [label="l4:"]
  "15" [label="	li	t2, 2"]
  "16" [label="	bne	t2, 0, l0"]
  "17" [label="l1:"]
  "18" [label="l2:"]
  "19" [label="	j	l6"]
  "20" [label="l0:"]
  "21" [label="	j	l2"]
  "22" [label="l3:"]
  "23" [label="	li	t3, 1"]
  "24" [label="	bne	t3, 0, l0"]
  "25" [label="l7:"]
  "26" [label="	j	l1"]
  "27" [label="l6:"]
  "28" [label="	move	$s0, t4"]
  "29" [label="	move	$s1, t5"]
  "30" [label="	move	$s2, t6"]
  "31" [label="	move	$s3, t7"]
  "32" [label="	move	$s4, t8"]
  "33" [label="	move	$s5, t9"]
  "34" [label="	move	$s6, t10"]
  "35" [label="	move	$s7, t11"]
  "36" [label="	move	$ra, t12"]
  "37" [label="# Deallocate frame"]
  "38" [label="	jr	$ra"]
  "0" -> "1"
  "1" -> "2"
  "2" -> "3"
  "3" -> "4"
  "4" -> "5"
  "5" -> "6"
  "6" -> "7"
  "7" -> "8"
  "8" -> "9"
  "9" -> "10"
  "10" -> "11"
  "11" -> "12"
  "12" -> "13"
  "14" -> "15"
  "15" -> "16"
  "17" -> "18"
  "18" -> "19"
  "20" -> "21"
  "22" -> "23"
  "23" -> "24"
  "25" -> "26"
  "27" -> "28"
  "28" -> "29"
  "29" -> "30"
  "30" -> "31"
  "31" -> "32"
  "32" -> "33"
  "33" -> "34"
  "34" -> "35"
  "35" -> "36"
  "36" -> "37"
  "37" -> "38"
  "13" -> "22"
  "13" -> "14"
  "16" -> "20"
  "16" -> "17"
  "19" -> "27"
  "21" -> "18"
  "24" -> "20"
  "24" -> "25"
  "26" -> "17"
}

ors.main._main.flow.gv

/* Graph Visualization */
digraph "ors.main._main.liveness.gv" {
  node [shape=box];
  "0" [label="tc_main:"]
  "1" [label="# Allocate frame"]
  "2" [label="	move	$x12, $ra"]
  "3" [label="	move	$x4, $s0"]
  "4" [label="	move	$x5, $s1"]
  "5" [label="	move	$x6, $s2"]
  "6" [label="	move	$x7, $s3"]
  "7" [label="	move	$x8, $s4"]
  "8" [label="	move	$x9, $s5"]
  "9" [label="	move	$x10, $s6"]
  "10" [label="	move	$x11, $s7"]
  "11" [label="l5:"]
  "12" [label="	li	$x1, 1"]
  "13" [label="	bne	$x1, 0, l3"]
  "14" [label="l4:"]
  "15" [label="	li	$x2, 2"]
  "16" [label="	bne	$x2, 0, l0"]
  "17" [label="l1:"]
  "18" [label="l2:"]
  "19" [label="	j	l6"]
  "20" [label="l0:"]
  "21" [label="	j	l2"]
  "22" [label="l3:"]
  "23" [label="	li	$x3, 1"]
  "24" [label="	bne	$x3, 0, l0"]
  "25" [label="l7:"]
  "26" [label="	j	l1"]
  "27" [label="l6:"]
  "28" [label="	move	$s0, $x4"]
  "29" [label="	move	$s1, $x5"]
  "30" [label="	move	$s2, $x6"]
  "31" [label="	move	$s3, $x7"]
  "32" [label="	move	$s4, $x8"]
  "33" [label="	move	$s5, $x9"]
  "34" [label="	move	$s6, $x10"]
  "35" [label="	move	$s7, $x11"]
  "36" [label="	move	$ra, $x12"]
  "37" [label="# Deallocate frame"]
  "38" [label="	jr	$ra"]
  "0" -> "1" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
  "1" -> "2" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
  "2" -> "3" [label="$fp $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $x12 $zero"]
  "3" -> "4" [label="$fp $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $x12 $x4 $zero"]
  "4" -> "5" [label="$fp $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $x12 $x4 $x5 $zero"]
  "5" -> "6" [label="$fp $s3 $s4 $s5 $s6 $s7 $sp $v0 $x12 $x4 $x5 $x6 $zero"]
  "6" -> "7" [label="$fp $s4 $s5 $s6 $s7 $sp $v0 $x12 $x4 $x5 $x6 $x7 $zero"]
  "7" -> "8" [label="$fp $s5 $s6 $s7 $sp $v0 $x12 $x4 $x5 $x6 $x7 $x8 $zero"]
  "8" -> "9" [label="$fp $s6 $s7 $sp $v0 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "9" -> "10" [label="$fp $s7 $sp $v0 $x10 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "10" -> "11" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "11" -> "12" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "12" -> "13" [label="$fp $sp $v0 $x1 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "14" -> "15" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "15" -> "16" [label="$fp $sp $v0 $x10 $x11 $x12 $x2 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "17" -> "18" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "18" -> "19" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "20" -> "21" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "22" -> "23" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "23" -> "24" [label="$fp $sp $v0 $x10 $x11 $x12 $x3 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "25" -> "26" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "27" -> "28" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "28" -> "29" [label="$fp $s0 $sp $v0 $x10 $x11 $x12 $x5 $x6 $x7 $x8 $x9 $zero"]
  "29" -> "30" [label="$fp $s0 $s1 $sp $v0 $x10 $x11 $x12 $x6 $x7 $x8 $x9 $zero"]
  "30" -> "31" [label="$fp $s0 $s1 $s2 $sp $v0 $x10 $x11 $x12 $x7 $x8 $x9 $zero"]
  "31" -> "32" [label="$fp $s0 $s1 $s2 $s3 $sp $v0 $x10 $x11 $x12 $x8 $x9 $zero"]
  "32" -> "33" [label="$fp $s0 $s1 $s2 $s3 $s4 $sp $v0 $x10 $x11 $x12 $x9 $zero"]
  "33" -> "34" [label="$fp $s0 $s1 $s2 $s3 $s4 $s5 $sp $v0 $x10 $x11 $x12 $zero"]
  "34" -> "35" [label="$fp $s0 $s1 $s2 $s3 $s4 $s5 $s6 $sp $v0 $x11 $x12 $zero"]
  "35" -> "36" [label="$fp $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $x12 $zero"]
  "36" -> "37" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
  "37" -> "38" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
  "13" -> "22" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "13" -> "14" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "16" -> "20" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "16" -> "17" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "19" -> "27" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "21" -> "18" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "24" -> "20" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "24" -> "25" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
  "26" -> "17" [label="$fp $sp $v0 $x10 $x11 $x12 $x4 $x5 $x6 $x7 $x8 $x9 $zero"]
}

ors.main._main.liveness.gv

/* Graph Visualization */
graph "ors.main._main" {
  node [shape=box];
  "0" [label="$a0"]
  "1" [label="$fp"]
  "2" [label="$ra"]
  "3" [label="$s0"]
  "4" [label="$s1"]
  "5" [label="$s2"]
  "6" [label="$s3"]
  "7" [label="$s4"]
  "8" [label="$s5"]
  "9" [label="$s6"]
  "10" [label="$s7"]
  "11" [label="$sp"]
  "12" [label="$v0"]
  "13" [label="$zero"]
  "14" [label="$a1"]
  "15" [label="$a2"]
  "16" [label="$a3"]
  "17" [label="$x12"]
  "18" [label="$x4"]
  "19" [label="$x5"]
  "20" [label="$x6"]
  "21" [label="$x7"]
  "22" [label="$x8"]
  "23" [label="$x9"]
  "24" [label="$x10"]
  "25" [label="$x11"]
  "26" [label="$x1"]
  "27" [label="$x2"]
  "28" [label="$x3"]
  "0" -- "1"
  "0" -- "2"
  "0" -- "3"
  "0" -- "4"
  "0" -- "5"
  "0" -- "6"
  "0" -- "7"
  "0" -- "8"
  "0" -- "9"
  "0" -- "10"
  "0" -- "11"
  "0" -- "12"
  "0" -- "13"
  "1" -- "14"
  "2" -- "14"
  "3" -- "14"
  "4" -- "14"
  "5" -- "14"
  "6" -- "14"
  "7" -- "14"
  "8" -- "14"
  "9" -- "14"
  "10" -- "14"
  "11" -- "14"
  "12" -- "14"
  "13" -- "14"
  "1" -- "15"
  "2" -- "15"
  "3" -- "15"
  "4" -- "15"
  "5" -- "15"
  "6" -- "15"
  "7" -- "15"
  "8" -- "15"
  "9" -- "15"
  "10" -- "15"
  "11" -- "15"
  "12" -- "15"
  "13" -- "15"
  "1" -- "16"
  "2" -- "16"
  "3" -- "16"
  "4" -- "16"
  "5" -- "16"
  "6" -- "16"
  "7" -- "16"
  "8" -- "16"
  "9" -- "16"
  "10" -- "16"
  "11" -- "16"
  "12" -- "16"
  "13" -- "16"
  "1" -- "3"
  "2" -- "3"
  "3" -- "4"
  "3" -- "5"
  "3" -- "6"
  "3" -- "7"
  "3" -- "8"
  "3" -- "9"
  "3" -- "10"
  "3" -- "11"
  "3" -- "12"
  "3" -- "13"
  "1" -- "4"
  "2" -- "4"
  "4" -- "5"
  "4" -- "6"
  "4" -- "7"
  "4" -- "8"
  "4" -- "9"
  "4" -- "10"
  "4" -- "11"
  "4" -- "12"
  "4" -- "13"
  "1" -- "5"
  "2" -- "5"
  "5" -- "6"
  "5" -- "7"
  "5" -- "8"
  "5" -- "9"
  "5" -- "10"
  "5" -- "11"
  "5" -- "12"
  "5" -- "13"
  "1" -- "6"
  "2" -- "6"
  "6" -- "7"
  "6" -- "8"
  "6" -- "9"
  "6" -- "10"
  "6" -- "11"
  "6" -- "12"
  "6" -- "13"
  "1" -- "7"
  "2" -- "7"
  "7" -- "8"
  "7" -- "9"
  "7" -- "10"
  "7" -- "11"
  "7" -- "12"
  "7" -- "13"
  "1" -- "8"
  "2" -- "8"
  "8" -- "9"
  "8" -- "10"
  "8" -- "11"
  "8" -- "12"
  "8" -- "13"
  "1" -- "9"
  "2" -- "9"
  "9" -- "10"
  "9" -- "11"
  "9" -- "12"
  "9" -- "13"
  "1" -- "10"
  "2" -- "10"
  "10" -- "11"
  "10" -- "12"
  "10" -- "13"
  "1" -- "2"
  "1" -- "11"
  "1" -- "12"
  "1" -- "13"
  "2" -- "11"
  "11" -- "12"
  "11" -- "13"
  "2" -- "12"
  "12" -- "13"
  "2" -- "13"
  "1" -- "17"
  "3" -- "17"
  "4" -- "17"
  "5" -- "17"
  "6" -- "17"
  "7" -- "17"
  "8" -- "17"
  "9" -- "17"
  "10" -- "17"
  "11" -- "17"
  "12" -- "17"
  "13" -- "17"
  "1" -- "18"
  "4" -- "18"
  "5" -- "18"
  "6" -- "18"
  "7" -- "18"
  "8" -- "18"
  "9" -- "18"
  "10" -- "18"
  "11" -- "18"
  "12" -- "18"
  "17" -- "18"
  "13" -- "18"
  "1" -- "19"
  "5" -- "19"
  "6" -- "19"
  "7" -- "19"
  "8" -- "19"
  "9" -- "19"
  "10" -- "19"
  "11" -- "19"
  "12" -- "19"
  "17" -- "19"
  "18" -- "19"
  "13" -- "19"
  "1" -- "20"
  "6" -- "20"
  "7" -- "20"
  "8" -- "20"
  "9" -- "20"
  "10" -- "20"
  "11" -- "20"
  "12" -- "20"
  "17" -- "20"
  "18" -- "20"
  "19" -- "20"
  "13" -- "20"
  "1" -- "21"
  "7" -- "21"
  "8" -- "21"
  "9" -- "21"
  "10" -- "21"
  "11" -- "21"
  "12" -- "21"
  "17" -- "21"
  "18" -- "21"
  "19" -- "21"
  "20" -- "21"
  "13" -- "21"
  "1" -- "22"
  "8" -- "22"
  "9" -- "22"
  "10" -- "22"
  "11" -- "22"
  "12" -- "22"
  "17" -- "22"
  "18" -- "22"
  "19" -- "22"
  "20" -- "22"
  "21" -- "22"
  "13" -- "22"
  "1" -- "23"
  "9" -- "23"
  "10" -- "23"
  "11" -- "23"
  "12" -- "23"
  "17" -- "23"
  "18" -- "23"
  "19" -- "23"
  "20" -- "23"
  "21" -- "23"
  "22" -- "23"
  "13" -- "23"
  "1" -- "24"
  "10" -- "24"
  "11" -- "24"
  "12" -- "24"
  "17" -- "24"
  "18" -- "24"
  "19" -- "24"
  "20" -- "24"
  "21" -- "24"
  "22" -- "24"
  "23" -- "24"
  "13" -- "24"
  "1" -- "25"
  "11" -- "25"
  "12" -- "25"
  "24" -- "25"
  "17" -- "25"
  "18" -- "25"
  "19" -- "25"
  "20" -- "25"
  "21" -- "25"
  "22" -- "25"
  "23" -- "25"
  "13" -- "25"
  "1" -- "26"
  "11" -- "26"
  "12" -- "26"
  "24" -- "26"
  "25" -- "26"
  "17" -- "26"
  "18" -- "26"
  "19" -- "26"
  "20" -- "26"
  "21" -- "26"
  "22" -- "26"
  "23" -- "26"
  "13" -- "26"
  "1" -- "27"
  "11" -- "27"
  "12" -- "27"
  "24" -- "27"
  "25" -- "27"
  "17" -- "27"
  "18" -- "27"
  "19" -- "27"
  "20" -- "27"
  "21" -- "27"
  "22" -- "27"
  "23" -- "27"
  "13" -- "27"
  "1" -- "28"
  "11" -- "28"
  "12" -- "28"
  "24" -- "28"
  "25" -- "28"
  "17" -- "28"
  "18" -- "28"
  "19" -- "28"
  "20" -- "28"
  "21" -- "28"
  "22" -- "28"
  "23" -- "28"
  "13" -- "28"
  "3" -- "24"
  "3" -- "25"
  "3" -- "19"
  "3" -- "20"
  "3" -- "21"
  "3" -- "22"
  "3" -- "23"
  "4" -- "24"
  "4" -- "25"
  "4" -- "20"
  "4" -- "21"
  "4" -- "22"
  "4" -- "23"
  "5" -- "24"
  "5" -- "25"
  "5" -- "21"
  "5" -- "22"
  "5" -- "23"
  "6" -- "24"
  "6" -- "25"
  "6" -- "22"
  "6" -- "23"
  "7" -- "24"
  "7" -- "25"
  "7" -- "23"
  "8" -- "24"
  "8" -- "25"
  "9" -- "25"
/* Move related edges. */
  "2" -- "17" [style=dashed]
  "3" -- "18" [style=dashed]
  "4" -- "19" [style=dashed]
  "5" -- "20" [style=dashed]
  "6" -- "21" [style=dashed]
  "7" -- "22" [style=dashed]
  "8" -- "23" [style=dashed]
  "9" -- "24" [style=dashed]
  "10" -- "25" [style=dashed]
}

ors.main._main.interference.gv