> No, no trivial paths unfortunately. I'd hoped that inlining and > jump threading would give us very similar code, but no such luck. > condition_to_flags is a table lookup, but then flags_to_condition > is a branch tree.
Too bad. Perhaps this would be an interesting optimization exercise. > If that's a concern, I can drop the changes to the existing > functions and just use the new flags for the follow-on patch. IMO the net pessimization is a little hard to swallow, although it probably doesn't matter much in practice. I'd suggest adding the new logic in every case, but keeping the fast path when it's a nop: enum rtx_code swap_condition (enum rtx_code code) { /* Deal with the trivial cases first. */ switch (code) { case EQ: case NE: case UNORDERED: case ORDERED: case UNEQ: case LTGT: return code; default: break; } unsigned int flags = condition_to_flags (code); flags = ((flags & ~(FLAGS_GT | FLAGS_LT)) | (flags & FLAGS_GT ? FLAGS_LT : 0) | (flags & FLAGS_LT ? FLAGS_GT : 0)); return flags_to_condition (flags, true); } OK with this additional change. -- Eric Botcazou