ref: 0f4ff07f5e70ab058cc15831e24a5f7bce5e97a5
dir: /cc2/peep.c/
#include <inttypes.h>
#include <stddef.h>
#include "../inc/cc.h"
#include "cc2.h"
void
peephole(void)
{
Addr to, from;
TINT i;
uint8_t op;
for (pc = prog; pc; pc = pc->next) {
to = pc->to;
from = pc->from;
switch (pc->op) {
case SUB:
case ADD:
if (from.kind == CONST) {
if ((i = from.u.i) == 0 || i < 4) {
delcode();
op = (pc->op == ADD) ? INC : DEC;
while (i--)
inscode(op, &to, NULL);
}
/* TODO: More optimizations (ex: -1) */
}
break;
}
}
}