https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103565
--- Comment #4 from cqwrteur <unlvsur at live dot com> --- (In reply to Andrew Pinski from comment #3) > The tree level looks good: > _6 = (long long unsigned int) carry_1(D); > _13 = .ADD_OVERFLOW (a_3(D), _6); > temp_7 = REALPART_EXPR <_13>; > _14 = IMAGPART_EXPR <_13>; > _15 = .ADD_OVERFLOW (b_4(D), temp_7); > _8 = REALPART_EXPR <_15>; > _16 = IMAGPART_EXPR <_15>; > *out_5(D) = _8; > _9 = _16 != 0; > _10 = _14 != 0; > _11 = _9 | _10; so is that possible to understand the pattern of addcarry in C or C++ for GCC? clang does that by adding new builtins but Jakub said pattern matching is better since the compiler can optimize it later. I think it is totally possible for using pattern matching instead of built-in.