On Tue, Jun 13, 2023 at 9:06 AM Jakub Jelinek <ja...@redhat.com> wrote: > > 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.
I briefly went over the x86 part (LGTM), but please get a middle-end approval first. Thanks, Uros. > > Thanks. > > Jakub >