TC-8 FAQ
- Why do we have a
TempMap, and not Appel? Refer to $fp or fp, in TC-5 FAQ, for all the details. Pay special attention to converting the temporaries where needed:
the flow graph is independent of the temporaries
the liveness graph, when computing live-in and live-out sets, must of course convert the “def” and “use” sets
the interference graph, when attributing a node number for each temporary (
InterferenceGraph::node_of), must allocate the same number to corresponding temporaries (e.g.,$fpandfpmust bear the same number).
We also use a
TempMaphere to build the liveness graph after register allocation, to check the compiler.and.tig1 & 2
tc -sV and.tig$ tc -sV and.tig $ echo $? 0
![/* Graph Visualization */
digraph "and.main._main.liveness.gv" {
node [shape=box];
"0" [label="tc_main:"]
"1" [label="# Allocate frame"]
"2" [label="l5:"]
"3" [label=" li $t0, 1"]
"4" [label=" bne $t0, 0, l0"]
"5" [label="l0:"]
"6" [label=" j l2"]
"7" [label="l2:"]
"8" [label=" j l3"]
"9" [label="l3:"]
"10" [label="# Deallocate frame"]
"11" [label=" jr $ra"]
"12" [label="l1:"]
"10" -> "11" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
"9" -> "10" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
"8" -> "9" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
"7" -> "8" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
"6" -> "7" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
"5" -> "6" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
"4" -> "5" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
"12" -> "7" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
"4" -> "12" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
"3" -> "4" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $t0 $v0 $zero"]
"2" -> "3" [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"]
"0" -> "1" [label="$fp $ra $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $sp $v0 $zero"]
}](../../_images/graphviz-74323ae7255c2381d1c67d64011a6bb3fc5a0615.png)
and.main._main.liveness.gv