Update to 2.0.0 tree from current Fremantle build
[opencv] / apps / cvenv / EiC / optomizer.c
diff --git a/apps/cvenv/EiC/optomizer.c b/apps/cvenv/EiC/optomizer.c
deleted file mode 100644 (file)
index 929ba61..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/* optomizer.c
- *
- *     (C) Copyright Jul 27 1996, Edmond J. Breen.
- *                ALL RIGHTS RESERVED.
- * This code may be copied for personal, non-profit use only.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "MachSet.h"
-#include "global.h"
-#include "typesets.h"
-#include "error.h"
-
-#define isgoto(C,i)  (opcode(C,i) >= jmpu && opcode(C,i) <= jmpTptr)
-
-typedef struct {
-    int ninst;        /* # of instructions */
-    int leader;       /* block leader */
-    int nb;           /* number of braches leading from block */
-    int *branch;      /* branch leaders */
-}block_t;
-
-#define crt_block() (block_t*)calloc(sizeof(block_t),1)
-
-#define addbranch(x,y,z)    do{\
-                                   x = (int*)realloc(x,(y+1)*sizeof(int));\
-                                   x[y++] = z;\
-                           }while(0)
-
-static void freeblock(block_t * b, int nb)
-{
-    int i;
-    for(i =0;i<nb;++i)
-       if(b[i].branch)
-           free(b[i].branch);
-    free(b);
-}
-
-static block_t  initblock(code_t *c, int leader, int *visit)
-{
-    int i;
-    block_t  b;
-    b.leader = leader;
-    b.branch = NULL;
-    b.nb = 0;
-    b.ninst = 0;
-
-    for(i=leader;i<nextinst(c);++i) {
-       visit[i]++;
-       b.ninst++;
-       if(opcode(c,i) == eicreturn)
-           break;
-       else if(isgoto(c,i)) {
-           /*printf("[%d:%d]\n",i,i+ivalcode(c,i));*/
-           addbranch(b.branch,b.nb,i+ivalcode(c,i));
-           if(opcode(c,i) != jmpu) {
-               /*printf("[%d:%d]\n",i,i+1);*/
-               addbranch(b.branch,b.nb,i+1);
-           }
-           break;
-       } else if(opcode(c,i) == jmptab) {
-           struct {int n;val_t *loc;} *p;
-           int j;
-           p = pvalcode(c,i);
-           addbranch(b.branch,b.nb,i + p->loc[0].ival); 
-           for(j =1;j<p->n;j+=2)
-               addbranch(b.branch,b.nb,i + p->loc[j+1].ival);
-           break;
-       }
-    }
-    if(leader == nextinst(c))
-       visit[leader]++;
-    return b;
-}
-
-
-void  EiC_peephole(code_t *C, int *visit)
-{
-    int  i, n,j;
-    n = nextinst(C);
-    for(i = 0; i < n; ++i)
-       if(isgoto(C,i)) {
-           j = i + ivalcode(C,i);
-           if(j >= n)
-               continue;
-           if(opcode(C,j) == jmpu || opcode(C,i) == opcode(C,j)) {
-               /*visit[i+ivalcode(C,i)]--;*/
-               ivalcode(C,i) += ivalcode(C,j);
-
-           }
-       }
-}
-
-int EiC_analyseCode(code_t *C)
-{
-    /* returns the index to the last visited instruction */
-    block_t *block = NULL;
-
-    int nb = 0;
-    int  i,j,rtn;
-    int *visit;
-
-    visit = calloc(sizeof(*visit),nextinst(C)+1);
-    block = realloc(block,(nb+1)*sizeof(*block));
-    block[nb++] = initblock(C,0,visit);
-
-    for(i=0;i<nb;++i) {
-       for(j=0;j<block[i].nb;++j) {
-           if(!visit[block[i].branch[j]]) {
-               block = realloc(block,(nb+1)*sizeof(*block));
-               block[nb++] = initblock(C,block[i].branch[j],visit);
-           } else
-               visit[block[i].branch[j]]++;
-       }
-    }
-       
-    rtn = 0;
-    for(i=0;i<=nextinst(C);)
-       if(visit[i]) 
-           rtn = i++;
-       else if(i < nextinst(C) && instline(C,i)) {
-           EiC_warningerror("Unreachable code at line %d",instline(C,i));          
-           for(;i<nextinst(C) && !visit[i];i++)
-               ;
-       } else
-           i++;
-
-    EiC_peephole(C,visit);
-
-/*******
-    for(i=0;i<nextinst(C);++i)
-       if(!visit[i])
-       setopcode(C,i,empty);
-*******/
-    
-    freeblock(block,nb);
-    free(visit);
-
-    
-    return rtn;
-}
-
-
-int EiC_checkPeepHole(token_t *e1,int op)
-{
-    /*
-     * A simple arithmetic optimizer:
-     * do not add or subtract 0
-     * and do not multiply  or divide by 1
-     */
-    int v = 0;
-    if (isconst(e1->Type)) {
-       if (op == '+' || op == '-')
-           switch (EiC_gettype(e1->Type)) {
-             CASE_INT: CASE_UINT:v = e1->Val.ival == 0;
-               break;
-             CASE_LONG: CASE_ULONG:v = e1->Val.lval == 0;
-               break;
-             CASE_FLOAT:v = e1->Val.dval == 0;
-               break;
-               }
-       else if (op == '*')
-           switch (EiC_gettype(e1->Type)) {
-             CASE_INT: CASE_UINT:v = e1->Val.ival == 1;
-               break;
-             CASE_LONG: CASE_ULONG:v = e1->Val.lval == 1;
-               break;
-             CASE_FLOAT:v = e1->Val.dval == 1;
-               break;
-           }
-       }
-    return v;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-