//------------------------------PhaseAggressiveCoalesce------------------------ // Aggressively, pessimistic coalesce copies. Aggressive means ignore graph // colorability; perhaps coalescing to the point of forcing a spill. // Pessimistic means we cannot coalesce if 2 live ranges interfere. This // implies we do not hit a fixed point right away. class PhaseAggressiveCoalesce : public PhaseCoalesce {
uint _unique; public: // Coalesce copies
PhaseAggressiveCoalesce( PhaseChaitin &chaitin ) : PhaseCoalesce(chaitin) {}
virtualvoid verify() { };
// Aggressively coalesce copies in this block virtualvoid coalesce( Block *b );
// Where I fail to coalesce, manifest virtual copies as the Real Thing void insert_copies( Matcher &matcher );
// Copy insertion needs some smarts in case live ranges overlap void insert_copy_with_overlap( Block *b, Node *copy, uint dst_name, uint src_name );
};
//------------------------------PhaseConservativeCoalesce---------------------- // Conservatively, pessimistic coalesce copies. Conservative means do not // coalesce if the resultant live range will be uncolorable. Pessimistic // means we cannot coalesce if 2 live ranges interfere. This implies we do // not hit a fixed point right away. class PhaseConservativeCoalesce : public PhaseCoalesce {
IndexSet _ulr; // Union live range interferences public: // Coalesce copies
PhaseConservativeCoalesce( PhaseChaitin &chaitin );
virtualvoid verify();
// Conservatively coalesce copies in this block virtualvoid coalesce( Block *b );
// Coalesce this chain of copies away bool copy_copy( Node *dst_copy, Node *src_copy, Block *b, uint bindex );
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.