NAME¶
copt - peephole optimizer
SYSNOPIS¶
copt file ...
DESCRIPTION¶
copt is a general-purpose peephole optimizer. It reads code from its standard
input and writes an improved version to its standard output. copy reads the
named files for its optimizations, which are encoded as follows:
<pattern for input line 1>
<pattern for input line 2>
...
<pattern for input line n>
=
<pattern for output line 1>
<pattern for output line 2>
...
<pattern for output line m>
<blank line>
Pattern matching uses literal string comparison, with one exception: ``%%''
matches the ``%'' character, and ``%'' followed by a digit matches everything
up to the next occurrence of the next pattern character, though all
occurrences of %
n must denote the same string. For example, the
pattern ``%1=%1.'' matches exactly those strings that begin with a string X,
followed by a ``='' (the first), followed by a second occurrence of X,
followed by a period. In this way, the input/output pattern
mov $%1,r%2
mov *r%2,r%2
=
mov %1,r%2
commands copt to replace runs like
mov $_a,r3
mov *r3,r3
with
mov _a,r3
Note that a tab or newline can terminate a %
n variable.
copt compares each run of input patterns with the current input instruction and
its predecessors. If no match is found, it advances to the next input
instruction and tries again. Otherwise, it replaces the input instructions
with the corresponding output patterns, pattern variables instantiated,and
resumes its search with the
first instruction of the replacement. copt
matches input patterns in reverse order to cascade optimizations without
backing up.
BUGS¶
Errors in optimization files are always possible.
SEE ALSO¶
z88dk(1),
z88dk-zcc(1),
z88dk-z80asm(1),
z88dk-appmake(1),
z88dk-copt(1).
AUTHOR¶
z88dk was written by Dominic Morris <dom@z88dk.org>, and others.