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

            Bug ID: 110495
           Summary: fre introduces signed wrap for vector
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kristerw at gcc dot gnu.org
  Target Milestone: ---

The following function (from gcc.dg/tree-ssa/addadd-2.c)

typedef int S __attribute__((vector_size(64)));
void j(S*x){
  *x += __INT_MAX__;
  *x += __INT_MAX__;
}

is optimized by fre1 to 

void j (S * x)
{
  vector(16) int _1;
  vector(16) int _2;
  vector(16) int _4;

  <bb 2> :
  _1 = *x_6(D);
  _2 = _1 + { 2147483647, 2147483647, 2147483647, 2147483647, 2147483647,
2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647,
2147483647, 2147483647, 2147483647, 2147483647, 2147483647 };
  *x_6(D) = _2;
  _4 = _1 + { -2(OVF), -2(OVF), -2(OVF), -2(OVF), -2(OVF), -2(OVF), -2(OVF),
-2(OVF), -2(OVF), -2(OVF), -2(OVF), -2(OVF), -2(OVF), -2(OVF), -2(OVF), -2(OVF)
};
  *x_6(D) = _4;
  return;
}

which has signed wrap for the cases where the original did not wrap.

Reply via email to