| /* PR tree-optimization/117057 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-optimized" } */ |
| /* { dg-additional-options "-msse" { target { i?86-*-* x86_64-*-* } } } */ |
| /* { dg-final { scan-tree-dump-times "return \[0-9\]*;" 4 "optimized" { target i?86-*-* x86_64-*-* aarch64*-*-* powerpc*-*-* } } } */ |
| |
| #include "strlenopt.h" |
| |
| typedef unsigned int V __attribute__((vector_size (2 * sizeof (int)))); |
| typedef unsigned int W __attribute__((vector_size (4 * sizeof (int)))); |
| |
| size_t |
| foo (void) |
| { |
| char a[64]; |
| *(long long *) a = 0x12003456789abcdeULL; |
| return strlen (a); |
| } |
| |
| size_t |
| bar (void) |
| { |
| char a[64]; |
| *(V *) a = (V) { 0x12345678U, 0x9a00bcdeU }; |
| return strlen (a); |
| } |
| |
| size_t |
| baz (unsigned int x) |
| { |
| char a[64]; |
| *(V *) a = (V) { 0x12005678U, x }; |
| return strlen (a); |
| } |
| |
| size_t |
| qux (unsigned int x) |
| { |
| char a[64]; |
| *(W *)a = (W) { 0x12345678U, 0x9abcdef0U, 0x12005678U, x }; |
| return strlen (a); |
| } |