annotate gcc/testsuite/gcc.dg/tree-ssa/pr38385.c @ 131:84e7813d76e9

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