Conflict edges between two pseudo-registers.
(Meaning: these two pseudo-registers must not be assigned the same
location.)

Conflict edges between a pseudo-register and a machine register
(Meaning: this pseudo-register must not be assigned this machine
register.)

Preference edges between two pseudo-registers.
(Meaning: the generated code would be more efficient if those two
pseudo-registers were assigned the same location, but if this is not
possible, the generated code will still be correct.)

Preference edges between a pseudo-register and a machine register
(Meaning: the generated code would be more efficient if this
pseudo-register was assigned this machine register, but if this is not
possible, the generated code will still be correct.)

A graph is represented by four finite sets of edges (one of each kind
above). An edge is represented by a pair of two pseudo-registers or
a pair (pseudo-register, machine register).
In the case of two pseudo-registers (r1, r2), we adopt the convention
that r1 <= r2, so as to reflect the undirected nature of the edge.