This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Rewrite some jump.c routines to use flags
> 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