https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80491

--- Comment #20 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Here is the full testcase:
#include <stdint.h>
struct pair {
  uint64_t low;
  uint64_t hi;
};

pair add(pair& a, pair& b) {
 pair s;
 s.low = a.low + b.low;
 s.hi = ((s.low < a.low)+b.hi )+ a.hi ; //carry
 return s;
}

pair add1(pair& a, pair& b) {
 pair s;
 uint64_t t = __builtin_add_overflow ( a.low, b.low, &s.low);
 s.hi = b.hi + a.hi +t; //carry
 return s;
}
----- CUT -----
At -O1 add gets it correct and has no setc

Reply via email to