Commit 668a93c9 authored by Taddeus Kroes's avatar Taddeus Kroes

Merge branch 'master' of github.com:taddeus/peephole

parents bfe97cf8 95cbd4de
...@@ -118,7 +118,21 @@ primary concern, this is not a big problem. ...@@ -118,7 +118,21 @@ primary concern, this is not a big problem.
\subsubsection*{Constant folding} \subsubsection*{Constant folding}
Another optimization is to do constant folding. Constant folding is replacing
a expensive step like addition with a more simple step like loading a constant.
Of course, this is not always possible. It is possible in cases where you apply
an operation on two constants, or a constant and a variable of which you know
for sure that it always has a certain value at that point. For example:
\begin{verbatim}
li $regA, 1 li $regA, 1
addu $regB, $regA, 2 -> li $regB, 3
\end{verbatim}
Of course, if \texttt{\$regA} is not used after this, it can be removed, which
will be done by the dead code elimination.
One problem we encountered with this is that the use of a \texttt{li} is that
the program often also stores this in the memory, so we had to check whether
this was necessary here as well.
\subsubsection*{Copy propagation} \subsubsection*{Copy propagation}
...@@ -147,8 +161,7 @@ An example would be the following: ...@@ -147,8 +161,7 @@ An example would be the following:
\begin{verbatim} \begin{verbatim}
move $regA, $regB move $regA, $regB move $regA, $regB move $regA, $regB
... ... ... ...
Code not writing $regA, -> ... Code not writing $regA, $regB -> ...
$regB ...
... ... ... ...
addu $regC, $regA, ... addu $regC, $regB, ... addu $regC, $regA, ... addu $regC, $regB, ...
\end{verbatim} \end{verbatim}
......
...@@ -137,7 +137,7 @@ def fold_constants(block): ...@@ -137,7 +137,7 @@ def fold_constants(block):
if reg_from in register: if reg_from in register:
# Other value is also known, copy its value # Other value is also known, copy its value
register[reg_to] = register[reg_to] register[reg_to] = register[reg_from]
else: else:
# Other value is unknown, delete the value # Other value is unknown, delete the value
del register[reg_to] del register[reg_to]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment