OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.dg/] [vect/] [vect-strided-u16-i3.c] - Blame information for rev 689

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 689 jeremybenn
#include <stdarg.h>
2
#include "tree-vect.h"
3
 
4
#define N 128
5
 
6
typedef struct {
7
   unsigned short a;
8
   unsigned short b;
9
   unsigned short c;
10
} s;
11
 
12
#define A(I) (I)
13
#define B(I) ((I) * 2)
14
#define C(I) ((unsigned short) ~((I) ^ 0x18))
15
 
16
void __attribute__ ((noinline))
17
check1 (s *res)
18
{
19
  int i;
20
 
21
  for (i = 0; i < N; i++)
22
    if (res[i].a != C (i)
23
        || res[i].b != A (i)
24
        || res[i].c != B (i))
25
      abort ();
26
}
27
 
28
void __attribute__ ((noinline))
29
check2 (unsigned short *res)
30
{
31
  int i;
32
 
33
  for (i = 0; i < N; i++)
34
    if (res[i] != (unsigned short) (A (i) + B (i) + C (i)))
35
      abort ();
36
}
37
 
38
void __attribute__ ((noinline))
39
check3 (s *res)
40
{
41
  int i;
42
 
43
  for (i = 0; i < N; i++)
44
    if (res[i].a != i
45
        || res[i].b != i
46
        || res[i].c != i)
47
      abort ();
48
}
49
 
50
void __attribute__ ((noinline))
51
check4 (unsigned short *res)
52
{
53
  int i;
54
 
55
  for (i = 0; i < N; i++)
56
    if (res[i] != (unsigned short) (A (i) + B (i)))
57
      abort ();
58
}
59
 
60
void __attribute__ ((noinline))
61
main1 (s *arr)
62
{
63
  int i;
64
  s *ptr = arr;
65
  s res1[N];
66
  unsigned short res2[N];
67
 
68
  for (i = 0; i < N; i++)
69
    {
70
      res1[i].a = arr[i].c;
71
      res1[i].b = arr[i].a;
72
      res1[i].c = arr[i].b;
73
    }
74
  check1 (res1);
75
 
76
  for (i = 0; i < N; i++)
77
    res2[i] = arr[i].a + arr[i].b + arr[i].c;
78
  check2 (res2);
79
 
80
  for (i = 0; i < N; i++)
81
    {
82
      res1[i].a = i;
83
      res1[i].b = i;
84
      res1[i].c = i;
85
    }
86
  check3 (res1);
87
 
88
  for (i = 0; i < N; i++)
89
    res2[i] = arr[i].a + arr[i].b;
90
  check4 (res2);
91
}
92
 
93
int main (void)
94
{
95
  int i;
96
  s arr[N];
97
 
98
  check_vect ();
99
 
100
  for (i = 0; i < N; i++)
101
    {
102
      arr[i].a = A (i);
103
      arr[i].b = B (i);
104
      arr[i].c = C (i);
105
    }
106
  main1 (arr);
107
 
108
  return 0;
109
}
110
 
111
/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect"  { target vect_strided3 } } } */
112
/* { dg-final { cleanup-tree-dump "vect" } } */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.