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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.dg/] [tree-ssa/] [pr38385.c] - Blame information for rev 689

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 689 jeremybenn
/* { dg-do compile } */
2
/* { dg-options "-O2 -ftree-loop-distribution" } */
3
 
4
struct rtx_def
5
{
6
  int a;
7
};
8
 
9
typedef struct rtx_def *rtx;
10
 
11
struct rd {
12
  int alternative_enabled_p[100];
13
  rtx operand[100];
14
  int n_operands;
15
};
16
 
17
rtx this_insn;
18
int n_reloads;
19
int n_replacements;
20
int n_earlyclobbers;
21
int replace_reloads;
22
int hard_regs_live_known;
23
short* static_reload_reg_p;
24
struct rd recog_data;
25
 
26
int
27
find_reloads (rtx insn, int replace, int ind_levels, int live_known,
28
              short *reload_reg_p)
29
{
30
  int i, j;
31
  int noperands = replace;
32
 
33
  int no_input_reloads = 0;
34
  int n_alternatives = replace;
35
  char this_alternative_match_win[30];
36
  char this_alternative_win[30];
37
  char this_alternative_earlyclobber[30];
38
  int this_alternative_matches[30];
39
  int goal_alternative[30];
40
  int this_alternative_number;
41
 
42
  char goal_alternative_match_win[30];
43
  char goal_alternative_win[30];
44
  int best;
45
 
46
  int operand_mode[30];
47
  int retval = 0;
48
 
49
  for (this_alternative_number = 0;
50
       this_alternative_number < n_alternatives;
51
       this_alternative_number++)
52
    {
53
 
54
      int losers = 0;
55
      int bad = 0;
56
 
57
      if (!recog_data.alternative_enabled_p[this_alternative_number])
58
        {
59
          int i;
60
 
61
          for (i = 0; i < recog_data.n_operands; i++)
62
            ;
63
 
64
          continue;
65
        }
66
 
67
      for (i = 0; i < noperands; i++)
68
        if (this_alternative_earlyclobber[i]
69
            && (this_alternative_win[i] || this_alternative_match_win[i]))
70
          {
71
            if (j != noperands)
72
              {
73
                losers++;
74
 
75
                for (j = 0; j < noperands; j++)
76
                  if (this_alternative_matches[j] == i
77
                      && this_alternative_match_win[j])
78
                    {
79
                      this_alternative_win[j] = 0;
80
                      this_alternative_match_win[j] = 0;
81
                      losers++;
82
                    }
83
              }
84
          }
85
 
86
      if (losers == 0)
87
        {
88
          for (i = 0; i < noperands; i++)
89
            {
90
              goal_alternative_win[i] = 0;
91
              goal_alternative_match_win[i] = 0;
92
            }
93
 
94
          goto finish;
95
        }
96
 
97
      if (! bad && best > losers)
98
        {
99
          for (i = 0; i < noperands; i++)
100
            {
101
              goal_alternative[i] = 0;
102
              goal_alternative_win[i] = 0;
103
            }
104
        }
105
    }
106
 
107
 
108
 finish:
109
 
110
  for (i = 0; i < noperands; i++)
111
    if (! goal_alternative_win[i])
112
      {
113
        rtx op = recog_data.operand[i];
114
        int mode = operand_mode[i];
115
 
116
        if (((ix86_preferred_reload_class ((op), (goal_alternative[i])) == 2)
117
             || no_input_reloads)
118
            && mode != 0)
119
          {}
120
      }
121
 
122
  return retval;
123
}
124
 

powered by: WebSVN 2.1.0

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