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.