https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63504
--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
For 2) a short testcase is:
__uint128_t
foo (void)
{
__uint128_t a = -1;
__uint128_t b = a - 0x80000000ULL;
return a / b;
}
(even on x86_64 native).