| /* { dg-do compile } */ |
| /* { dg-options "-O -fdump-tree-optimized" } */ |
| |
| union MY_M128 |
| { |
| double i; |
| }; |
| |
| struct RegFile |
| { |
| MY_M128 dst[4]; |
| }; |
| |
| __inline__ __attribute__((always_inline)) static void |
| MEM_OPT_LOAD(MY_M128* reg, double* mem) |
| { |
| reg[0].i = *mem; |
| } |
| |
| void _ia32_movntdq (double *, double); |
| |
| __inline__ __attribute__((always_inline)) static void |
| MEM_OPT_STORE(MY_M128* reg, double* mem) |
| { |
| _ia32_movntdq ((double*)mem, (double)reg[0].i); |
| } |
| |
| double _mm_adds_epu8 (double __A, double __B); |
| |
| int test(unsigned char *d) |
| { |
| RegFile r; |
| MEM_OPT_LOAD((r.dst) , ((double*) d)); |
| r.dst[0].i = _mm_adds_epu8(r.dst[0].i, r.dst[0].i); |
| MEM_OPT_STORE((r.dst), (double*) d); |
| return 0; |
| } |
| |
| /* { dg-final { scan-tree-dump-not "r.dst" "optimized" } } */ |