RE: [PATCH]middle-end: add additional runtime test for [PR113467]
On Mon, 5 Feb 2024, Tamar Christina wrote: > > > Ok for master? > > > > I think you need a lp64 target check for the large constants or > > alternatively use uint64_t? > > > > Ok, how about this one. > > Regtested on x86_64-pc-linux-gnu with -m32,-m64 and no issues. > > Ok for master? OK > Thanks, > Tamar > > gcc/testsuite/ChangeLog: > > PR tree-optimization/113467 > * gcc.dg/vect/vect-early-break_110-pr113467.c: New test. > > --- inline copy of patch --- > > diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c > b/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c > new file mode 100644 > index > ..1e2c47be5fdf1e1fed88e4b5f45d7eda6c3b85d1 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c > @@ -0,0 +1,52 @@ > +/* { dg-add-options vect_early_break } */ > +/* { dg-require-effective-target vect_early_break } */ > +/* { dg-require-effective-target vect_long_long } */ > + > +/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" } } */ > + > +#include "tree-vect.h" > +#include > + > +typedef struct gcry_mpi *gcry_mpi_t; > +struct gcry_mpi { > + int nlimbs; > + unsigned long *d; > +}; > + > +long gcry_mpi_add_ui_up; > +void gcry_mpi_add_ui(gcry_mpi_t w, gcry_mpi_t u, unsigned v) { > + gcry_mpi_add_ui_up = *w->d; > + if (u) { > +uint64_t *res_ptr = w->d, *s1_ptr = w->d; > +int s1_size = u->nlimbs; > +unsigned s2_limb = v, x = *s1_ptr++; > +s2_limb += x; > +*res_ptr++ = s2_limb; > +if (x) > + while (--s1_size) { > +x = *s1_ptr++ + 1; > +*res_ptr++ = x; > +if (x) { > + break; > +} > + } > + } > +} > + > +int main() > +{ > + check_vect (); > + > + static struct gcry_mpi sv; > + static uint64_t vals[] = {4294967288ULL, 191ULL,4160749568ULL, > 4294963263ULL, > +127ULL,4294950912ULL, 255ULL, > 4294901760ULL, > +534781951ULL, 33546240ULL, 4294967292ULL, > 4294960127ULL, > +4292872191ULL, 4294967295ULL, 4294443007ULL, > 3ULL}; > + gcry_mpi_t v = &sv; > + v->nlimbs = 16; > + v->d = vals; > + > + gcry_mpi_add_ui(v, v, 8); > + if (v->d[1] != 192) > +__builtin_abort(); > +} > -- Richard Biener SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)
RE: [PATCH]middle-end: add additional runtime test for [PR113467]
> > Ok for master? > > I think you need a lp64 target check for the large constants or > alternatively use uint64_t? > Ok, how about this one. Regtested on x86_64-pc-linux-gnu with -m32,-m64 and no issues. Ok for master? Thanks, Tamar gcc/testsuite/ChangeLog: PR tree-optimization/113467 * gcc.dg/vect/vect-early-break_110-pr113467.c: New test. --- inline copy of patch --- diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c new file mode 100644 index ..1e2c47be5fdf1e1fed88e4b5f45d7eda6c3b85d1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c @@ -0,0 +1,52 @@ +/* { dg-add-options vect_early_break } */ +/* { dg-require-effective-target vect_early_break } */ +/* { dg-require-effective-target vect_long_long } */ + +/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" } } */ + +#include "tree-vect.h" +#include + +typedef struct gcry_mpi *gcry_mpi_t; +struct gcry_mpi { + int nlimbs; + unsigned long *d; +}; + +long gcry_mpi_add_ui_up; +void gcry_mpi_add_ui(gcry_mpi_t w, gcry_mpi_t u, unsigned v) { + gcry_mpi_add_ui_up = *w->d; + if (u) { +uint64_t *res_ptr = w->d, *s1_ptr = w->d; +int s1_size = u->nlimbs; +unsigned s2_limb = v, x = *s1_ptr++; +s2_limb += x; +*res_ptr++ = s2_limb; +if (x) + while (--s1_size) { +x = *s1_ptr++ + 1; +*res_ptr++ = x; +if (x) { + break; +} + } + } +} + +int main() +{ + check_vect (); + + static struct gcry_mpi sv; + static uint64_t vals[] = {4294967288ULL, 191ULL,4160749568ULL, 4294963263ULL, +127ULL,4294950912ULL, 255ULL, 4294901760ULL, +534781951ULL, 33546240ULL, 4294967292ULL, 4294960127ULL, +4292872191ULL, 4294967295ULL, 4294443007ULL, 3ULL}; + gcry_mpi_t v = &sv; + v->nlimbs = 16; + v->d = vals; + + gcry_mpi_add_ui(v, v, 8); + if (v->d[1] != 192) +__builtin_abort(); +} rb18246.patch Description: rb18246.patch
Re: [PATCH]middle-end: add additional runtime test for [PR113467]
On Mon, 5 Feb 2024, Tamar Christina wrote: > Hi All, > > This just adds an additional runtime testcase for the fixed issue. > > Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. > > Ok for master? I think you need a lp64 target check for the large constants or alternatively use uint64_t? > Thanks, > Tamar > > gcc/testsuite/ChangeLog: > > PR tree-optimization/113467 > * gcc.dg/vect/vect-early-break_110-pr113467.c: New test. > > --- inline copy of patch -- > diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c > b/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c > new file mode 100644 > index > ..2d8a071c0e922ccfd5fa8c7b2704852dbd95 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c > @@ -0,0 +1,51 @@ > +/* { dg-add-options vect_early_break } */ > +/* { dg-require-effective-target vect_early_break } */ > +/* { dg-require-effective-target vect_int } */ > + > +/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" } } */ > + > +#include "tree-vect.h" > + > +typedef struct gcry_mpi *gcry_mpi_t; > +struct gcry_mpi { > + int nlimbs; > + unsigned long *d; > +}; > + > +long gcry_mpi_add_ui_up; > +void gcry_mpi_add_ui(gcry_mpi_t w, gcry_mpi_t u, unsigned v) { > + gcry_mpi_add_ui_up = *w->d; > + if (u) { > +unsigned long *res_ptr = w->d, *s1_ptr = w->d; > +int s1_size = u->nlimbs; > +unsigned s2_limb = v, x = *s1_ptr++; > +s2_limb += x; > +*res_ptr++ = s2_limb; > +if (x) > + while (--s1_size) { > +x = *s1_ptr++ + 1; > +*res_ptr++ = x; > +if (x) { > + break; > +} > + } > + } > +} > + > +int main() > +{ > + check_vect (); > + > + static struct gcry_mpi sv; > + static unsigned long vals[] = {4294967288, 191,4160749568, > 4294963263, > + 127,4294950912, 255, > 4294901760, > + 534781951, 33546240, 4294967292, > 4294960127, > + 4292872191, 4294967295, 4294443007, 3}; > + gcry_mpi_t v = &sv; > + v->nlimbs = 16; > + v->d = vals; > + > + gcry_mpi_add_ui(v, v, 8); > + if (v->d[1] != 192) > +__builtin_abort(); > +} > > > > > -- Richard Biener SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)
[PATCH]middle-end: add additional runtime test for [PR113467]
Hi All, This just adds an additional runtime testcase for the fixed issue. Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/testsuite/ChangeLog: PR tree-optimization/113467 * gcc.dg/vect/vect-early-break_110-pr113467.c: New test. --- inline copy of patch -- diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c new file mode 100644 index ..2d8a071c0e922ccfd5fa8c7b2704852dbd95 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c @@ -0,0 +1,51 @@ +/* { dg-add-options vect_early_break } */ +/* { dg-require-effective-target vect_early_break } */ +/* { dg-require-effective-target vect_int } */ + +/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" } } */ + +#include "tree-vect.h" + +typedef struct gcry_mpi *gcry_mpi_t; +struct gcry_mpi { + int nlimbs; + unsigned long *d; +}; + +long gcry_mpi_add_ui_up; +void gcry_mpi_add_ui(gcry_mpi_t w, gcry_mpi_t u, unsigned v) { + gcry_mpi_add_ui_up = *w->d; + if (u) { +unsigned long *res_ptr = w->d, *s1_ptr = w->d; +int s1_size = u->nlimbs; +unsigned s2_limb = v, x = *s1_ptr++; +s2_limb += x; +*res_ptr++ = s2_limb; +if (x) + while (--s1_size) { +x = *s1_ptr++ + 1; +*res_ptr++ = x; +if (x) { + break; +} + } + } +} + +int main() +{ + check_vect (); + + static struct gcry_mpi sv; + static unsigned long vals[] = {4294967288, 191,4160749568, 4294963263, + 127,4294950912, 255, 4294901760, + 534781951, 33546240, 4294967292, 4294960127, + 4292872191, 4294967295, 4294443007, 3}; + gcry_mpi_t v = &sv; + v->nlimbs = 16; + v->d = vals; + + gcry_mpi_add_ui(v, v, 8); + if (v->d[1] != 192) +__builtin_abort(); +} -- diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c new file mode 100644 index ..2d8a071c0e922ccfd5fa8c7b2704852dbd95 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_110-pr113467.c @@ -0,0 +1,51 @@ +/* { dg-add-options vect_early_break } */ +/* { dg-require-effective-target vect_early_break } */ +/* { dg-require-effective-target vect_int } */ + +/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" } } */ + +#include "tree-vect.h" + +typedef struct gcry_mpi *gcry_mpi_t; +struct gcry_mpi { + int nlimbs; + unsigned long *d; +}; + +long gcry_mpi_add_ui_up; +void gcry_mpi_add_ui(gcry_mpi_t w, gcry_mpi_t u, unsigned v) { + gcry_mpi_add_ui_up = *w->d; + if (u) { +unsigned long *res_ptr = w->d, *s1_ptr = w->d; +int s1_size = u->nlimbs; +unsigned s2_limb = v, x = *s1_ptr++; +s2_limb += x; +*res_ptr++ = s2_limb; +if (x) + while (--s1_size) { +x = *s1_ptr++ + 1; +*res_ptr++ = x; +if (x) { + break; +} + } + } +} + +int main() +{ + check_vect (); + + static struct gcry_mpi sv; + static unsigned long vals[] = {4294967288, 191,4160749568, 4294963263, + 127,4294950912, 255, 4294901760, + 534781951, 33546240, 4294967292, 4294960127, + 4292872191, 4294967295, 4294443007, 3}; + gcry_mpi_t v = &sv; + v->nlimbs = 16; + v->d = vals; + + gcry_mpi_add_ui(v, v, 8); + if (v->d[1] != 192) +__builtin_abort(); +}