diff options
author | Roger Sayle <roger@eyesopen.com> | 2002-04-26 00:09:43 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@gcc.gnu.org> | 2002-04-26 00:09:43 +0000 |
commit | 07d81318b69883d9c0c4eec6c792d41ecdf8e55b (patch) | |
tree | 9b16b90d13608c17bdea7f68db5f32011c2872ea | |
parent | eb7715a4823b5be907c0dcea2d71d5cae7b72c10 (diff) | |
download | gcc-07d81318b69883d9c0c4eec6c792d41ecdf8e55b.zip gcc-07d81318b69883d9c0c4eec6c792d41ecdf8e55b.tar.gz gcc-07d81318b69883d9c0c4eec6c792d41ecdf8e55b.tar.bz2 |
* gcc.dg/i386-memset-1.c: New test case for PR target/6456.
From-SVN: r52771
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/i386-memset-1.c | 100 |
2 files changed, 104 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a8b88ac..2edcdb4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-04-25 Roger Sayle <roger@eyesopen.com> + + * gcc.dg/i386-memset-1.c: New test case for PR target/6456. + 2002-04-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * gcc.c-torture/execute/20020227-1.x: New file, xfail on 64-bit diff --git a/gcc/testsuite/gcc.dg/i386-memset-1.c b/gcc/testsuite/gcc.dg/i386-memset-1.c new file mode 100644 index 0000000..f450dd7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/i386-memset-1.c @@ -0,0 +1,100 @@ +/* Copyright (C) 2002 Free Software Foundation. + + Test -minline-all-stringops memset with various combinations of pointer + alignments and lengths to make sure builtin optimizations are correct. + PR target/6456. + + Written by Michael Meissner, March 9, 2002. + Target by Roger Sayle, April 25, 2002. */ + +/* { dg-do run { target "i?86-*-*" } } */ +/* { dg-options "-O2 -minline-all-stringops" } */ + +#ifndef MAX_OFFSET +#define MAX_OFFSET (sizeof (long long)) +#endif + +#ifndef MAX_COPY +#define MAX_COPY (8 * sizeof (long long)) +#endif + +#ifndef MAX_EXTRA +#define MAX_EXTRA (sizeof (long long)) +#endif + +#define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA) + +static union { + char buf[MAX_LENGTH]; + long long align_int; + long double align_fp; +} u; + +char A = 'A'; + +main () +{ + int off, len, i; + char *p, *q; + + for (off = 0; off < MAX_OFFSET; off++) + for (len = 1; len < MAX_COPY; len++) + { + for (i = 0; i < MAX_LENGTH; i++) + u.buf[i] = 'a'; + + p = memset (u.buf + off, '\0', len); + if (p != u.buf + off) + abort (); + + q = u.buf; + for (i = 0; i < off; i++, q++) + if (*q != 'a') + abort (); + + for (i = 0; i < len; i++, q++) + if (*q != '\0') + abort (); + + for (i = 0; i < MAX_EXTRA; i++, q++) + if (*q != 'a') + abort (); + + p = memset (u.buf + off, A, len); + if (p != u.buf + off) + abort (); + + q = u.buf; + for (i = 0; i < off; i++, q++) + if (*q != 'a') + abort (); + + for (i = 0; i < len; i++, q++) + if (*q != 'A') + abort (); + + for (i = 0; i < MAX_EXTRA; i++, q++) + if (*q != 'a') + abort (); + + p = memset (u.buf + off, 'B', len); + if (p != u.buf + off) + abort (); + + q = u.buf; + for (i = 0; i < off; i++, q++) + if (*q != 'a') + abort (); + + for (i = 0; i < len; i++, q++) + if (*q != 'B') + abort (); + + for (i = 0; i < MAX_EXTRA; i++, q++) + if (*q != 'a') + abort (); + } + + exit(0); +} + |