/* $Id$ */ /* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". */ /* C O P Y P R O P A G A T I O N */ extern line_p *copies; /* table of copies; every entry points to the * store-instruction. */ extern short *def_to_copynr; /* Table that maps a 'definition'-number to a * 'copy' number. */ extern short nrcopies; /* number of copies in the current procedure * (length of copies-table) */ void copy_analysis(proc_p p); /* Determine which copies procedure p has. * Compute C_IN(b), for every basic block b. */ bool is_copy(line_p def); /* See if the definition def is also a 'copy', * i.e. an statement of the form * 'A := B' (or, in EM terminology: * a sequence 'Load Variable; Store Variable'). */ void fold_var(line_p old, line_p new, bblock_p b); /* The variable referenced by the * EM instruction 'old' must be replaced * by the variable referenced by 'new'. */ bool value_retained(line_p copy, short defnr, line_p use, bblock_p b); /* bblock_p b) * See if the right hand side variable of the * copy still has the same value at 'use'. * If the copy and the use are in the same * basic block (defnr = 0), search from the * copy to the use, to see if the rhs variable * is changed. If the copy is in another block, * defnr is the definition-number of the copy. * Search from the beginning of the block to * the use, to see if the rhs is changed; * if not, check that the copy is in C_IN(b). */