diff options
| author | hp <hp@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-26 00:09:43 +0000 |
|---|---|---|
| committer | hp <hp@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-26 00:09:43 +0000 |
| commit | 44722d67c66339ffe6a2724b8e31910b9f91cf9e (patch) | |
| tree | 9b16b90d13608c17bdea7f68db5f32011c2872ea /gcc/testsuite/gcc.dg/i386-memset-1.c | |
| parent | 905a1b560408fa5be2f0bd9436109866c235f297 (diff) | |
| download | ppe42-gcc-44722d67c66339ffe6a2724b8e31910b9f91cf9e.tar.gz ppe42-gcc-44722d67c66339ffe6a2724b8e31910b9f91cf9e.zip | |
* gcc.dg/i386-memset-1.c: New test case for PR target/6456.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52771 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gcc.dg/i386-memset-1.c')
| -rw-r--r-- | gcc/testsuite/gcc.dg/i386-memset-1.c | 100 |
1 files changed, 100 insertions, 0 deletions
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 00000000000..f450dd7287e --- /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); +} + |

