https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69442
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Just a random thought, if the expander can figure out that
u64_1 / 0xffff0000ffffffe7ULL
is in the range of [0, 1] and expand the division as
(u64_1 >= 0xffff0000ffffffe7ULL),
why the expansion of
u64_1 % 0xffff0000ffffffe7ULL
still performs the multiplication, i.e.
u64_1 - (u64_1 >= 0xffff0000ffffffe7ULL) * 0xffff0000ffffffe7ULL
? Wouldn't it be usually better to do:
res = u64_1;
if (u64_1 >= 0xffff0000ffffffe7ULL) res -= 0xffff0000ffffffe7ULL;
? Stage1 material of course.