From 01f77a03af3433deed3a2b11effbe9f1f470775b Mon Sep 17 00:00:00 2001 From: ceriel Date: Fri, 20 Oct 1989 11:59:52 +0000 Subject: [PATCH] Added CBO (commutative binary operator) to make it a little easier to write reordering patterns --- util/opt/mktab.y | 99 +++++++++++++++++++++++++++------- util/opt/patterns | 128 ++++++++++++++++++++++++-------------------- util/opt/peephole.c | 10 ++++ 3 files changed, 161 insertions(+), 76 deletions(-) diff --git a/util/opt/mktab.y b/util/opt/mktab.y index 943595c8a..3eaffd9a0 100644 --- a/util/opt/mktab.y +++ b/util/opt/mktab.y @@ -18,6 +18,8 @@ static char rcsid[] = "$Header$"; * Author: Hans van Staveren */ +#define op_CBO (op_plast+1) + #define MAXNODES 1000 expr_t nodes[MAXNODES]; expr_p lastnode = nodes+1; @@ -32,6 +34,18 @@ bool nonumlab[N_EX_OPS]; bool onlyconst[N_EX_OPS]; int nerrors=0; char patid[128]; + +int CBO_instrs[] = { + op_adi, + op_adu, + op_and, + op_ior, + op_xor + /* don't add op_mli and op_mlu! */ +}; + +int patCBO; +int rplCBO; %} %union { @@ -67,22 +81,21 @@ patternlist ; pattern : mnemlist optexpr ':' replacement '\n' - { register i; - outbyte(0); outshort(prevind); prevind=curind-3; - out(patlen); - for (i=0;imaxpatlen) maxpatlen=patlen; + else { + outpat($2, 0); + } + patCBO = rplCBO = 0; } | error '\n' { yyerrok; } @@ -103,12 +116,36 @@ repllist: /* empty */ | repllist repl ; repl : MNEM optexpr - { rplmnem[rpllen] = $1; rplexpr[rpllen++] = $2; } + { rplmnem[rpllen] = $1; rplexpr[rpllen++] = $2; + if ($1 == op_CBO) { + if (!patCBO) { + yyerror("No CBO in pattern"); + } + if (rplCBO) { + yyerror("Only one CBO allowed in replacement"); + } + rplCBO = 1; + } + } ; mnemlist: MNEM - { patlen=0; patmnem[patlen++] = $1; } + { patlen=0; patmnem[patlen++] = $1; + if ($1 == op_CBO) { + if (patCBO) { + yyerror("Only one CBO allowed in pattern"); + } + patCBO = 1; + } + } | mnemlist MNEM - { patmnem[patlen++] = $2; } + { patmnem[patlen++] = $2; + if ($2 == op_CBO) { + if (patCBO) { + yyerror("Only one CBO allowed in pattern"); + } + patCBO = 1; + } + } ; optexpr : /* empty */ { $$ = 0; } @@ -211,6 +248,7 @@ inithash() { enter("LEP",op_LEP); enter("SLP",op_SLP); enter("SEP",op_SEP); + enter("CBO",op_CBO); for(i=0;i<=sp_lmnem-sp_fmnem;i++) enter(em_mnem[i],i+sp_fmnem); } @@ -334,6 +372,31 @@ initio() { curind = 1; } +outpat(exprno, instrno) +{ + register int i; + + outbyte(0); outshort(prevind); prevind=curind-3; + out(patlen); + for (i=0;imaxpatlen) maxpatlen=patlen; +} + outbyte(b) { printf(",%3d",b); diff --git a/util/opt/patterns b/util/opt/patterns index 720781dda..019d95e43 100644 --- a/util/opt/patterns +++ b/util/opt/patterns @@ -552,80 +552,92 @@ lde loc inn $3==2*w && $2>=0 && $2<16*w : ldf loc inn $3==2*w && $2>=0 && $2<16*w : lof $1+($2/(8*w))*w loc $2&(8*w-1) inn w loc inn $1<0 || $1>=8*$2 : asp $2 loc 0 -lol loc adi stl $3==w && $1==$4 : loc $2 lol $1 adi w stl $4 -ldl ldc adi sdl $3==2*w && $1==$4 : ldc $2 ldl $1 adi 2*w sdl $4 -lol loe adi stl $3==w && $1==$4 : loe $2 lol $1 adi w stl $4 -ldl lde adi sdl $3==2*w && $1==$4 : lde $2 ldl $1 adi 2*w sdl $4 + +lol loc CBO stl $3==w && $1==$4 : loc $2 lol $1 CBO w stl $4 +lol loe CBO stl $3==w && $1==$4 : loe $2 lol $1 CBO w stl $4 +lol lol CBO stl $3==w && $1==$4 && $1!=$2 : lol $2 lol $1 CBO w stl $4 +lol lil CBO stl $3==w && $1==$4 : lil $2 lol $1 CBO w stl $4 + +ldl ldc CBO sdl $3==2*w && $1==$4 : ldc $2 ldl $1 CBO $3 sdl $4 +ldl lde CBO sdl $3==2*w && $1==$4 : lde $2 ldl $1 CBO $3 sdl $4 +ldl ldl CBO sdl $3==2*w && $1==$4 &&$1!=$2 : ldl $2 ldl $1 CBO $3 sdl $4 + +loe loc CBO ste $3==w && $1==$4 : loc $2 loe $1 CBO w ste $4 +loe loe CBO ste $3==w && $1==$4 && $1!=$2 : loe $2 loe $1 CBO w ste $4 +loe lol CBO ste $3==w && $1==$4 : lol $2 loe $1 CBO w ste $4 +loe lil CBO ste $3==w && $1==$4 : lil $2 loe $1 CBO w ste $4 + +lde ldc CBO sde $3==2*w && $1==$4 : ldc $2 lde $1 CBO $3 sde $4 +lde lde CBO sde $3==2*w && $1==$4 && $1!=$2 : lde $2 lde $1 CBO $3 sde $4 +lde ldl CBO sde $3==2*w && $1==$4 : ldl $2 lde $1 CBO $3 sde $4 + +lil loc CBO sil $3==w && $1==$4 : loc $2 lil $1 CBO w sil $4 +lil lol CBO sil $3==w && $1==$4 : lol $2 lil $1 CBO w sil $4 +lil loe CBO sil $3==w && $1==$4 : loe $2 lil $1 CBO w sil $4 +lil lil CBO sil $3==w && $1==$4 && $1!=$2 : lil $2 lil $1 CBO w sil $4 + +LLP loi ldc CBO LLP sti $4==2*w && $2==$4 && $6==$4 && $1==$5 : + ldc $3 LLP $1 loi $2 CBO $4 LLP $5 sti $6 +LLP loi ldl CBO LLP sti $4==2*w && $2==$4 && $6==$4 && $1==$5 : + ldl $3 LLP $1 loi $2 CBO $4 LLP $5 sti $6 +LLP loi lde CBO LLP sti $4==2*w && $2==$4 && $6==$4 && $1==$5 : + lde $3 LLP $1 loi $2 CBO $4 LLP $5 sti $6 + +LLP ldf ldc CBO LLP sdf $4==2*w && $2==$6 && $1==$5 : + ldc $3 LLP $1 ldf $2 CBO $4 LLP $5 sdf $6 +LLP ldf ldl CBO LLP sdf $4==2*w && $2==$6 && $1==$5 : + ldl $3 LLP $1 ldf $2 CBO $4 LLP $5 sdf $6 +LLP ldf lde CBO LLP sdf $4==2*w && $2==$6 && $1==$5 : + lde $3 LLP $1 ldf $2 CBO $4 LLP $5 sdf $6 + +LLP lof loc CBO LLP stf $4==w && $2==$6 && $1==$5 : + loc $3 LLP $1 lof $2 CBO $4 LLP $5 stf $6 +LLP lof lol CBO LLP stf $4==w && $2==$6 && $1==$5 : + lol $3 LLP $1 lof $2 CBO $4 LLP $5 stf $6 +LLP lof loe CBO LLP stf $4==w && $2==$6 && $1==$5 : + loe $3 LLP $1 lof $2 CBO $4 LLP $5 stf $6 +LLP lof lil CBO LLP stf $4==w && $2==$6 && $1==$5 : + lil $3 LLP $1 lof $2 CBO $4 LLP $5 stf $6 + +LEP loi ldc CBO LEP sti $4==2*w && $2==$4 && $6==$4 && $1==$5 : + ldc $3 LEP $1 loi $2 CBO $4 LEP $5 sti $6 +LEP loi ldl CBO LEP sti $4==2*w && $2==$4 && $6==$4 && $1==$5 : + ldl $3 LEP $1 loi $2 CBO $4 LEP $5 sti $6 +LEP loi lde CBO LEP sti $4==2*w && $2==$4 && $6==$4 && $1==$5 : + lde $3 LEP $1 loi $2 CBO $4 LEP $5 sti $6 + +LEP ldf ldc CBO LEP sdf $4==2*w && $2==$6 && $1==$5 : + ldc $3 LEP $1 ldf $2 CBO $4 LEP $5 sdf $6 +LEP ldf ldl CBO LEP sdf $4==2*w && $2==$6 && $1==$5 : + ldl $3 LEP $1 ldf $2 CBO $4 LEP $5 sdf $6 +LEP ldf lde CBO LEP sdf $4==2*w && $2==$6 && $1==$5 : + lde $3 LEP $1 ldf $2 CBO $4 LEP $5 sdf $6 + +LEP lof loc CBO LEP stf $4==w && $2==$6 && $1==$5 : + loc $3 LEP $1 lof $2 CBO $4 LEP $5 stf $6 +LEP lof lol CBO LEP stf $4==w && $2==$6 && $1==$5 : + lol $3 LEP $1 lof $2 CBO $4 LEP $5 stf $6 +LEP lof loe CBO LEP stf $4==w && $2==$6 && $1==$5 : + loe $3 LEP $1 lof $2 CBO $4 LEP $5 stf $6 +LEP lof lil CBO LEP stf $4==w && $2==$6 && $1==$5 : + lil $3 LEP $1 lof $2 CBO $4 LEP $5 stf $6 + ldl loe loc loc cii adi sdl $6==2*w && $1==$7 && $3==w && $4==2*w : loe $2 loc $3 loc $4 cii ldl $1 adi 2*w sdl $1 -lol lol adi stl $3==w && $1==$4 && $1!=$2 : lol $2 lol $1 adi w stl $4 -ldl ldl adi sdl $3==2*w && $1==$4 &&$1!=$2 : ldl $2 ldl $1 adi 2*w sdl $4 ldl lol loc loc cii adi sdl $6==2*w && $1==$7 && $3==w && $4==2*w : lol $2 loc $3 loc $4 cii ldl $1 adi 2*w sdl $1 -loe loc adi ste $3==w && $1==$4 : loc $2 loe $1 adi w ste $4 -lde ldc adi sde $3==2*w && $1==$4 : ldc $2 lde $1 adi 2*w sde $4 -loe loe adi ste $3==w && $1==$4 && $1!=$2 : loe $2 loe $1 adi w ste $4 -lde lde adi sde $3==2*w && $1==$4 && $1!=$2 : lde $2 lde $1 adi 2*w sde $4 lde loe loc loc cii adi sde $6==2*w && $1==$7 && $3==w && $4==2*w : loe $2 loc $3 loc $4 cii lde $1 adi 2*w sde $1 -loe lol adi ste $3==w && $1==$4 : lol $2 loe $1 adi w ste $4 -lde ldl adi sde $3==2*w && $1==$4 : ldl $2 lde $1 adi 2*w sde $4 lde lol loc loc cii adi sde $6==2*w && $1==$7 && $3==w && $4==2*w : lol $2 loc $3 loc $4 cii lde $1 adi 2*w sde $1 -lol loc adu stl $3==w && $1==$4 : loc $2 lol $1 adu w stl $4 -ldl ldc adu sdl $3==2*w && $1==$4 : ldc $2 ldl $1 adu 2*w sdl $4 -lol loe adu stl $3==w && $1==$4 : loe $2 lol $1 adu w stl $4 -ldl lde adu sdl $3==2*w && $1==$4 : lde $2 ldl $1 adu 2*w sdl $4 -lol lol adu stl $3==w && $1==$4 && $1!=$2 : lol $2 lol $1 adu w stl $4 -ldl ldl adu sdl $3==2*w && $1==$4 &&$1!=$2 : ldl $2 ldl $1 adu 2*w sdl $4 -loe loc adu ste $3==w && $1==$4 : loc $2 loe $1 adu w ste $4 -lde ldc adu sde $3==2*w && $1==$4 : ldc $2 lde $1 adu 2*w sde $4 -loe loe adu ste $3==w && $1==$4 && $1!=$2 : loe $2 loe $1 adu w ste $4 -lde lde adu sde $3==2*w && $1==$4 && $1!=$2 : lde $2 lde $1 adu 2*w sde $4 -loe lol adu ste $3==w && $1==$4 : lol $2 loe $1 adu w ste $4 -lde ldl adu sde $3==2*w && $1==$4 : ldl $2 lde $1 adu 2*w sde $4 -lol loe mli stl $3==w && $1==$4 : loe $2 lol $1 mli w stl $4 -ldl lde mli sdl $3==2*w && $1==$4 : lde $2 ldl $1 mli 2*w sdl $4 ldl loe loc loc cii mli sdl $6==2*w && $1==$7 && $3==w && $4==2*w : loe $2 loc $3 loc $4 cii ldl $1 mli 2*w sdl $1 -lol lol mli stl $3==w && $1==$4 && $1!=$2 : lol $2 lol $1 mli w stl $4 -ldl ldl mli sdl $3==2*w && $1==$4 &&$1!=$2 : ldl $2 ldl $1 mli 2*w sdl $4 ldl lol loc loc cii mli sdl $6==2*w && $1==$7 && $3==w && $4==2*w : lol $2 loc $3 loc $4 cii ldl $1 mli 2*w sdl $1 -loe loe mli ste $3==w && $1==$4 && $1!=$2 : loe $2 loe $1 mli w ste $4 -lde lde mli sde $3==2*w && $1==$4 && $1!=$2 : lde $2 lde $1 mli 2*w sde $4 lde loe loc loc cii mli sde $6==2*w && $1==$7 && $3==w && $4==2*w : loe $2 loc $3 loc $4 cii lde $1 mli 2*w sde $1 -loe lol mli ste $3==w && $1==$4 : lol $2 loe $1 mli w ste $4 -lde ldl mli sde $3==2*w && $1==$4 : ldl $2 lde $1 mli 2*w sde $4 lde lol loc loc cii mli sde $6==2*w && $1==$7 && $3==w && $4==2*w : lol $2 loc $3 loc $4 cii lde $1 mli 2*w sde $1 -lol loe mlu stl $3==w && $1==$4 : loe $2 lol $1 mlu w stl $4 -ldl lde mlu sdl $3==2*w && $1==$4 : lde $2 ldl $1 mlu 2*w sdl $4 -lol lol mlu stl $3==w && $1==$4 && $1!=$2 : lol $2 lol $1 mlu w stl $4 -ldl ldl mlu sdl $3==2*w && $1==$4 &&$1!=$2 : ldl $2 ldl $1 mlu 2*w sdl $4 -loe loe mlu ste $3==w && $1==$4 && $1!=$2 : loe $2 loe $1 mlu w ste $4 -lde lde mlu sde $3==2*w && $1==$4 && $1!=$2 : lde $2 lde $1 mlu 2*w sde $4 -loe lol mlu ste $3==w && $1==$4 : lol $2 loe $1 mlu w ste $4 -lde ldl mlu sde $3==2*w && $1==$4 : ldl $2 lde $1 mlu 2*w sde $4 -lol loc ior stl $3==w && $1==$4 : loc $2 lol $1 ior w stl $4 -lol loe ior stl $3==w && $1==$4 : loe $2 lol $1 ior w stl $4 -lol lol ior stl $3==w && $1==$4 && $1!=$2 : lol $2 lol $1 ior w stl $4 -loe loc ior ste $3==w && $1==$4 : loc $2 loe $1 ior w ste $4 -loe loe ior ste $3==w && $1==$4 && $1!=$2 : loe $2 loe $1 ior w ste $4 -loe lol ior ste $3==w && $1==$4 : lol $2 loe $1 ior w ste $4 -lol loc and stl $3==w && $1==$4 : loc $2 lol $1 and w stl $4 -lol loe and stl $3==w && $1==$4 : loe $2 lol $1 and w stl $4 -lol lol and stl $3==w && $1==$4 && $1!=$2 : lol $2 lol $1 and w stl $4 -loe loc and ste $3==w && $1==$4 : loc $2 loe $1 and w ste $4 -loe loe and ste $3==w && $1==$4 && $1!=$2 : loe $2 loe $1 and w ste $4 -loe lol and ste $3==w && $1==$4 : lol $2 loe $1 and w ste $4 -lol loc xor stl $3==w && $1==$4 : loc $2 lol $1 xor w stl $4 -lol loe xor stl $3==w && $1==$4 : loe $2 lol $1 xor w stl $4 -lol lol xor stl $3==w && $1==$4 && $1!=$2 : lol $2 lol $1 xor w stl $4 -loe loc xor ste $3==w && $1==$4 : loc $2 loe $1 xor w ste $4 -loe loe xor ste $3==w && $1==$4 && $1!=$2 : loe $2 loe $1 xor w ste $4 -loe lol xor ste $3==w && $1==$4 : lol $2 loe $1 xor w ste $4 loi asp $1==$2 : asp p lal loi loc loc loc loc ior $2==4*w && $7==4*w && ($3==0)+($4==0)+($5==0)+($6==0)>2 : lol $1+3*w loc $3 ior w lol $1+2*w loc $4 ior w lol $1+w loc $5 ior w lol $1 loc $6 ior w diff --git a/util/opt/peephole.c b/util/opt/peephole.c index 7c206f776..7145629e8 100644 --- a/util/opt/peephole.c +++ b/util/opt/peephole.c @@ -603,6 +603,7 @@ basicblock(alpp) line_p *alpp; { int i; short index; bool madeopt; + int count = 0; lpp = alpp; madeopt = FALSE; while ((*lpp) != (line_p) 0 && ((*lpp)->l_instr&BMASK) != op_lab) { @@ -639,6 +640,15 @@ basicblock(alpp) line_p *alpp; { index=(bp[PO_NEXT]&BMASK)|(bp[PO_NEXT+1]<<8); } } + if (lpp == next) { + count++; + if (count > 100) { + /* probably loop in table */ + fprintf(stderr, "Warning: possible loop in patterns; call an expert\n"); + next = &((*lpp)->l_next); + } + } + else count = 0; lpp = next; } return madeopt; -- 2.34.1