1/* { dg-require-effective-target vect_int } */ 2/* { dg-require-effective-target vect_intfloat_cvt } */ 3 4#include <stdarg.h> 5#include <stdio.h> 6#include "tree-vect.h" 7 8#define N 8 9 10int 11main1 () 12{ 13 int i; 14 unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7; 15 unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; 16 float out2[N*8]; 17 18 for (i = 0; i < N; i++) 19 { 20 21 a0 = in[i*8] + 5; 22 a1 = in[i*8 + 1] + 6; 23 a2 = in[i*8 + 2] + 7; 24 a3 = in[i*8 + 3] + 8; 25 a4 = in[i*8 + 4] + 9; 26 a5 = in[i*8 + 5] + 10; 27 a6 = in[i*8 + 6] + 11; 28 a7 = in[i*8 + 7] + 12; 29 30 b0 = a0 * 3; 31 b1 = a1 * 2; 32 b2 = a2 * 12; 33 b3 = a3 * 5; 34 b4 = a4 * 8; 35 b5 = a5 * 4; 36 b6 = a6 * 3; 37 b7 = a7 * 2; 38 39 out[i*8] = b0 - 2; 40 out[i*8 + 1] = b1 - 3; 41 out[i*8 + 2] = b2 - 2; 42 out[i*8 + 3] = b3 - 1; 43 out[i*8 + 4] = b4 - 8; 44 out[i*8 + 5] = b5 - 7; 45 out[i*8 + 6] = b6 - 3; 46 out[i*8 + 7] = b7 - 7; 47 48 49 out2[i*8] = (float) b0; 50 out2[i*8 + 1] = (float) b1; 51 out2[i*8 + 2] = (float) b2; 52 out2[i*8 + 3] = (float) b3; 53 out2[i*8 + 4] = (float) b4; 54 out2[i*8 + 5] = (float) b5; 55 out2[i*8 + 6] = (float) b6; 56 out2[i*8 + 7] = (float) b7; 57 } 58 59 /* check results: */ 60 for (i = 0; i < N; i++) 61 { 62 if (out[i*8] != (in[i*8] + 5) * 3 - 2 63 || out[i*8 + 1] != (in[i*8 + 1] + 6) * 2 - 3 64 || out[i*8 + 2] != (in[i*8 + 2] + 7) * 12 - 2 65 || out[i*8 + 3] != (in[i*8 + 3] + 8) * 5 - 1 66 || out[i*8 + 4] != (in[i*8 + 4] + 9) * 8 - 8 67 || out[i*8 + 5] != (in[i*8 + 5] + 10) * 4 - 7 68 || out[i*8 + 6] != (in[i*8 + 6] + 11) * 3 - 3 69 || out[i*8 + 7] != (in[i*8 + 7] + 12) * 2 - 7) 70 abort (); 71 72 if (out2[i*8] != (float) ((in[i*8] + 5) * 3) 73 || out2[i*8 + 1] != (float) ((in[i*8 + 1] + 6) * 2) 74 || out2[i*8 + 2] != (float) ((in[i*8 + 2] + 7) * 12) 75 || out2[i*8 + 3] != (float) ((in[i*8 + 3] + 8) * 5) 76 || out2[i*8 + 4] != (float) ((in[i*8 + 4] + 9) * 8) 77 || out2[i*8 + 5] != (float) ((in[i*8 + 5] + 10) * 4) 78 || out2[i*8 + 6] != (float) ((in[i*8 + 6] + 11) * 3) 79 || out2[i*8 + 7] != (float) ((in[i*8 + 7] + 12) * 2)) 80 abort (); 81 } 82 83 return 0; 84} 85 86int main (void) 87{ 88 check_vect (); 89 90 main1 (); 91 92 return 0; 93} 94 95/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_strided } } } } */ 96/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target { vect_strided } } } } */ 97/* { dg-final { cleanup-tree-dump "vect" } } */ 98 99