Example #1
0
void genAccessAddress(dat_inst_t *d_inst, inf_node_t* ib) {
    int dbg = 0;
    int i,j;
    insn_t      *insn;
    de_inst_t   *inst;
    char        *deritree;

    d_inst->addr_set = NULL;
    insn = d_inst->insn;
    if (isStoreInst(insn->op)) {
        if (dbg) {
            fprintf(dbgAddr,"\n Ignore store inst");
            printDataRef(dbgAddr,d_inst);
        }
        return;
    }
    switch (d_inst->addrExpr.varNum) {
        case 0:
            if (dbg) {
                fprintf(dbgAddr,"\nAnalyze scalar access");
                fprintf(dbgAddr," L%d ",getIbLoop(ib)->id);
                printDataRef(dbgAddr,d_inst);
            }
            analyze_scalar_access(d_inst,ib); 
            break;
        default:
            if (dbg) {
                fprintf(dbgAddr,"\nAnalyze regular/unpred access");
                fprintf(dbgAddr," L%d ",getIbLoop(ib)->id);
                printDataRef(dbgAddr,d_inst);
            }
            analyze_regular_access(d_inst,ib); 
            break;
            //printf("\n Panic, unknown type %d",d_inst->addrExpr.t);
            //exit(1);
    }
    if (dbg) {
        fprintf(dbgAddr, "\nGenerated addr ");
        printSAddrSet(dbgAddr,d_inst->addr_set,1);
        fprintf(dbgAddr, "\n");
    }

}
int TestArrayReference() {
//int main(int argc, char* argv[]) {

	int da[10];

	for (int i = 0; i < 10; i++) {
		da[i] = i;
	}

	printData(da);
	std::cout << std::endl << std::endl;

	printDataRef(da);

	return getchar();
}
Example #3
0
/*** Detect possible AddrSet of scalar access and compute access scope ***/
int analyze_scalar_access(dat_inst_t *d_inst, inf_node_t* ib) {
    int dbg = 0;
    int pos;
    int addr;

    insn_t*     insn;
    loop_t      *loop;
    saddr_p      memblk; 
    ts_p        memTS;
    worklist_p  tsNode,orgTS, blkNode;

    if (d_inst->addrExpr.varNum != 0) {
        printf("\nERR: not scalar access");printDataRef(stdout, d_inst);
    }

    addr = d_inst->addrExpr.k; 

    tsNode = NULL;
    orgTS = NULL;
    loop = getIbLoop(ib);
    while (loop!=NULL) {
        if (dbg) {
            fprintf(dbgAddr,"\n In loop L%d, lbound %d",loop->id,loop->bound-1);
            fflush(dbgAddr);}

        memTS = (ts_p) malloc(sizeof(ts_s));
        memTS->loop_id = loop->id;
        memTS->lw = 0;
        memTS->up = max(loop->bound-1,0);
        memTS->flag = 0;
        memTS->flag |= RENEWABLE; 
        addAfterNode(memTS, &tsNode, &orgTS);
        //addToWorkList( &(orgTS),memTS); 
        loop = loop->parent;
    } 
    blkNode = NULL;
    insn = (insn_t*)(d_inst->insn);
    memblk = createSAddr(GET_MEM(addr),hexValue(insn->addr), 1, orgTS);
    addAfterNode(memblk, &blkNode, &(d_inst->addr_set));
    return 0;
}