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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.dg/] [pr46571.c] - Blame information for rev 750

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 689 jeremybenn
/* { dg-do compile } */
2
/* { dg-options "-O2 -fcompare-debug -w" } */
3
 
4
typedef union tree_node *tree;
5
typedef unsigned int source_location;
6
enum tree_code
7
{
8
  MINUS_EXPR,
9
  MULT_EXPR,
10
};
11
struct tree_omp_clause
12
{
13
  union omp_clause_subcode
14
  {
15
    enum tree_code reduction_code;
16
  } subcode;
17
};
18
union tree_node
19
{
20
  struct tree_omp_clause omp_clause;
21
};
22
enum tree_index
23
{
24
  TI_ERROR_MARK,
25
};
26
typedef struct
27
{
28
  unsigned allocatable:1;
29
  unsigned dimension:1;
30
  unsigned codimension:1;
31
  unsigned external:1;
32
  unsigned optional:1;
33
  unsigned pointer:1;
34
  unsigned contiguous:1;
35
  unsigned referenced:1;
36
} symbol_attribute;
37
typedef unsigned int gfc_char_t;
38
typedef struct gfc_linebuf
39
{
40
  source_location location;
41
} gfc_linebuf;
42
typedef struct
43
{
44
  gfc_char_t *nextc;
45
  gfc_linebuf *lb;
46
} locus;
47
typedef struct
48
{
49
  struct gfc_symbol *sym;
50
  struct gfc_namelist *next;
51
} gfc_namelist;
52
enum
53
{
54
  OMP_LIST_PLUS,
55
  OMP_LIST_REDUCTION_FIRST = OMP_LIST_PLUS,
56
  OMP_LIST_MULT,
57
  OMP_LIST_SUB,
58
  OMP_LIST_NUM
59
};
60
typedef struct gfc_omp_clauses
61
{
62
  gfc_namelist *lists[OMP_LIST_NUM];
63
} gfc_omp_clauses;
64
typedef struct gfc_symbol
65
{
66
  symbol_attribute attr;
67
} gfc_symbol;
68
typedef struct gfc_code
69
{
70
  locus loc;
71
  union
72
  {
73
    gfc_omp_clauses *omp_clauses;
74
  } ext;
75
} gfc_code;
76
typedef struct
77
{
78
} stmtblock_t;
79
 
80
static tree
81
gfc_trans_omp_reduction_list (gfc_namelist * namelist, tree list,
82
                              enum tree_code reduction_code, locus where)
83
{
84
  for (; namelist != ((void *) 0); namelist = namelist->next)
85
    if (namelist->sym->attr.referenced)
86
      {
87
        tree node = build_omp_clause (where.lb->location);
88
        node->omp_clause.subcode.reduction_code = reduction_code;
89
        gfc_trans_omp_array_reduction (namelist->sym, where);
90
      }
91
}
92
 
93
static tree
94
gfc_trans_omp_clauses (stmtblock_t * block, gfc_omp_clauses * clauses,
95
                       locus where)
96
{
97
  tree omp_clauses = (tree) ((void *) 0);
98
  int list;
99
  for (list = 0; list < OMP_LIST_NUM; list++)
100
    {
101
      gfc_namelist *n = clauses->lists[list];
102
      enum tree_code reduction_code;
103
      if (n == ((void *) 0))
104
        continue;
105
      switch (list)
106
        {
107
        case OMP_LIST_MULT:
108
          reduction_code = MULT_EXPR;
109
          break;
110
        case OMP_LIST_SUB:
111
          reduction_code = MINUS_EXPR;
112
        }
113
      gfc_trans_omp_reduction_list (n, omp_clauses, reduction_code, where);
114
    }
115
}
116
 
117
void
118
gfc_trans_omp_parallel_workshare (gfc_code * code)
119
{
120
  stmtblock_t block;
121
  gfc_trans_omp_clauses (&block, code->ext.omp_clauses, code->loc);
122
}

powered by: WebSVN 2.1.0

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