| /* { dg-do run } */ |
| /* { dg-require-effective-target vect_double } */ |
| |
| #include "tree-vect.h" |
| |
| double a[2], b[2], c[2]; |
| |
| void __attribute__((noipa)) foo () |
| { |
| double tem0 = a[1] + b[1]; |
| double tem1 = a[0] - b[0]; |
| c[0] = 2. * tem0; |
| c[1] = 5. * tem1; |
| } |
| |
| int main() |
| { |
| check_vect (); |
| |
| a[0] = 1.; a[1] = 3.; |
| b[0] = -5.; b[1] = 13.; |
| foo (); |
| if (c[0] != 32. || c[1] != 30.) |
| __builtin_abort (); |
| return 0; |
| } |
| |
| /* We'd like to see at most one VEC_PERM_EXPR, not one for a blend |
| and one for a permute materialized somewhere else. But addsub |
| pattern recog can likely get in the way here. */ |
| /* { dg-final { scan-tree-dump-times " \[^ \]\+ = VEC_PERM_EXPR" 1 "slp2" } } */ |