https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94174
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Richard Henderson from comment #2)
> Case 3:
>
> void test3(__int128 a, unsigned long l)
> {
> if ((__int128_t)a - l <= 1)
> doit();
> }
>
> Note that clang attempts a branchless double-word comparison
>
> subs x8, x0, x2
> sbcs x9, x1, xzr
> cmp x8, #1
> cset w8, hi
> cmp x9, #0
> cset w9, gt
> csel w8, w8, w9, eq
> tbnz w8, #0, .LBB0_2
LLVM now produces:
subs x8, x0, x2
mov w9, #1
sbc x10, x1, xzr
cmp x9, x8
ngcs xzr, x10
b.lt .LBB0_2
b doit