Hi! On Tue, Jun 06, 2023 at 11:42:07PM +0200, Jakub Jelinek via Gcc-patches wrote: > The following patch introduces {add,sub}c5_optab and pattern recognizes > various forms of add with carry and subtract with carry/borrow, see > pr79173-{1,2,3,4,5,6}.c tests on what is matched. > Primarily forms with 2 __builtin_add_overflow or __builtin_sub_overflow > calls per limb (with just one for the least significant one), for > add with carry even when it is hand written in C (for subtraction > reassoc seems to change it too much so that the pattern recognition > doesn't work). __builtin_{add,sub}_overflow are standardized in C23 > under ckd_{add,sub} names, so it isn't any longer a GNU only extension. > > Note, clang has for these has (IMHO badly designed) > __builtin_{add,sub}c{b,s,,l,ll} builtins which don't add/subtract just > a single bit of carry, but basically add 3 unsigned values or > subtract 2 unsigned values from one, and result in carry out of 0, 1, or 2 > because of that. If we wanted to introduce those for clang compatibility, > we could and lower them early to just two __builtin_{add,sub}_overflow > calls and let the pattern matching in this patch recognize it later. > > I've added expanders for this on ix86 and in addition to that > added various peephole2s to make sure we get nice (and small) code > for the common cases. I think there are other PRs which request that > e.g. for the _{addcarry,subborrow}_u{32,64} intrinsics, which the patch > also improves.
I'd like to ping this patch. Thanks. Jakub