let compare o1 o2 = match o1, o2 with
| Misalign_read s1, Misalign_read s2
| Leaf s1, Leaf s2
| Merge s1, Merge s2
| Arith s1, Arith s2 ->
LocationSetLattice.compare s1 s2
| Well, Well | Unknown, Unknown -> 0
| Misalign_read _, (Leaf _ | Merge _ | Arith _ | Well | Unknown)
| Leaf _, (Merge _ | Arith _ | Well | Unknown)
| Merge _, (Arith _ | Well | Unknown)
| Arith _, (Well | Unknown)
| Well, Unknown ->
-1
| Unknown, (Well | Arith _ | Merge _ | Leaf _ | Misalign_read _)
| Well, (Arith _ | Merge _ | Leaf _ | Misalign_read _)
| Arith _, (Merge _ | Leaf _ | Misalign_read _)
| Merge _, (Leaf _ | Misalign_read _)
| Leaf _, Misalign_read _
-> 1