static inline int coalesce_cost_edge (edge e) { int mult = 1; /* Inserting copy on critical edge costs more than inserting it elsewhere. */ if (EDGE_CRITICAL_P (e)) mult = 2; if (e->flags & EDGE_ABNORMAL) return MUST_COALESCE_COST; if (e->flags & EDGE_EH) { edge e2; edge_iterator ei; FOR_EACH_EDGE (e2, ei, e->dest->preds) if (e2 != e) { /* Putting code on EH edge that leads to BB with multiple predecestors imply splitting of edge too. */ if (mult < 2) mult = 2; /* If there are multiple EH predecestors, we also copy EH regions and produce separate landing pad. This is expensive. */ if (e2->flags & EDGE_EH) { mult = 5; break; } } }
static inline int coalesce_cost_edge (edge e) { if (e->flags & EDGE_ABNORMAL) return MUST_COALESCE_COST; return coalesce_cost (EDGE_FREQUENCY (e), maybe_hot_bb_p (e->src), EDGE_CRITICAL_P (e)); }