GCC47: Add local modifications
[dragonfly.git] / contrib / gcc-4.1 / gcc / genrecog.c
1 /* Generate code from machine description to recognize rtl as insns.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4
5    This file is part of GCC.
6
7    GCC is free software; you can redistribute it and/or modify it
8    under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2, or (at your option)
10    any later version.
11
12    GCC is distributed in the hope that it will be useful, but WITHOUT
13    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
15    License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GCC; see the file COPYING.  If not, write to the Free
19    Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20    02110-1301, USA.  */
21
22
23 /* This program is used to produce insn-recog.c, which contains a
24    function called `recog' plus its subroutines.  These functions
25    contain a decision tree that recognizes whether an rtx, the
26    argument given to recog, is a valid instruction.
27
28    recog returns -1 if the rtx is not valid.  If the rtx is valid,
29    recog returns a nonnegative number which is the insn code number
30    for the pattern that matched.  This is the same as the order in the
31    machine description of the entry that matched.  This number can be
32    used as an index into various insn_* tables, such as insn_template,
33    insn_outfun, and insn_n_operands (found in insn-output.c).
34
35    The third argument to recog is an optional pointer to an int.  If
36    present, recog will accept a pattern if it matches except for
37    missing CLOBBER expressions at the end.  In that case, the value
38    pointed to by the optional pointer will be set to the number of
39    CLOBBERs that need to be added (it should be initialized to zero by
40    the caller).  If it is set nonzero, the caller should allocate a
41    PARALLEL of the appropriate size, copy the initial entries, and
42    call add_clobbers (found in insn-emit.c) to fill in the CLOBBERs.
43
44    This program also generates the function `split_insns', which
45    returns 0 if the rtl could not be split, or it returns the split
46    rtl as an INSN list.
47
48    This program also generates the function `peephole2_insns', which
49    returns 0 if the rtl could not be matched.  If there was a match,
50    the new rtl is returned in an INSN list, and LAST_INSN will point
51    to the last recognized insn in the old sequence.  */
52
53 #include "bconfig.h"
54 #include "system.h"
55 #include "coretypes.h"
56 #include "tm.h"
57 #include "rtl.h"
58 #include "errors.h"
59 #include "gensupport.h"
60
61 #define OUTPUT_LABEL(INDENT_STRING, LABEL_NUMBER) \
62   printf("%sL%d: ATTRIBUTE_UNUSED_LABEL\n", (INDENT_STRING), (LABEL_NUMBER))
63
64 /* Holds an array of names indexed by insn_code_number.  */
65 static char **insn_name_ptr = 0;
66 static int insn_name_ptr_size = 0;
67
68 /* A listhead of decision trees.  The alternatives to a node are kept
69    in a doubly-linked list so we can easily add nodes to the proper
70    place when merging.  */
71
72 struct decision_head
73 {
74   struct decision *first;
75   struct decision *last;
76 };
77
78 /* A single test.  The two accept types aren't tests per-se, but
79    their equality (or lack thereof) does affect tree merging so
80    it is convenient to keep them here.  */
81
82 struct decision_test
83 {
84   /* A linked list through the tests attached to a node.  */
85   struct decision_test *next;
86
87   /* These types are roughly in the order in which we'd like to test them.  */
88   enum decision_type
89     {
90       DT_num_insns,
91       DT_mode, DT_code, DT_veclen,
92       DT_elt_zero_int, DT_elt_one_int, DT_elt_zero_wide, DT_elt_zero_wide_safe,
93       DT_const_int,
94       DT_veclen_ge, DT_dup, DT_pred, DT_c_test,
95       DT_accept_op, DT_accept_insn
96     } type;
97
98   union
99   {
100     int num_insns;              /* Number if insn in a define_peephole2.  */
101     enum machine_mode mode;     /* Machine mode of node.  */
102     RTX_CODE code;              /* Code to test.  */
103
104     struct
105     {
106       const char *name;         /* Predicate to call.  */
107       const struct pred_data *data;
108                                 /* Optimization hints for this predicate.  */
109       enum machine_mode mode;   /* Machine mode for node.  */
110     } pred;
111
112     const char *c_test;         /* Additional test to perform.  */
113     int veclen;                 /* Length of vector.  */
114     int dup;                    /* Number of operand to compare against.  */
115     HOST_WIDE_INT intval;       /* Value for XINT for XWINT.  */
116     int opno;                   /* Operand number matched.  */
117
118     struct {
119       int code_number;          /* Insn number matched.  */
120       int lineno;               /* Line number of the insn.  */
121       int num_clobbers_to_add;  /* Number of CLOBBERs to be added.  */
122     } insn;
123   } u;
124 };
125
126 /* Data structure for decision tree for recognizing legitimate insns.  */
127
128 struct decision
129 {
130   struct decision_head success; /* Nodes to test on success.  */
131   struct decision *next;        /* Node to test on failure.  */
132   struct decision *prev;        /* Node whose failure tests us.  */
133   struct decision *afterward;   /* Node to test on success,
134                                    but failure of successor nodes.  */
135
136   const char *position;         /* String denoting position in pattern.  */
137
138   struct decision_test *tests;  /* The tests for this node.  */
139
140   int number;                   /* Node number, used for labels */
141   int subroutine_number;        /* Number of subroutine this node starts */
142   int need_label;               /* Label needs to be output.  */
143 };
144
145 #define SUBROUTINE_THRESHOLD    100
146
147 static int next_subroutine_number;
148
149 /* We can write three types of subroutines: One for insn recognition,
150    one to split insns, and one for peephole-type optimizations.  This
151    defines which type is being written.  */
152
153 enum routine_type {
154   RECOG, SPLIT, PEEPHOLE2
155 };
156
157 #define IS_SPLIT(X) ((X) != RECOG)
158
159 /* Next available node number for tree nodes.  */
160
161 static int next_number;
162
163 /* Next number to use as an insn_code.  */
164
165 static int next_insn_code;
166
167 /* Record the highest depth we ever have so we know how many variables to
168    allocate in each subroutine we make.  */
169
170 static int max_depth;
171
172 /* The line number of the start of the pattern currently being processed.  */
173 static int pattern_lineno;
174
175 /* Count of errors.  */
176 static int error_count;
177 \f
178 /* Predicate handling. 
179
180    We construct from the machine description a table mapping each
181    predicate to a list of the rtl codes it can possibly match.  The
182    function 'maybe_both_true' uses it to deduce that there are no
183    expressions that can be matches by certain pairs of tree nodes.
184    Also, if a predicate can match only one code, we can hardwire that
185    code into the node testing the predicate.
186
187    Some predicates are flagged as special.  validate_pattern will not
188    warn about modeless match_operand expressions if they have a
189    special predicate.  Predicates that allow only constants are also
190    treated as special, for this purpose.
191
192    validate_pattern will warn about predicates that allow non-lvalues
193    when they appear in destination operands.
194
195    Calculating the set of rtx codes that can possibly be accepted by a
196    predicate expression EXP requires a three-state logic: any given
197    subexpression may definitively accept a code C (Y), definitively
198    reject a code C (N), or may have an indeterminate effect (I).  N
199    and I is N; Y or I is Y; Y and I, N or I are both I.  Here are full
200    truth tables.
201
202      a b  a&b  a|b
203      Y Y   Y    Y
204      N Y   N    Y
205      N N   N    N
206      I Y   I    Y
207      I N   N    I
208      I I   I    I
209
210    We represent Y with 1, N with 0, I with 2.  If any code is left in
211    an I state by the complete expression, we must assume that that
212    code can be accepted.  */
213
214 #define N 0
215 #define Y 1
216 #define I 2
217
218 #define TRISTATE_AND(a,b)                       \
219   ((a) == I ? ((b) == N ? N : I) :              \
220    (b) == I ? ((a) == N ? N : I) :              \
221    (a) && (b))
222
223 #define TRISTATE_OR(a,b)                        \
224   ((a) == I ? ((b) == Y ? Y : I) :              \
225    (b) == I ? ((a) == Y ? Y : I) :              \
226    (a) || (b))
227
228 #define TRISTATE_NOT(a)                         \
229   ((a) == I ? I : !(a))
230
231 /* 0 means no warning about that code yet, 1 means warned.  */
232 static char did_you_mean_codes[NUM_RTX_CODE];
233
234 /* Recursively calculate the set of rtx codes accepted by the
235    predicate expression EXP, writing the result to CODES.  */
236 static void
237 compute_predicate_codes (rtx exp, char codes[NUM_RTX_CODE])
238 {
239   char op0_codes[NUM_RTX_CODE];
240   char op1_codes[NUM_RTX_CODE];
241   char op2_codes[NUM_RTX_CODE];
242   int i;
243
244   switch (GET_CODE (exp))
245     {
246     case AND:
247       compute_predicate_codes (XEXP (exp, 0), op0_codes);
248       compute_predicate_codes (XEXP (exp, 1), op1_codes);
249       for (i = 0; i < NUM_RTX_CODE; i++)
250         codes[i] = TRISTATE_AND (op0_codes[i], op1_codes[i]);
251       break;
252
253     case IOR:
254       compute_predicate_codes (XEXP (exp, 0), op0_codes);
255       compute_predicate_codes (XEXP (exp, 1), op1_codes);
256       for (i = 0; i < NUM_RTX_CODE; i++)
257         codes[i] = TRISTATE_OR (op0_codes[i], op1_codes[i]);
258       break;
259     case NOT:
260       compute_predicate_codes (XEXP (exp, 0), op0_codes);
261       for (i = 0; i < NUM_RTX_CODE; i++)
262         codes[i] = TRISTATE_NOT (op0_codes[i]);
263       break;
264
265     case IF_THEN_ELSE:
266       /* a ? b : c  accepts the same codes as (a & b) | (!a & c).  */ 
267       compute_predicate_codes (XEXP (exp, 0), op0_codes);
268       compute_predicate_codes (XEXP (exp, 1), op1_codes);
269       compute_predicate_codes (XEXP (exp, 2), op2_codes);
270       for (i = 0; i < NUM_RTX_CODE; i++)
271         codes[i] = TRISTATE_OR (TRISTATE_AND (op0_codes[i], op1_codes[i]),
272                                 TRISTATE_AND (TRISTATE_NOT (op0_codes[i]),
273                                               op2_codes[i]));
274       break;
275
276     case MATCH_CODE:
277       /* MATCH_CODE allows a specified list of codes.  */
278       memset (codes, N, NUM_RTX_CODE);
279       {
280         const char *next_code = XSTR (exp, 0);
281         const char *code;
282
283         if (*next_code == '\0')
284           {
285             message_with_line (pattern_lineno, "empty match_code expression");
286             error_count++;
287             break;
288           }
289
290         while ((code = scan_comma_elt (&next_code)) != 0)
291           {
292             size_t n = next_code - code;
293             int found_it = 0;
294             
295             for (i = 0; i < NUM_RTX_CODE; i++)
296               if (!strncmp (code, GET_RTX_NAME (i), n)
297                   && GET_RTX_NAME (i)[n] == '\0')
298                 {
299                   codes[i] = Y;
300                   found_it = 1;
301                   break;
302                 }
303             if (!found_it)
304               {
305                 message_with_line (pattern_lineno, "match_code \"%.*s\" matches nothing",
306                                    (int) n, code);
307                 error_count ++;
308                 for (i = 0; i < NUM_RTX_CODE; i++)
309                   if (!strncasecmp (code, GET_RTX_NAME (i), n)
310                       && GET_RTX_NAME (i)[n] == '\0'
311                       && !did_you_mean_codes[i])
312                     {
313                       did_you_mean_codes[i] = 1;
314                       message_with_line (pattern_lineno, "(did you mean \"%s\"?)", GET_RTX_NAME (i));
315                     }
316               }
317
318           }
319       }
320       break;
321
322     case MATCH_OPERAND:
323       /* MATCH_OPERAND disallows the set of codes that the named predicate
324          disallows, and is indeterminate for the codes that it does allow.  */
325       {
326         struct pred_data *p = lookup_predicate (XSTR (exp, 1));
327         if (!p)
328           {
329             message_with_line (pattern_lineno,
330                                "reference to unknown predicate '%s'",
331                                XSTR (exp, 1));
332             error_count++;
333             break;
334           }
335         for (i = 0; i < NUM_RTX_CODE; i++)
336           codes[i] = p->codes[i] ? I : N;
337       }
338       break;
339
340
341     case MATCH_TEST:
342       /* (match_test WHATEVER) is completely indeterminate.  */
343       memset (codes, I, NUM_RTX_CODE);
344       break;
345
346     default:
347       message_with_line (pattern_lineno,
348          "'%s' cannot be used in a define_predicate expression",
349          GET_RTX_NAME (GET_CODE (exp)));
350       error_count++;
351       memset (codes, I, NUM_RTX_CODE);
352       break;
353     }
354 }
355
356 #undef TRISTATE_OR
357 #undef TRISTATE_AND
358 #undef TRISTATE_NOT
359
360 /* Process a define_predicate expression: compute the set of predicates
361    that can be matched, and record this as a known predicate.  */
362 static void
363 process_define_predicate (rtx desc)
364 {
365   struct pred_data *pred = xcalloc (sizeof (struct pred_data), 1);
366   char codes[NUM_RTX_CODE];
367   bool seen_one = false;
368   int i;
369
370   pred->name = XSTR (desc, 0);
371   if (GET_CODE (desc) == DEFINE_SPECIAL_PREDICATE)
372     pred->special = 1;
373
374   compute_predicate_codes (XEXP (desc, 1), codes);
375
376   for (i = 0; i < NUM_RTX_CODE; i++)
377     if (codes[i] != N)
378       {
379         pred->codes[i] = true;
380         if (GET_RTX_CLASS (i) != RTX_CONST_OBJ)
381           pred->allows_non_const = true;
382         if (i != REG
383             && i != SUBREG
384             && i != MEM
385             && i != CONCAT
386             && i != PARALLEL
387             && i != STRICT_LOW_PART)
388           pred->allows_non_lvalue = true;
389
390         if (seen_one)
391           pred->singleton = UNKNOWN;
392         else
393           {
394             pred->singleton = i;
395             seen_one = true;
396           }
397       }
398   add_predicate (pred);
399 }
400 #undef I
401 #undef N
402 #undef Y
403
404 \f
405 static struct decision *new_decision
406   (const char *, struct decision_head *);
407 static struct decision_test *new_decision_test
408   (enum decision_type, struct decision_test ***);
409 static rtx find_operand
410   (rtx, int, rtx);
411 static rtx find_matching_operand
412   (rtx, int);
413 static void validate_pattern
414   (rtx, rtx, rtx, int);
415 static struct decision *add_to_sequence
416   (rtx, struct decision_head *, const char *, enum routine_type, int);
417
418 static int maybe_both_true_2
419   (struct decision_test *, struct decision_test *);
420 static int maybe_both_true_1
421   (struct decision_test *, struct decision_test *);
422 static int maybe_both_true
423   (struct decision *, struct decision *, int);
424
425 static int nodes_identical_1
426   (struct decision_test *, struct decision_test *);
427 static int nodes_identical
428   (struct decision *, struct decision *);
429 static void merge_accept_insn
430   (struct decision *, struct decision *);
431 static void merge_trees
432   (struct decision_head *, struct decision_head *);
433
434 static void factor_tests
435   (struct decision_head *);
436 static void simplify_tests
437   (struct decision_head *);
438 static int break_out_subroutines
439   (struct decision_head *, int);
440 static void find_afterward
441   (struct decision_head *, struct decision *);
442
443 static void change_state
444   (const char *, const char *, const char *);
445 static void print_code
446   (enum rtx_code);
447 static void write_afterward
448   (struct decision *, struct decision *, const char *);
449 static struct decision *write_switch
450   (struct decision *, int);
451 static void write_cond
452   (struct decision_test *, int, enum routine_type);
453 static void write_action
454   (struct decision *, struct decision_test *, int, int,
455    struct decision *, enum routine_type);
456 static int is_unconditional
457   (struct decision_test *, enum routine_type);
458 static int write_node
459   (struct decision *, int, enum routine_type);
460 static void write_tree_1
461   (struct decision_head *, int, enum routine_type);
462 static void write_tree
463   (struct decision_head *, const char *, enum routine_type, int);
464 static void write_subroutine
465   (struct decision_head *, enum routine_type);
466 static void write_subroutines
467   (struct decision_head *, enum routine_type);
468 static void write_header
469   (void);
470
471 static struct decision_head make_insn_sequence
472   (rtx, enum routine_type);
473 static void process_tree
474   (struct decision_head *, enum routine_type);
475
476 static void record_insn_name
477   (int, const char *);
478
479 static void debug_decision_0
480   (struct decision *, int, int);
481 static void debug_decision_1
482   (struct decision *, int);
483 static void debug_decision_2
484   (struct decision_test *);
485 extern void debug_decision
486   (struct decision *);
487 extern void debug_decision_list
488   (struct decision *);
489 \f
490 /* Create a new node in sequence after LAST.  */
491
492 static struct decision *
493 new_decision (const char *position, struct decision_head *last)
494 {
495   struct decision *new = xcalloc (1, sizeof (struct decision));
496
497   new->success = *last;
498   new->position = xstrdup (position);
499   new->number = next_number++;
500
501   last->first = last->last = new;
502   return new;
503 }
504
505 /* Create a new test and link it in at PLACE.  */
506
507 static struct decision_test *
508 new_decision_test (enum decision_type type, struct decision_test ***pplace)
509 {
510   struct decision_test **place = *pplace;
511   struct decision_test *test;
512
513   test = xmalloc (sizeof (*test));
514   test->next = *place;
515   test->type = type;
516   *place = test;
517
518   place = &test->next;
519   *pplace = place;
520
521   return test;
522 }
523
524 /* Search for and return operand N, stop when reaching node STOP.  */
525
526 static rtx
527 find_operand (rtx pattern, int n, rtx stop)
528 {
529   const char *fmt;
530   RTX_CODE code;
531   int i, j, len;
532   rtx r;
533
534   if (pattern == stop)
535     return stop;
536
537   code = GET_CODE (pattern);
538   if ((code == MATCH_SCRATCH
539        || code == MATCH_OPERAND
540        || code == MATCH_OPERATOR
541        || code == MATCH_PARALLEL)
542       && XINT (pattern, 0) == n)
543     return pattern;
544
545   fmt = GET_RTX_FORMAT (code);
546   len = GET_RTX_LENGTH (code);
547   for (i = 0; i < len; i++)
548     {
549       switch (fmt[i])
550         {
551         case 'e': case 'u':
552           if ((r = find_operand (XEXP (pattern, i), n, stop)) != NULL_RTX)
553             return r;
554           break;
555
556         case 'V':
557           if (! XVEC (pattern, i))
558             break;
559           /* Fall through.  */
560
561         case 'E':
562           for (j = 0; j < XVECLEN (pattern, i); j++)
563             if ((r = find_operand (XVECEXP (pattern, i, j), n, stop))
564                 != NULL_RTX)
565               return r;
566           break;
567
568         case 'i': case 'w': case '0': case 's':
569           break;
570
571         default:
572           gcc_unreachable ();
573         }
574     }
575
576   return NULL;
577 }
578
579 /* Search for and return operand M, such that it has a matching
580    constraint for operand N.  */
581
582 static rtx
583 find_matching_operand (rtx pattern, int n)
584 {
585   const char *fmt;
586   RTX_CODE code;
587   int i, j, len;
588   rtx r;
589
590   code = GET_CODE (pattern);
591   if (code == MATCH_OPERAND
592       && (XSTR (pattern, 2)[0] == '0' + n
593           || (XSTR (pattern, 2)[0] == '%'
594               && XSTR (pattern, 2)[1] == '0' + n)))
595     return pattern;
596
597   fmt = GET_RTX_FORMAT (code);
598   len = GET_RTX_LENGTH (code);
599   for (i = 0; i < len; i++)
600     {
601       switch (fmt[i])
602         {
603         case 'e': case 'u':
604           if ((r = find_matching_operand (XEXP (pattern, i), n)))
605             return r;
606           break;
607
608         case 'V':
609           if (! XVEC (pattern, i))
610             break;
611           /* Fall through.  */
612
613         case 'E':
614           for (j = 0; j < XVECLEN (pattern, i); j++)
615             if ((r = find_matching_operand (XVECEXP (pattern, i, j), n)))
616               return r;
617           break;
618
619         case 'i': case 'w': case '0': case 's':
620           break;
621
622         default:
623           gcc_unreachable ();
624         }
625     }
626
627   return NULL;
628 }
629
630
631 /* Check for various errors in patterns.  SET is nonnull for a destination,
632    and is the complete set pattern.  SET_CODE is '=' for normal sets, and
633    '+' within a context that requires in-out constraints.  */
634
635 static void
636 validate_pattern (rtx pattern, rtx insn, rtx set, int set_code)
637 {
638   const char *fmt;
639   RTX_CODE code;
640   size_t i, len;
641   int j;
642
643   code = GET_CODE (pattern);
644   switch (code)
645     {
646     case MATCH_SCRATCH:
647       return;
648     case MATCH_DUP:
649     case MATCH_OP_DUP:
650     case MATCH_PAR_DUP:
651       if (find_operand (insn, XINT (pattern, 0), pattern) == pattern)
652         {
653           message_with_line (pattern_lineno,
654                              "operand %i duplicated before defined",
655                              XINT (pattern, 0));
656           error_count++;
657         }
658       break;
659     case MATCH_OPERAND:
660     case MATCH_OPERATOR:
661       {
662         const char *pred_name = XSTR (pattern, 1);
663         const struct pred_data *pred;
664         const char *c_test;
665
666         if (GET_CODE (insn) == DEFINE_INSN)
667           c_test = XSTR (insn, 2);
668         else
669           c_test = XSTR (insn, 1);
670
671         if (pred_name[0] != 0)
672           {
673             pred = lookup_predicate (pred_name);
674             if (!pred)
675               message_with_line (pattern_lineno,
676                                  "warning: unknown predicate '%s'",
677                                  pred_name);
678           }
679         else
680           pred = 0;
681
682         if (code == MATCH_OPERAND)
683           {
684             const char constraints0 = XSTR (pattern, 2)[0];
685
686             /* In DEFINE_EXPAND, DEFINE_SPLIT, and DEFINE_PEEPHOLE2, we
687                don't use the MATCH_OPERAND constraint, only the predicate.
688                This is confusing to folks doing new ports, so help them
689                not make the mistake.  */
690             if (GET_CODE (insn) == DEFINE_EXPAND
691                 || GET_CODE (insn) == DEFINE_SPLIT
692                 || GET_CODE (insn) == DEFINE_PEEPHOLE2)
693               {
694                 if (constraints0)
695                   message_with_line (pattern_lineno,
696                                      "warning: constraints not supported in %s",
697                                      rtx_name[GET_CODE (insn)]);
698               }
699
700             /* A MATCH_OPERAND that is a SET should have an output reload.  */
701             else if (set && constraints0)
702               {
703                 if (set_code == '+')
704                   {
705                     if (constraints0 == '+')
706                       ;
707                     /* If we've only got an output reload for this operand,
708                        we'd better have a matching input operand.  */
709                     else if (constraints0 == '='
710                              && find_matching_operand (insn, XINT (pattern, 0)))
711                       ;
712                     else
713                       {
714                         message_with_line (pattern_lineno,
715                                            "operand %d missing in-out reload",
716                                            XINT (pattern, 0));
717                         error_count++;
718                       }
719                   }
720                 else if (constraints0 != '=' && constraints0 != '+')
721                   {
722                     message_with_line (pattern_lineno,
723                                        "operand %d missing output reload",
724                                        XINT (pattern, 0));
725                     error_count++;
726                   }
727               }
728           }
729
730         /* Allowing non-lvalues in destinations -- particularly CONST_INT --
731            while not likely to occur at runtime, results in less efficient
732            code from insn-recog.c.  */
733         if (set && pred && pred->allows_non_lvalue)
734           message_with_line (pattern_lineno,
735                              "warning: destination operand %d "
736                              "allows non-lvalue",
737                              XINT (pattern, 0));
738
739         /* A modeless MATCH_OPERAND can be handy when we can check for
740            multiple modes in the c_test.  In most other cases, it is a
741            mistake.  Only DEFINE_INSN is eligible, since SPLIT and
742            PEEP2 can FAIL within the output pattern.  Exclude special
743            predicates, which check the mode themselves.  Also exclude
744            predicates that allow only constants.  Exclude the SET_DEST
745            of a call instruction, as that is a common idiom.  */
746
747         if (GET_MODE (pattern) == VOIDmode
748             && code == MATCH_OPERAND
749             && GET_CODE (insn) == DEFINE_INSN
750             && pred
751             && !pred->special
752             && pred->allows_non_const
753             && strstr (c_test, "operands") == NULL
754             && ! (set
755                   && GET_CODE (set) == SET
756                   && GET_CODE (SET_SRC (set)) == CALL))
757           message_with_line (pattern_lineno,
758                              "warning: operand %d missing mode?",
759                              XINT (pattern, 0));
760         return;
761       }
762
763     case SET:
764       {
765         enum machine_mode dmode, smode;
766         rtx dest, src;
767
768         dest = SET_DEST (pattern);
769         src = SET_SRC (pattern);
770
771         /* STRICT_LOW_PART is a wrapper.  Its argument is the real
772            destination, and it's mode should match the source.  */
773         if (GET_CODE (dest) == STRICT_LOW_PART)
774           dest = XEXP (dest, 0);
775
776         /* Find the referent for a DUP.  */
777
778         if (GET_CODE (dest) == MATCH_DUP
779             || GET_CODE (dest) == MATCH_OP_DUP
780             || GET_CODE (dest) == MATCH_PAR_DUP)
781           dest = find_operand (insn, XINT (dest, 0), NULL);
782
783         if (GET_CODE (src) == MATCH_DUP
784             || GET_CODE (src) == MATCH_OP_DUP
785             || GET_CODE (src) == MATCH_PAR_DUP)
786           src = find_operand (insn, XINT (src, 0), NULL);
787
788         dmode = GET_MODE (dest);
789         smode = GET_MODE (src);
790
791         /* The mode of an ADDRESS_OPERAND is the mode of the memory
792            reference, not the mode of the address.  */
793         if (GET_CODE (src) == MATCH_OPERAND
794             && ! strcmp (XSTR (src, 1), "address_operand"))
795           ;
796
797         /* The operands of a SET must have the same mode unless one
798            is VOIDmode.  */
799         else if (dmode != VOIDmode && smode != VOIDmode && dmode != smode)
800           {
801             message_with_line (pattern_lineno,
802                                "mode mismatch in set: %smode vs %smode",
803                                GET_MODE_NAME (dmode), GET_MODE_NAME (smode));
804             error_count++;
805           }
806
807         /* If only one of the operands is VOIDmode, and PC or CC0 is
808            not involved, it's probably a mistake.  */
809         else if (dmode != smode
810                  && GET_CODE (dest) != PC
811                  && GET_CODE (dest) != CC0
812                  && GET_CODE (src) != PC
813                  && GET_CODE (src) != CC0
814                  && GET_CODE (src) != CONST_INT)
815           {
816             const char *which;
817             which = (dmode == VOIDmode ? "destination" : "source");
818             message_with_line (pattern_lineno,
819                                "warning: %s missing a mode?", which);
820           }
821
822         if (dest != SET_DEST (pattern))
823           validate_pattern (dest, insn, pattern, '=');
824         validate_pattern (SET_DEST (pattern), insn, pattern, '=');
825         validate_pattern (SET_SRC (pattern), insn, NULL_RTX, 0);
826         return;
827       }
828
829     case CLOBBER:
830       validate_pattern (SET_DEST (pattern), insn, pattern, '=');
831       return;
832
833     case ZERO_EXTRACT:
834       validate_pattern (XEXP (pattern, 0), insn, set, set ? '+' : 0);
835       validate_pattern (XEXP (pattern, 1), insn, NULL_RTX, 0);
836       validate_pattern (XEXP (pattern, 2), insn, NULL_RTX, 0);
837       return;
838
839     case STRICT_LOW_PART:
840       validate_pattern (XEXP (pattern, 0), insn, set, set ? '+' : 0);
841       return;
842
843     case LABEL_REF:
844       if (GET_MODE (XEXP (pattern, 0)) != VOIDmode)
845         {
846           message_with_line (pattern_lineno,
847                              "operand to label_ref %smode not VOIDmode",
848                              GET_MODE_NAME (GET_MODE (XEXP (pattern, 0))));
849           error_count++;
850         }
851       break;
852
853     default:
854       break;
855     }
856
857   fmt = GET_RTX_FORMAT (code);
858   len = GET_RTX_LENGTH (code);
859   for (i = 0; i < len; i++)
860     {
861       switch (fmt[i])
862         {
863         case 'e': case 'u':
864           validate_pattern (XEXP (pattern, i), insn, NULL_RTX, 0);
865           break;
866
867         case 'E':
868           for (j = 0; j < XVECLEN (pattern, i); j++)
869             validate_pattern (XVECEXP (pattern, i, j), insn, NULL_RTX, 0);
870           break;
871
872         case 'i': case 'w': case '0': case 's':
873           break;
874
875         default:
876           gcc_unreachable ();
877         }
878     }
879 }
880
881 /* Create a chain of nodes to verify that an rtl expression matches
882    PATTERN.
883
884    LAST is a pointer to the listhead in the previous node in the chain (or
885    in the calling function, for the first node).
886
887    POSITION is the string representing the current position in the insn.
888
889    INSN_TYPE is the type of insn for which we are emitting code.
890
891    A pointer to the final node in the chain is returned.  */
892
893 static struct decision *
894 add_to_sequence (rtx pattern, struct decision_head *last, const char *position,
895                  enum routine_type insn_type, int top)
896 {
897   RTX_CODE code;
898   struct decision *this, *sub;
899   struct decision_test *test;
900   struct decision_test **place;
901   char *subpos;
902   size_t i;
903   const char *fmt;
904   int depth = strlen (position);
905   int len;
906   enum machine_mode mode;
907
908   if (depth > max_depth)
909     max_depth = depth;
910
911   subpos = xmalloc (depth + 2);
912   strcpy (subpos, position);
913   subpos[depth + 1] = 0;
914
915   sub = this = new_decision (position, last);
916   place = &this->tests;
917
918  restart:
919   mode = GET_MODE (pattern);
920   code = GET_CODE (pattern);
921
922   switch (code)
923     {
924     case PARALLEL:
925       /* Toplevel peephole pattern.  */
926       if (insn_type == PEEPHOLE2 && top)
927         {
928           int num_insns;
929
930           /* Check we have sufficient insns.  This avoids complications
931              because we then know peep2_next_insn never fails.  */
932           num_insns = XVECLEN (pattern, 0);
933           if (num_insns > 1)
934             {
935               test = new_decision_test (DT_num_insns, &place);
936               test->u.num_insns = num_insns;
937               last = &sub->success;
938             }
939           else
940             {
941               /* We don't need the node we just created -- unlink it.  */
942               last->first = last->last = NULL;
943             }
944
945           for (i = 0; i < (size_t) XVECLEN (pattern, 0); i++)
946             {
947               /* Which insn we're looking at is represented by A-Z. We don't
948                  ever use 'A', however; it is always implied.  */
949
950               subpos[depth] = (i > 0 ? 'A' + i : 0);
951               sub = add_to_sequence (XVECEXP (pattern, 0, i),
952                                      last, subpos, insn_type, 0);
953               last = &sub->success;
954             }
955           goto ret;
956         }
957
958       /* Else nothing special.  */
959       break;
960
961     case MATCH_PARALLEL:
962       /* The explicit patterns within a match_parallel enforce a minimum
963          length on the vector.  The match_parallel predicate may allow
964          for more elements.  We do need to check for this minimum here
965          or the code generated to match the internals may reference data
966          beyond the end of the vector.  */
967       test = new_decision_test (DT_veclen_ge, &place);
968       test->u.veclen = XVECLEN (pattern, 2);
969       /* Fall through.  */
970
971     case MATCH_OPERAND:
972     case MATCH_SCRATCH:
973     case MATCH_OPERATOR:
974       {
975         RTX_CODE was_code = code;
976         const char *pred_name;
977         bool allows_const_int = true;
978
979         if (code == MATCH_SCRATCH)
980           {
981             pred_name = "scratch_operand";
982             code = UNKNOWN;
983           }
984         else
985           {
986             pred_name = XSTR (pattern, 1);
987             if (code == MATCH_PARALLEL)
988               code = PARALLEL;
989             else
990               code = UNKNOWN;
991           }
992
993         if (pred_name[0] != 0)
994           {
995             const struct pred_data *pred;
996
997             test = new_decision_test (DT_pred, &place);
998             test->u.pred.name = pred_name;
999             test->u.pred.mode = mode;
1000
1001             /* See if we know about this predicate.
1002                If we do, remember it for use below.
1003
1004                We can optimize the generated code a little if either
1005                (a) the predicate only accepts one code, or (b) the
1006                predicate does not allow CONST_INT, in which case it
1007                can match only if the modes match.  */
1008             pred = lookup_predicate (pred_name);
1009             if (pred)
1010               {
1011                 test->u.pred.data = pred;
1012                 allows_const_int = pred->codes[CONST_INT];
1013                 if (was_code == MATCH_PARALLEL
1014                     && pred->singleton != PARALLEL)
1015                   message_with_line (pattern_lineno,
1016                         "predicate '%s' used in match_parallel "
1017                         "does not allow only PARALLEL", pred->name);
1018                 else
1019                   code = pred->singleton;
1020               }
1021             else
1022               message_with_line (pattern_lineno,
1023                         "warning: unknown predicate '%s' in '%s' expression",
1024                         pred_name, GET_RTX_NAME (was_code));
1025           }
1026
1027         /* Can't enforce a mode if we allow const_int.  */
1028         if (allows_const_int)
1029           mode = VOIDmode;
1030
1031         /* Accept the operand, i.e. record it in `operands'.  */
1032         test = new_decision_test (DT_accept_op, &place);
1033         test->u.opno = XINT (pattern, 0);
1034
1035         if (was_code == MATCH_OPERATOR || was_code == MATCH_PARALLEL)
1036           {
1037             char base = (was_code == MATCH_OPERATOR ? '0' : 'a');
1038             for (i = 0; i < (size_t) XVECLEN (pattern, 2); i++)
1039               {
1040                 subpos[depth] = i + base;
1041                 sub = add_to_sequence (XVECEXP (pattern, 2, i),
1042                                        &sub->success, subpos, insn_type, 0);
1043               }
1044           }
1045         goto fini;
1046       }
1047
1048     case MATCH_OP_DUP:
1049       code = UNKNOWN;
1050
1051       test = new_decision_test (DT_dup, &place);
1052       test->u.dup = XINT (pattern, 0);
1053
1054       test = new_decision_test (DT_accept_op, &place);
1055       test->u.opno = XINT (pattern, 0);
1056
1057       for (i = 0; i < (size_t) XVECLEN (pattern, 1); i++)
1058         {
1059           subpos[depth] = i + '0';
1060           sub = add_to_sequence (XVECEXP (pattern, 1, i),
1061                                  &sub->success, subpos, insn_type, 0);
1062         }
1063       goto fini;
1064
1065     case MATCH_DUP:
1066     case MATCH_PAR_DUP:
1067       code = UNKNOWN;
1068
1069       test = new_decision_test (DT_dup, &place);
1070       test->u.dup = XINT (pattern, 0);
1071       goto fini;
1072
1073     case ADDRESS:
1074       pattern = XEXP (pattern, 0);
1075       goto restart;
1076
1077     default:
1078       break;
1079     }
1080
1081   fmt = GET_RTX_FORMAT (code);
1082   len = GET_RTX_LENGTH (code);
1083
1084   /* Do tests against the current node first.  */
1085   for (i = 0; i < (size_t) len; i++)
1086     {
1087       if (fmt[i] == 'i')
1088         {
1089           gcc_assert (i < 2);
1090           
1091           if (!i)
1092             {
1093               test = new_decision_test (DT_elt_zero_int, &place);
1094               test->u.intval = XINT (pattern, i);
1095             }
1096           else
1097             {
1098               test = new_decision_test (DT_elt_one_int, &place);
1099               test->u.intval = XINT (pattern, i);
1100             }
1101         }
1102       else if (fmt[i] == 'w')
1103         {
1104           /* If this value actually fits in an int, we can use a switch
1105              statement here, so indicate that.  */
1106           enum decision_type type
1107             = ((int) XWINT (pattern, i) == XWINT (pattern, i))
1108               ? DT_elt_zero_wide_safe : DT_elt_zero_wide;
1109
1110           gcc_assert (!i);
1111
1112           test = new_decision_test (type, &place);
1113           test->u.intval = XWINT (pattern, i);
1114         }
1115       else if (fmt[i] == 'E')
1116         {
1117           gcc_assert (!i);
1118
1119           test = new_decision_test (DT_veclen, &place);
1120           test->u.veclen = XVECLEN (pattern, i);
1121         }
1122     }
1123
1124   /* Now test our sub-patterns.  */
1125   for (i = 0; i < (size_t) len; i++)
1126     {
1127       switch (fmt[i])
1128         {
1129         case 'e': case 'u':
1130           subpos[depth] = '0' + i;
1131           sub = add_to_sequence (XEXP (pattern, i), &sub->success,
1132                                  subpos, insn_type, 0);
1133           break;
1134
1135         case 'E':
1136           {
1137             int j;
1138             for (j = 0; j < XVECLEN (pattern, i); j++)
1139               {
1140                 subpos[depth] = 'a' + j;
1141                 sub = add_to_sequence (XVECEXP (pattern, i, j),
1142                                        &sub->success, subpos, insn_type, 0);
1143               }
1144             break;
1145           }
1146
1147         case 'i': case 'w':
1148           /* Handled above.  */
1149           break;
1150         case '0':
1151           break;
1152
1153         default:
1154           gcc_unreachable ();
1155         }
1156     }
1157
1158  fini:
1159   /* Insert nodes testing mode and code, if they're still relevant,
1160      before any of the nodes we may have added above.  */
1161   if (code != UNKNOWN)
1162     {
1163       place = &this->tests;
1164       test = new_decision_test (DT_code, &place);
1165       test->u.code = code;
1166     }
1167
1168   if (mode != VOIDmode)
1169     {
1170       place = &this->tests;
1171       test = new_decision_test (DT_mode, &place);
1172       test->u.mode = mode;
1173     }
1174
1175   /* If we didn't insert any tests or accept nodes, hork.  */
1176   gcc_assert (this->tests);
1177
1178  ret:
1179   free (subpos);
1180   return sub;
1181 }
1182 \f
1183 /* A subroutine of maybe_both_true; examines only one test.
1184    Returns > 0 for "definitely both true" and < 0 for "maybe both true".  */
1185
1186 static int
1187 maybe_both_true_2 (struct decision_test *d1, struct decision_test *d2)
1188 {
1189   if (d1->type == d2->type)
1190     {
1191       switch (d1->type)
1192         {
1193         case DT_num_insns:
1194           if (d1->u.num_insns == d2->u.num_insns)
1195             return 1;
1196           else
1197             return -1;
1198
1199         case DT_mode:
1200           return d1->u.mode == d2->u.mode;
1201
1202         case DT_code:
1203           return d1->u.code == d2->u.code;
1204
1205         case DT_veclen:
1206           return d1->u.veclen == d2->u.veclen;
1207
1208         case DT_elt_zero_int:
1209         case DT_elt_one_int:
1210         case DT_elt_zero_wide:
1211         case DT_elt_zero_wide_safe:
1212           return d1->u.intval == d2->u.intval;
1213
1214         default:
1215           break;
1216         }
1217     }
1218
1219   /* If either has a predicate that we know something about, set
1220      things up so that D1 is the one that always has a known
1221      predicate.  Then see if they have any codes in common.  */
1222
1223   if (d1->type == DT_pred || d2->type == DT_pred)
1224     {
1225       if (d2->type == DT_pred)
1226         {
1227           struct decision_test *tmp;
1228           tmp = d1, d1 = d2, d2 = tmp;
1229         }
1230
1231       /* If D2 tests a mode, see if it matches D1.  */
1232       if (d1->u.pred.mode != VOIDmode)
1233         {
1234           if (d2->type == DT_mode)
1235             {
1236               if (d1->u.pred.mode != d2->u.mode
1237                   /* The mode of an address_operand predicate is the
1238                      mode of the memory, not the operand.  It can only
1239                      be used for testing the predicate, so we must
1240                      ignore it here.  */
1241                   && strcmp (d1->u.pred.name, "address_operand") != 0)
1242                 return 0;
1243             }
1244           /* Don't check two predicate modes here, because if both predicates
1245              accept CONST_INT, then both can still be true even if the modes
1246              are different.  If they don't accept CONST_INT, there will be a
1247              separate DT_mode that will make maybe_both_true_1 return 0.  */
1248         }
1249
1250       if (d1->u.pred.data)
1251         {
1252           /* If D2 tests a code, see if it is in the list of valid
1253              codes for D1's predicate.  */
1254           if (d2->type == DT_code)
1255             {
1256               if (!d1->u.pred.data->codes[d2->u.code])
1257                 return 0;
1258             }
1259
1260           /* Otherwise see if the predicates have any codes in common.  */
1261           else if (d2->type == DT_pred && d2->u.pred.data)
1262             {
1263               bool common = false;
1264               enum rtx_code c;
1265
1266               for (c = 0; c < NUM_RTX_CODE; c++)
1267                 if (d1->u.pred.data->codes[c] && d2->u.pred.data->codes[c])
1268                   {
1269                     common = true;
1270                     break;
1271                   }
1272
1273               if (!common)
1274                 return 0;
1275             }
1276         }
1277     }
1278
1279   /* Tests vs veclen may be known when strict equality is involved.  */
1280   if (d1->type == DT_veclen && d2->type == DT_veclen_ge)
1281     return d1->u.veclen >= d2->u.veclen;
1282   if (d1->type == DT_veclen_ge && d2->type == DT_veclen)
1283     return d2->u.veclen >= d1->u.veclen;
1284
1285   return -1;
1286 }
1287
1288 /* A subroutine of maybe_both_true; examines all the tests for a given node.
1289    Returns > 0 for "definitely both true" and < 0 for "maybe both true".  */
1290
1291 static int
1292 maybe_both_true_1 (struct decision_test *d1, struct decision_test *d2)
1293 {
1294   struct decision_test *t1, *t2;
1295
1296   /* A match_operand with no predicate can match anything.  Recognize
1297      this by the existence of a lone DT_accept_op test.  */
1298   if (d1->type == DT_accept_op || d2->type == DT_accept_op)
1299     return 1;
1300
1301   /* Eliminate pairs of tests while they can exactly match.  */
1302   while (d1 && d2 && d1->type == d2->type)
1303     {
1304       if (maybe_both_true_2 (d1, d2) == 0)
1305         return 0;
1306       d1 = d1->next, d2 = d2->next;
1307     }
1308
1309   /* After that, consider all pairs.  */
1310   for (t1 = d1; t1 ; t1 = t1->next)
1311     for (t2 = d2; t2 ; t2 = t2->next)
1312       if (maybe_both_true_2 (t1, t2) == 0)
1313         return 0;
1314
1315   return -1;
1316 }
1317
1318 /* Return 0 if we can prove that there is no RTL that can match both
1319    D1 and D2.  Otherwise, return 1 (it may be that there is an RTL that
1320    can match both or just that we couldn't prove there wasn't such an RTL).
1321
1322    TOPLEVEL is nonzero if we are to only look at the top level and not
1323    recursively descend.  */
1324
1325 static int
1326 maybe_both_true (struct decision *d1, struct decision *d2,
1327                  int toplevel)
1328 {
1329   struct decision *p1, *p2;
1330   int cmp;
1331
1332   /* Don't compare strings on the different positions in insn.  Doing so
1333      is incorrect and results in false matches from constructs like
1334
1335         [(set (subreg:HI (match_operand:SI "register_operand" "r") 0)
1336               (subreg:HI (match_operand:SI "register_operand" "r") 0))]
1337      vs
1338         [(set (match_operand:HI "register_operand" "r")
1339               (match_operand:HI "register_operand" "r"))]
1340
1341      If we are presented with such, we are recursing through the remainder
1342      of a node's success nodes (from the loop at the end of this function).
1343      Skip forward until we come to a position that matches.
1344
1345      Due to the way position strings are constructed, we know that iterating
1346      forward from the lexically lower position (e.g. "00") will run into
1347      the lexically higher position (e.g. "1") and not the other way around.
1348      This saves a bit of effort.  */
1349
1350   cmp = strcmp (d1->position, d2->position);
1351   if (cmp != 0)
1352     {
1353       gcc_assert (!toplevel);
1354
1355       /* If the d2->position was lexically lower, swap.  */
1356       if (cmp > 0)
1357         p1 = d1, d1 = d2, d2 = p1;
1358
1359       if (d1->success.first == 0)
1360         return 1;
1361       for (p1 = d1->success.first; p1; p1 = p1->next)
1362         if (maybe_both_true (p1, d2, 0))
1363           return 1;
1364
1365       return 0;
1366     }
1367
1368   /* Test the current level.  */
1369   cmp = maybe_both_true_1 (d1->tests, d2->tests);
1370   if (cmp >= 0)
1371     return cmp;
1372
1373   /* We can't prove that D1 and D2 cannot both be true.  If we are only
1374      to check the top level, return 1.  Otherwise, see if we can prove
1375      that all choices in both successors are mutually exclusive.  If
1376      either does not have any successors, we can't prove they can't both
1377      be true.  */
1378
1379   if (toplevel || d1->success.first == 0 || d2->success.first == 0)
1380     return 1;
1381
1382   for (p1 = d1->success.first; p1; p1 = p1->next)
1383     for (p2 = d2->success.first; p2; p2 = p2->next)
1384       if (maybe_both_true (p1, p2, 0))
1385         return 1;
1386
1387   return 0;
1388 }
1389
1390 /* A subroutine of nodes_identical.  Examine two tests for equivalence.  */
1391
1392 static int
1393 nodes_identical_1 (struct decision_test *d1, struct decision_test *d2)
1394 {
1395   switch (d1->type)
1396     {
1397     case DT_num_insns:
1398       return d1->u.num_insns == d2->u.num_insns;
1399
1400     case DT_mode:
1401       return d1->u.mode == d2->u.mode;
1402
1403     case DT_code:
1404       return d1->u.code == d2->u.code;
1405
1406     case DT_pred:
1407       return (d1->u.pred.mode == d2->u.pred.mode
1408               && strcmp (d1->u.pred.name, d2->u.pred.name) == 0);
1409
1410     case DT_c_test:
1411       return strcmp (d1->u.c_test, d2->u.c_test) == 0;
1412
1413     case DT_veclen:
1414     case DT_veclen_ge:
1415       return d1->u.veclen == d2->u.veclen;
1416
1417     case DT_dup:
1418       return d1->u.dup == d2->u.dup;
1419
1420     case DT_elt_zero_int:
1421     case DT_elt_one_int:
1422     case DT_elt_zero_wide:
1423     case DT_elt_zero_wide_safe:
1424       return d1->u.intval == d2->u.intval;
1425
1426     case DT_accept_op:
1427       return d1->u.opno == d2->u.opno;
1428
1429     case DT_accept_insn:
1430       /* Differences will be handled in merge_accept_insn.  */
1431       return 1;
1432
1433     default:
1434       gcc_unreachable ();
1435     }
1436 }
1437
1438 /* True iff the two nodes are identical (on one level only).  Due
1439    to the way these lists are constructed, we shouldn't have to
1440    consider different orderings on the tests.  */
1441
1442 static int
1443 nodes_identical (struct decision *d1, struct decision *d2)
1444 {
1445   struct decision_test *t1, *t2;
1446
1447   for (t1 = d1->tests, t2 = d2->tests; t1 && t2; t1 = t1->next, t2 = t2->next)
1448     {
1449       if (t1->type != t2->type)
1450         return 0;
1451       if (! nodes_identical_1 (t1, t2))
1452         return 0;
1453     }
1454
1455   /* For success, they should now both be null.  */
1456   if (t1 != t2)
1457     return 0;
1458
1459   /* Check that their subnodes are at the same position, as any one set
1460      of sibling decisions must be at the same position.  Allowing this
1461      requires complications to find_afterward and when change_state is
1462      invoked.  */
1463   if (d1->success.first
1464       && d2->success.first
1465       && strcmp (d1->success.first->position, d2->success.first->position))
1466     return 0;
1467
1468   return 1;
1469 }
1470
1471 /* A subroutine of merge_trees; given two nodes that have been declared
1472    identical, cope with two insn accept states.  If they differ in the
1473    number of clobbers, then the conflict was created by make_insn_sequence
1474    and we can drop the with-clobbers version on the floor.  If both
1475    nodes have no additional clobbers, we have found an ambiguity in the
1476    source machine description.  */
1477
1478 static void
1479 merge_accept_insn (struct decision *oldd, struct decision *addd)
1480 {
1481   struct decision_test *old, *add;
1482
1483   for (old = oldd->tests; old; old = old->next)
1484     if (old->type == DT_accept_insn)
1485       break;
1486   if (old == NULL)
1487     return;
1488
1489   for (add = addd->tests; add; add = add->next)
1490     if (add->type == DT_accept_insn)
1491       break;
1492   if (add == NULL)
1493     return;
1494
1495   /* If one node is for a normal insn and the second is for the base
1496      insn with clobbers stripped off, the second node should be ignored.  */
1497
1498   if (old->u.insn.num_clobbers_to_add == 0
1499       && add->u.insn.num_clobbers_to_add > 0)
1500     {
1501       /* Nothing to do here.  */
1502     }
1503   else if (old->u.insn.num_clobbers_to_add > 0
1504            && add->u.insn.num_clobbers_to_add == 0)
1505     {
1506       /* In this case, replace OLD with ADD.  */
1507       old->u.insn = add->u.insn;
1508     }
1509   else
1510     {
1511       message_with_line (add->u.insn.lineno, "`%s' matches `%s'",
1512                          get_insn_name (add->u.insn.code_number),
1513                          get_insn_name (old->u.insn.code_number));
1514       message_with_line (old->u.insn.lineno, "previous definition of `%s'",
1515                          get_insn_name (old->u.insn.code_number));
1516       error_count++;
1517     }
1518 }
1519
1520 /* Merge two decision trees OLDH and ADDH, modifying OLDH destructively.  */
1521
1522 static void
1523 merge_trees (struct decision_head *oldh, struct decision_head *addh)
1524 {
1525   struct decision *next, *add;
1526
1527   if (addh->first == 0)
1528     return;
1529   if (oldh->first == 0)
1530     {
1531       *oldh = *addh;
1532       return;
1533     }
1534
1535   /* Trying to merge bits at different positions isn't possible.  */
1536   gcc_assert (!strcmp (oldh->first->position, addh->first->position));
1537
1538   for (add = addh->first; add ; add = next)
1539     {
1540       struct decision *old, *insert_before = NULL;
1541
1542       next = add->next;
1543
1544       /* The semantics of pattern matching state that the tests are
1545          done in the order given in the MD file so that if an insn
1546          matches two patterns, the first one will be used.  However,
1547          in practice, most, if not all, patterns are unambiguous so
1548          that their order is independent.  In that case, we can merge
1549          identical tests and group all similar modes and codes together.
1550
1551          Scan starting from the end of OLDH until we reach a point
1552          where we reach the head of the list or where we pass a
1553          pattern that could also be true if NEW is true.  If we find
1554          an identical pattern, we can merge them.  Also, record the
1555          last node that tests the same code and mode and the last one
1556          that tests just the same mode.
1557
1558          If we have no match, place NEW after the closest match we found.  */
1559
1560       for (old = oldh->last; old; old = old->prev)
1561         {
1562           if (nodes_identical (old, add))
1563             {
1564               merge_accept_insn (old, add);
1565               merge_trees (&old->success, &add->success);
1566               goto merged_nodes;
1567             }
1568
1569           if (maybe_both_true (old, add, 0))
1570             break;
1571
1572           /* Insert the nodes in DT test type order, which is roughly
1573              how expensive/important the test is.  Given that the tests
1574              are also ordered within the list, examining the first is
1575              sufficient.  */
1576           if ((int) add->tests->type < (int) old->tests->type)
1577             insert_before = old;
1578         }
1579
1580       if (insert_before == NULL)
1581         {
1582           add->next = NULL;
1583           add->prev = oldh->last;
1584           oldh->last->next = add;
1585           oldh->last = add;
1586         }
1587       else
1588         {
1589           if ((add->prev = insert_before->prev) != NULL)
1590             add->prev->next = add;
1591           else
1592             oldh->first = add;
1593           add->next = insert_before;
1594           insert_before->prev = add;
1595         }
1596
1597     merged_nodes:;
1598     }
1599 }
1600 \f
1601 /* Walk the tree looking for sub-nodes that perform common tests.
1602    Factor out the common test into a new node.  This enables us
1603    (depending on the test type) to emit switch statements later.  */
1604
1605 static void
1606 factor_tests (struct decision_head *head)
1607 {
1608   struct decision *first, *next;
1609
1610   for (first = head->first; first && first->next; first = next)
1611     {
1612       enum decision_type type;
1613       struct decision *new, *old_last;
1614
1615       type = first->tests->type;
1616       next = first->next;
1617
1618       /* Want at least two compatible sequential nodes.  */
1619       if (next->tests->type != type)
1620         continue;
1621
1622       /* Don't want all node types, just those we can turn into
1623          switch statements.  */
1624       if (type != DT_mode
1625           && type != DT_code
1626           && type != DT_veclen
1627           && type != DT_elt_zero_int
1628           && type != DT_elt_one_int
1629           && type != DT_elt_zero_wide_safe)
1630         continue;
1631
1632       /* If we'd been performing more than one test, create a new node
1633          below our first test.  */
1634       if (first->tests->next != NULL)
1635         {
1636           new = new_decision (first->position, &first->success);
1637           new->tests = first->tests->next;
1638           first->tests->next = NULL;
1639         }
1640
1641       /* Crop the node tree off after our first test.  */
1642       first->next = NULL;
1643       old_last = head->last;
1644       head->last = first;
1645
1646       /* For each compatible test, adjust to perform only one test in
1647          the top level node, then merge the node back into the tree.  */
1648       do
1649         {
1650           struct decision_head h;
1651
1652           if (next->tests->next != NULL)
1653             {
1654               new = new_decision (next->position, &next->success);
1655               new->tests = next->tests->next;
1656               next->tests->next = NULL;
1657             }
1658           new = next;
1659           next = next->next;
1660           new->next = NULL;
1661           h.first = h.last = new;
1662
1663           merge_trees (head, &h);
1664         }
1665       while (next && next->tests->type == type);
1666
1667       /* After we run out of compatible tests, graft the remaining nodes
1668          back onto the tree.  */
1669       if (next)
1670         {
1671           next->prev = head->last;
1672           head->last->next = next;
1673           head->last = old_last;
1674         }
1675     }
1676
1677   /* Recurse.  */
1678   for (first = head->first; first; first = first->next)
1679     factor_tests (&first->success);
1680 }
1681
1682 /* After factoring, try to simplify the tests on any one node.
1683    Tests that are useful for switch statements are recognizable
1684    by having only a single test on a node -- we'll be manipulating
1685    nodes with multiple tests:
1686
1687    If we have mode tests or code tests that are redundant with
1688    predicates, remove them.  */
1689
1690 static void
1691 simplify_tests (struct decision_head *head)
1692 {
1693   struct decision *tree;
1694
1695   for (tree = head->first; tree; tree = tree->next)
1696     {
1697       struct decision_test *a, *b;
1698
1699       a = tree->tests;
1700       b = a->next;
1701       if (b == NULL)
1702         continue;
1703
1704       /* Find a predicate node.  */
1705       while (b && b->type != DT_pred)
1706         b = b->next;
1707       if (b)
1708         {
1709           /* Due to how these tests are constructed, we don't even need
1710              to check that the mode and code are compatible -- they were
1711              generated from the predicate in the first place.  */
1712           while (a->type == DT_mode || a->type == DT_code)
1713             a = a->next;
1714           tree->tests = a;
1715         }
1716     }
1717
1718   /* Recurse.  */
1719   for (tree = head->first; tree; tree = tree->next)
1720     simplify_tests (&tree->success);
1721 }
1722
1723 /* Count the number of subnodes of HEAD.  If the number is high enough,
1724    make the first node in HEAD start a separate subroutine in the C code
1725    that is generated.  */
1726
1727 static int
1728 break_out_subroutines (struct decision_head *head, int initial)
1729 {
1730   int size = 0;
1731   struct decision *sub;
1732
1733   for (sub = head->first; sub; sub = sub->next)
1734     size += 1 + break_out_subroutines (&sub->success, 0);
1735
1736   if (size > SUBROUTINE_THRESHOLD && ! initial)
1737     {
1738       head->first->subroutine_number = ++next_subroutine_number;
1739       size = 1;
1740     }
1741   return size;
1742 }
1743
1744 /* For each node p, find the next alternative that might be true
1745    when p is true.  */
1746
1747 static void
1748 find_afterward (struct decision_head *head, struct decision *real_afterward)
1749 {
1750   struct decision *p, *q, *afterward;
1751
1752   /* We can't propagate alternatives across subroutine boundaries.
1753      This is not incorrect, merely a minor optimization loss.  */
1754
1755   p = head->first;
1756   afterward = (p->subroutine_number > 0 ? NULL : real_afterward);
1757
1758   for ( ; p ; p = p->next)
1759     {
1760       /* Find the next node that might be true if this one fails.  */
1761       for (q = p->next; q ; q = q->next)
1762         if (maybe_both_true (p, q, 1))
1763           break;
1764
1765       /* If we reached the end of the list without finding one,
1766          use the incoming afterward position.  */
1767       if (!q)
1768         q = afterward;
1769       p->afterward = q;
1770       if (q)
1771         q->need_label = 1;
1772     }
1773
1774   /* Recurse.  */
1775   for (p = head->first; p ; p = p->next)
1776     if (p->success.first)
1777       find_afterward (&p->success, p->afterward);
1778
1779   /* When we are generating a subroutine, record the real afterward
1780      position in the first node where write_tree can find it, and we
1781      can do the right thing at the subroutine call site.  */
1782   p = head->first;
1783   if (p->subroutine_number > 0)
1784     p->afterward = real_afterward;
1785 }
1786 \f
1787 /* Assuming that the state of argument is denoted by OLDPOS, take whatever
1788    actions are necessary to move to NEWPOS.  If we fail to move to the
1789    new state, branch to node AFTERWARD if nonzero, otherwise return.
1790
1791    Failure to move to the new state can only occur if we are trying to
1792    match multiple insns and we try to step past the end of the stream.  */
1793
1794 static void
1795 change_state (const char *oldpos, const char *newpos, const char *indent)
1796 {
1797   int odepth = strlen (oldpos);
1798   int ndepth = strlen (newpos);
1799   int depth;
1800   int old_has_insn, new_has_insn;
1801
1802   /* Pop up as many levels as necessary.  */
1803   for (depth = odepth; strncmp (oldpos, newpos, depth) != 0; --depth)
1804     continue;
1805
1806   /* Hunt for the last [A-Z] in both strings.  */
1807   for (old_has_insn = odepth - 1; old_has_insn >= 0; --old_has_insn)
1808     if (ISUPPER (oldpos[old_has_insn]))
1809       break;
1810   for (new_has_insn = ndepth - 1; new_has_insn >= 0; --new_has_insn)
1811     if (ISUPPER (newpos[new_has_insn]))
1812       break;
1813
1814   /* Go down to desired level.  */
1815   while (depth < ndepth)
1816     {
1817       /* It's a different insn from the first one.  */
1818       if (ISUPPER (newpos[depth]))
1819         {
1820           printf ("%stem = peep2_next_insn (%d);\n",
1821                   indent, newpos[depth] - 'A');
1822           printf ("%sx%d = PATTERN (tem);\n", indent, depth + 1);
1823         }
1824       else if (ISLOWER (newpos[depth]))
1825         printf ("%sx%d = XVECEXP (x%d, 0, %d);\n",
1826                 indent, depth + 1, depth, newpos[depth] - 'a');
1827       else
1828         printf ("%sx%d = XEXP (x%d, %c);\n",
1829                 indent, depth + 1, depth, newpos[depth]);
1830       ++depth;
1831     }
1832 }
1833 \f
1834 /* Print the enumerator constant for CODE -- the upcase version of
1835    the name.  */
1836
1837 static void
1838 print_code (enum rtx_code code)
1839 {
1840   const char *p;
1841   for (p = GET_RTX_NAME (code); *p; p++)
1842     putchar (TOUPPER (*p));
1843 }
1844
1845 /* Emit code to cross an afterward link -- change state and branch.  */
1846
1847 static void
1848 write_afterward (struct decision *start, struct decision *afterward,
1849                  const char *indent)
1850 {
1851   if (!afterward || start->subroutine_number > 0)
1852     printf("%sgoto ret0;\n", indent);
1853   else
1854     {
1855       change_state (start->position, afterward->position, indent);
1856       printf ("%sgoto L%d;\n", indent, afterward->number);
1857     }
1858 }
1859
1860 /* Emit a HOST_WIDE_INT as an integer constant expression.  We need to take
1861    special care to avoid "decimal constant is so large that it is unsigned"
1862    warnings in the resulting code.  */
1863
1864 static void
1865 print_host_wide_int (HOST_WIDE_INT val)
1866 {
1867   HOST_WIDE_INT min = (unsigned HOST_WIDE_INT)1 << (HOST_BITS_PER_WIDE_INT-1);
1868   if (val == min)
1869     printf ("(" HOST_WIDE_INT_PRINT_DEC_C "-1)", val + 1);
1870   else
1871     printf (HOST_WIDE_INT_PRINT_DEC_C, val);
1872 }
1873
1874 /* Emit a switch statement, if possible, for an initial sequence of
1875    nodes at START.  Return the first node yet untested.  */
1876
1877 static struct decision *
1878 write_switch (struct decision *start, int depth)
1879 {
1880   struct decision *p = start;
1881   enum decision_type type = p->tests->type;
1882   struct decision *needs_label = NULL;
1883
1884   /* If we have two or more nodes in sequence that test the same one
1885      thing, we may be able to use a switch statement.  */
1886
1887   if (!p->next
1888       || p->tests->next
1889       || p->next->tests->type != type
1890       || p->next->tests->next
1891       || nodes_identical_1 (p->tests, p->next->tests))
1892     return p;
1893
1894   /* DT_code is special in that we can do interesting things with
1895      known predicates at the same time.  */
1896   if (type == DT_code)
1897     {
1898       char codemap[NUM_RTX_CODE];
1899       struct decision *ret;
1900       RTX_CODE code;
1901
1902       memset (codemap, 0, sizeof(codemap));
1903
1904       printf ("  switch (GET_CODE (x%d))\n    {\n", depth);
1905       code = p->tests->u.code;
1906       do
1907         {
1908           if (p != start && p->need_label && needs_label == NULL)
1909             needs_label = p;
1910
1911           printf ("    case ");
1912           print_code (code);
1913           printf (":\n      goto L%d;\n", p->success.first->number);
1914           p->success.first->need_label = 1;
1915
1916           codemap[code] = 1;
1917           p = p->next;
1918         }
1919       while (p
1920              && ! p->tests->next
1921              && p->tests->type == DT_code
1922              && ! codemap[code = p->tests->u.code]);
1923
1924       /* If P is testing a predicate that we know about and we haven't
1925          seen any of the codes that are valid for the predicate, we can
1926          write a series of "case" statement, one for each possible code.
1927          Since we are already in a switch, these redundant tests are very
1928          cheap and will reduce the number of predicates called.  */
1929
1930       /* Note that while we write out cases for these predicates here,
1931          we don't actually write the test here, as it gets kinda messy.
1932          It is trivial to leave this to later by telling our caller that
1933          we only processed the CODE tests.  */
1934       if (needs_label != NULL)
1935         ret = needs_label;
1936       else
1937         ret = p;
1938
1939       while (p && p->tests->type == DT_pred && p->tests->u.pred.data)
1940         {
1941           const struct pred_data *data = p->tests->u.pred.data;
1942           RTX_CODE c;
1943           for (c = 0; c < NUM_RTX_CODE; c++)
1944             if (codemap[c] && data->codes[c])
1945               goto pred_done;
1946
1947           for (c = 0; c < NUM_RTX_CODE; c++)
1948             if (data->codes[c])
1949               {
1950                 fputs ("    case ", stdout);
1951                 print_code (c);
1952                 fputs (":\n", stdout);
1953                 codemap[c] = 1;
1954               }
1955
1956           printf ("      goto L%d;\n", p->number);
1957           p->need_label = 1;
1958           p = p->next;
1959         }
1960
1961     pred_done:
1962       /* Make the default case skip the predicates we managed to match.  */
1963
1964       printf ("    default:\n");
1965       if (p != ret)
1966         {
1967           if (p)
1968             {
1969               printf ("      goto L%d;\n", p->number);
1970               p->need_label = 1;
1971             }
1972           else
1973             write_afterward (start, start->afterward, "      ");
1974         }
1975       else
1976         printf ("     break;\n");
1977       printf ("   }\n");
1978
1979       return ret;
1980     }
1981   else if (type == DT_mode
1982            || type == DT_veclen
1983            || type == DT_elt_zero_int
1984            || type == DT_elt_one_int
1985            || type == DT_elt_zero_wide_safe)
1986     {
1987       const char *indent = "";
1988
1989       /* We cast switch parameter to integer, so we must ensure that the value
1990          fits.  */
1991       if (type == DT_elt_zero_wide_safe)
1992         {
1993           indent = "  ";
1994           printf("  if ((int) XWINT (x%d, 0) == XWINT (x%d, 0))\n", depth, depth);
1995         }
1996       printf ("%s  switch (", indent);
1997       switch (type)
1998         {
1999         case DT_mode:
2000           printf ("GET_MODE (x%d)", depth);
2001           break;
2002         case DT_veclen:
2003           printf ("XVECLEN (x%d, 0)", depth);
2004           break;
2005         case DT_elt_zero_int:
2006           printf ("XINT (x%d, 0)", depth);
2007           break;
2008         case DT_elt_one_int:
2009           printf ("XINT (x%d, 1)", depth);
2010           break;
2011         case DT_elt_zero_wide_safe:
2012           /* Convert result of XWINT to int for portability since some C
2013              compilers won't do it and some will.  */
2014           printf ("(int) XWINT (x%d, 0)", depth);
2015           break;
2016         default:
2017           gcc_unreachable ();
2018         }
2019       printf (")\n%s    {\n", indent);
2020
2021       do
2022         {
2023           /* Merge trees will not unify identical nodes if their
2024              sub-nodes are at different levels.  Thus we must check
2025              for duplicate cases.  */
2026           struct decision *q;
2027           for (q = start; q != p; q = q->next)
2028             if (nodes_identical_1 (p->tests, q->tests))
2029               goto case_done;
2030
2031           if (p != start && p->need_label && needs_label == NULL)
2032             needs_label = p;
2033
2034           printf ("%s    case ", indent);
2035           switch (type)
2036             {
2037             case DT_mode:
2038               printf ("%smode", GET_MODE_NAME (p->tests->u.mode));
2039               break;
2040             case DT_veclen:
2041               printf ("%d", p->tests->u.veclen);
2042               break;
2043             case DT_elt_zero_int:
2044             case DT_elt_one_int:
2045             case DT_elt_zero_wide:
2046             case DT_elt_zero_wide_safe:
2047               print_host_wide_int (p->tests->u.intval);
2048               break;
2049             default:
2050               gcc_unreachable ();
2051             }
2052           printf (":\n%s      goto L%d;\n", indent, p->success.first->number);
2053           p->success.first->need_label = 1;
2054
2055           p = p->next;
2056         }
2057       while (p && p->tests->type == type && !p->tests->next);
2058
2059     case_done:
2060       printf ("%s    default:\n%s      break;\n%s    }\n",
2061               indent, indent, indent);
2062
2063       return needs_label != NULL ? needs_label : p;
2064     }
2065   else
2066     {
2067       /* None of the other tests are amenable.  */
2068       return p;
2069     }
2070 }
2071
2072 /* Emit code for one test.  */
2073
2074 static void
2075 write_cond (struct decision_test *p, int depth,
2076             enum routine_type subroutine_type)
2077 {
2078   switch (p->type)
2079     {
2080     case DT_num_insns:
2081       printf ("peep2_current_count >= %d", p->u.num_insns);
2082       break;
2083
2084     case DT_mode:
2085       printf ("GET_MODE (x%d) == %smode", depth, GET_MODE_NAME (p->u.mode));
2086       break;
2087
2088     case DT_code:
2089       printf ("GET_CODE (x%d) == ", depth);
2090       print_code (p->u.code);
2091       break;
2092
2093     case DT_veclen:
2094       printf ("XVECLEN (x%d, 0) == %d", depth, p->u.veclen);
2095       break;
2096
2097     case DT_elt_zero_int:
2098       printf ("XINT (x%d, 0) == %d", depth, (int) p->u.intval);
2099       break;
2100
2101     case DT_elt_one_int:
2102       printf ("XINT (x%d, 1) == %d", depth, (int) p->u.intval);
2103       break;
2104
2105     case DT_elt_zero_wide:
2106     case DT_elt_zero_wide_safe:
2107       printf ("XWINT (x%d, 0) == ", depth);
2108       print_host_wide_int (p->u.intval);
2109       break;
2110
2111     case DT_const_int:
2112       printf ("x%d == const_int_rtx[MAX_SAVED_CONST_INT + (%d)]",
2113               depth, (int) p->u.intval);
2114       break;
2115
2116     case DT_veclen_ge:
2117       printf ("XVECLEN (x%d, 0) >= %d", depth, p->u.veclen);
2118       break;
2119
2120     case DT_dup:
2121       printf ("rtx_equal_p (x%d, operands[%d])", depth, p->u.dup);
2122       break;
2123
2124     case DT_pred:
2125       printf ("%s (x%d, %smode)", p->u.pred.name, depth,
2126               GET_MODE_NAME (p->u.pred.mode));
2127       break;
2128
2129     case DT_c_test:
2130       print_c_condition (p->u.c_test);
2131       break;
2132
2133     case DT_accept_insn:
2134       gcc_assert (subroutine_type == RECOG);
2135       gcc_assert (p->u.insn.num_clobbers_to_add);
2136       printf ("pnum_clobbers != NULL");
2137       break;
2138
2139     default:
2140       gcc_unreachable ();
2141     }
2142 }
2143
2144 /* Emit code for one action.  The previous tests have succeeded;
2145    TEST is the last of the chain.  In the normal case we simply
2146    perform a state change.  For the `accept' tests we must do more work.  */
2147
2148 static void
2149 write_action (struct decision *p, struct decision_test *test,
2150               int depth, int uncond, struct decision *success,
2151               enum routine_type subroutine_type)
2152 {
2153   const char *indent;
2154   int want_close = 0;
2155
2156   if (uncond)
2157     indent = "  ";
2158   else if (test->type == DT_accept_op || test->type == DT_accept_insn)
2159     {
2160       fputs ("    {\n", stdout);
2161       indent = "      ";
2162       want_close = 1;
2163     }
2164   else
2165     indent = "    ";
2166
2167   if (test->type == DT_accept_op)
2168     {
2169       printf("%soperands[%d] = x%d;\n", indent, test->u.opno, depth);
2170
2171       /* Only allow DT_accept_insn to follow.  */
2172       if (test->next)
2173         {
2174           test = test->next;
2175           gcc_assert (test->type == DT_accept_insn);
2176         }
2177     }
2178
2179   /* Sanity check that we're now at the end of the list of tests.  */
2180   gcc_assert (!test->next);
2181
2182   if (test->type == DT_accept_insn)
2183     {
2184       switch (subroutine_type)
2185         {
2186         case RECOG:
2187           if (test->u.insn.num_clobbers_to_add != 0)
2188             printf ("%s*pnum_clobbers = %d;\n",
2189                     indent, test->u.insn.num_clobbers_to_add);
2190           printf ("%sreturn %d;  /* %s */\n", indent,
2191                   test->u.insn.code_number,
2192                   insn_name_ptr[test->u.insn.code_number]);
2193           break;
2194
2195         case SPLIT:
2196           printf ("%sreturn gen_split_%d (insn, operands);\n",
2197                   indent, test->u.insn.code_number);
2198           break;
2199
2200         case PEEPHOLE2:
2201           {
2202             int match_len = 0, i;
2203
2204             for (i = strlen (p->position) - 1; i >= 0; --i)
2205               if (ISUPPER (p->position[i]))
2206                 {
2207                   match_len = p->position[i] - 'A';
2208                   break;
2209                 }
2210             printf ("%s*_pmatch_len = %d;\n", indent, match_len);
2211             printf ("%stem = gen_peephole2_%d (insn, operands);\n",
2212                     indent, test->u.insn.code_number);
2213             printf ("%sif (tem != 0)\n%s  return tem;\n", indent, indent);
2214           }
2215           break;
2216
2217         default:
2218           gcc_unreachable ();
2219         }
2220     }
2221   else
2222     {
2223       printf("%sgoto L%d;\n", indent, success->number);
2224       success->need_label = 1;
2225     }
2226
2227   if (want_close)
2228     fputs ("    }\n", stdout);
2229 }
2230
2231 /* Return 1 if the test is always true and has no fallthru path.  Return -1
2232    if the test does have a fallthru path, but requires that the condition be
2233    terminated.  Otherwise return 0 for a normal test.  */
2234 /* ??? is_unconditional is a stupid name for a tri-state function.  */
2235
2236 static int
2237 is_unconditional (struct decision_test *t, enum routine_type subroutine_type)
2238 {
2239   if (t->type == DT_accept_op)
2240     return 1;
2241
2242   if (t->type == DT_accept_insn)
2243     {
2244       switch (subroutine_type)
2245         {
2246         case RECOG:
2247           return (t->u.insn.num_clobbers_to_add == 0);
2248         case SPLIT:
2249           return 1;
2250         case PEEPHOLE2:
2251           return -1;
2252         default:
2253           gcc_unreachable ();
2254         }
2255     }
2256
2257   return 0;
2258 }
2259
2260 /* Emit code for one node -- the conditional and the accompanying action.
2261    Return true if there is no fallthru path.  */
2262
2263 static int
2264 write_node (struct decision *p, int depth,
2265             enum routine_type subroutine_type)
2266 {
2267   struct decision_test *test, *last_test;
2268   int uncond;
2269
2270   /* Scan the tests and simplify comparisons against small
2271      constants.  */
2272   for (test = p->tests; test; test = test->next)
2273     {
2274       if (test->type == DT_code
2275           && test->u.code == CONST_INT
2276           && test->next
2277           && test->next->type == DT_elt_zero_wide_safe
2278           && -MAX_SAVED_CONST_INT <= test->next->u.intval
2279           && test->next->u.intval <= MAX_SAVED_CONST_INT)
2280         {
2281           test->type = DT_const_int;
2282           test->u.intval = test->next->u.intval;
2283           test->next = test->next->next;
2284         }
2285     }
2286
2287   last_test = test = p->tests;
2288   uncond = is_unconditional (test, subroutine_type);
2289   if (uncond == 0)
2290     {
2291       printf ("  if (");
2292       write_cond (test, depth, subroutine_type);
2293
2294       while ((test = test->next) != NULL)
2295         {
2296           last_test = test;
2297           if (is_unconditional (test, subroutine_type))
2298             break;
2299
2300           printf ("\n      && ");
2301           write_cond (test, depth, subroutine_type);
2302         }
2303
2304       printf (")\n");
2305     }
2306
2307   write_action (p, last_test, depth, uncond, p->success.first, subroutine_type);
2308
2309   return uncond > 0;
2310 }
2311
2312 /* Emit code for all of the sibling nodes of HEAD.  */
2313
2314 static void
2315 write_tree_1 (struct decision_head *head, int depth,
2316               enum routine_type subroutine_type)
2317 {
2318   struct decision *p, *next;
2319   int uncond = 0;
2320
2321   for (p = head->first; p ; p = next)
2322     {
2323       /* The label for the first element was printed in write_tree.  */
2324       if (p != head->first && p->need_label)
2325         OUTPUT_LABEL (" ", p->number);
2326
2327       /* Attempt to write a switch statement for a whole sequence.  */
2328       next = write_switch (p, depth);
2329       if (p != next)
2330         uncond = 0;
2331       else
2332         {
2333           /* Failed -- fall back and write one node.  */
2334           uncond = write_node (p, depth, subroutine_type);
2335           next = p->next;
2336         }
2337     }
2338
2339   /* Finished with this chain.  Close a fallthru path by branching
2340      to the afterward node.  */
2341   if (! uncond)
2342     write_afterward (head->last, head->last->afterward, "  ");
2343 }
2344
2345 /* Write out the decision tree starting at HEAD.  PREVPOS is the
2346    position at the node that branched to this node.  */
2347
2348 static void
2349 write_tree (struct decision_head *head, const char *prevpos,
2350             enum routine_type type, int initial)
2351 {
2352   struct decision *p = head->first;
2353
2354   putchar ('\n');
2355   if (p->need_label)
2356     OUTPUT_LABEL (" ", p->number);
2357
2358   if (! initial && p->subroutine_number > 0)
2359     {
2360       static const char * const name_prefix[] = {
2361           "recog", "split", "peephole2"
2362       };
2363
2364       static const char * const call_suffix[] = {
2365           ", pnum_clobbers", "", ", _pmatch_len"
2366       };
2367
2368       /* This node has been broken out into a separate subroutine.
2369          Call it, test the result, and branch accordingly.  */
2370
2371       if (p->afterward)
2372         {
2373           printf ("  tem = %s_%d (x0, insn%s);\n",
2374                   name_prefix[type], p->subroutine_number, call_suffix[type]);
2375           if (IS_SPLIT (type))
2376             printf ("  if (tem != 0)\n    return tem;\n");
2377           else
2378             printf ("  if (tem >= 0)\n    return tem;\n");
2379
2380           change_state (p->position, p->afterward->position, "  ");
2381           printf ("  goto L%d;\n", p->afterward->number);
2382         }
2383       else
2384         {
2385           printf ("  return %s_%d (x0, insn%s);\n",
2386                   name_prefix[type], p->subroutine_number, call_suffix[type]);
2387         }
2388     }
2389   else
2390     {
2391       int depth = strlen (p->position);
2392
2393       change_state (prevpos, p->position, "  ");
2394       write_tree_1 (head, depth, type);
2395
2396       for (p = head->first; p; p = p->next)
2397         if (p->success.first)
2398           write_tree (&p->success, p->position, type, 0);
2399     }
2400 }
2401
2402 /* Write out a subroutine of type TYPE to do comparisons starting at
2403    node TREE.  */
2404
2405 static void
2406 write_subroutine (struct decision_head *head, enum routine_type type)
2407 {
2408   int subfunction = head->first ? head->first->subroutine_number : 0;
2409   const char *s_or_e;
2410   char extension[32];
2411   int i;
2412
2413   s_or_e = subfunction ? "static " : "";
2414
2415   if (subfunction)
2416     sprintf (extension, "_%d", subfunction);
2417   else if (type == RECOG)
2418     extension[0] = '\0';
2419   else
2420     strcpy (extension, "_insns");
2421
2422   switch (type)
2423     {
2424     case RECOG:
2425       printf ("%sint\n\
2426 recog%s (rtx x0 ATTRIBUTE_UNUSED,\n\trtx insn ATTRIBUTE_UNUSED,\n\tint *pnum_clobbers ATTRIBUTE_UNUSED)\n", s_or_e, extension);
2427       break;
2428     case SPLIT:
2429       printf ("%srtx\n\
2430 split%s (rtx x0 ATTRIBUTE_UNUSED, rtx insn ATTRIBUTE_UNUSED)\n",
2431               s_or_e, extension);
2432       break;
2433     case PEEPHOLE2:
2434       printf ("%srtx\n\
2435 peephole2%s (rtx x0 ATTRIBUTE_UNUSED,\n\trtx insn ATTRIBUTE_UNUSED,\n\tint *_pmatch_len ATTRIBUTE_UNUSED)\n",
2436               s_or_e, extension);
2437       break;
2438     }
2439
2440   printf ("{\n  rtx * const operands ATTRIBUTE_UNUSED = &recog_data.operand[0];\n");
2441   for (i = 1; i <= max_depth; i++)
2442     printf ("  rtx x%d ATTRIBUTE_UNUSED;\n", i);
2443
2444   printf ("  %s tem ATTRIBUTE_UNUSED;\n", IS_SPLIT (type) ? "rtx" : "int");
2445
2446   if (!subfunction)
2447     printf ("  recog_data.insn = NULL_RTX;\n");
2448
2449   if (head->first)
2450     write_tree (head, "", type, 1);
2451   else
2452     printf ("  goto ret0;\n");
2453
2454   printf (" ret0:\n  return %d;\n}\n\n", IS_SPLIT (type) ? 0 : -1);
2455 }
2456
2457 /* In break_out_subroutines, we discovered the boundaries for the
2458    subroutines, but did not write them out.  Do so now.  */
2459
2460 static void
2461 write_subroutines (struct decision_head *head, enum routine_type type)
2462 {
2463   struct decision *p;
2464
2465   for (p = head->first; p ; p = p->next)
2466     if (p->success.first)
2467       write_subroutines (&p->success, type);
2468
2469   if (head->first->subroutine_number > 0)
2470     write_subroutine (head, type);
2471 }
2472
2473 /* Begin the output file.  */
2474
2475 static void
2476 write_header (void)
2477 {
2478   puts ("\
2479 /* Generated automatically by the program `genrecog' from the target\n\
2480    machine description file.  */\n\
2481 \n\
2482 #include \"config.h\"\n\
2483 #include \"system.h\"\n\
2484 #include \"coretypes.h\"\n\
2485 #include \"tm.h\"\n\
2486 #include \"rtl.h\"\n\
2487 #include \"tm_p.h\"\n\
2488 #include \"function.h\"\n\
2489 #include \"insn-config.h\"\n\
2490 #include \"recog.h\"\n\
2491 #include \"real.h\"\n\
2492 #include \"output.h\"\n\
2493 #include \"flags.h\"\n\
2494 #include \"hard-reg-set.h\"\n\
2495 #include \"resource.h\"\n\
2496 #include \"toplev.h\"\n\
2497 #include \"reload.h\"\n\
2498 \n");
2499
2500   puts ("\n\
2501 /* `recog' contains a decision tree that recognizes whether the rtx\n\
2502    X0 is a valid instruction.\n\
2503 \n\
2504    recog returns -1 if the rtx is not valid.  If the rtx is valid, recog\n\
2505    returns a nonnegative number which is the insn code number for the\n\
2506    pattern that matched.  This is the same as the order in the machine\n\
2507    description of the entry that matched.  This number can be used as an\n\
2508    index into `insn_data' and other tables.\n");
2509   puts ("\
2510    The third argument to recog is an optional pointer to an int.  If\n\
2511    present, recog will accept a pattern if it matches except for missing\n\
2512    CLOBBER expressions at the end.  In that case, the value pointed to by\n\
2513    the optional pointer will be set to the number of CLOBBERs that need\n\
2514    to be added (it should be initialized to zero by the caller).  If it");
2515   puts ("\
2516    is set nonzero, the caller should allocate a PARALLEL of the\n\
2517    appropriate size, copy the initial entries, and call add_clobbers\n\
2518    (found in insn-emit.c) to fill in the CLOBBERs.\n\
2519 ");
2520
2521   puts ("\n\
2522    The function split_insns returns 0 if the rtl could not\n\
2523    be split or the split rtl as an INSN list if it can be.\n\
2524 \n\
2525    The function peephole2_insns returns 0 if the rtl could not\n\
2526    be matched. If there was a match, the new rtl is returned in an INSN list,\n\
2527    and LAST_INSN will point to the last recognized insn in the old sequence.\n\
2528 */\n\n");
2529 }
2530
2531 \f
2532 /* Construct and return a sequence of decisions
2533    that will recognize INSN.
2534
2535    TYPE says what type of routine we are recognizing (RECOG or SPLIT).  */
2536
2537 static struct decision_head
2538 make_insn_sequence (rtx insn, enum routine_type type)
2539 {
2540   rtx x;
2541   const char *c_test = XSTR (insn, type == RECOG ? 2 : 1);
2542   int truth = maybe_eval_c_test (c_test);
2543   struct decision *last;
2544   struct decision_test *test, **place;
2545   struct decision_head head;
2546   char c_test_pos[2];
2547
2548   /* We should never see an insn whose C test is false at compile time.  */
2549   gcc_assert (truth);
2550
2551   record_insn_name (next_insn_code, (type == RECOG ? XSTR (insn, 0) : NULL));
2552
2553   c_test_pos[0] = '\0';
2554   if (type == PEEPHOLE2)
2555     {
2556       int i, j;
2557
2558       /* peephole2 gets special treatment:
2559          - X always gets an outer parallel even if it's only one entry
2560          - we remove all traces of outer-level match_scratch and match_dup
2561            expressions here.  */
2562       x = rtx_alloc (PARALLEL);
2563       PUT_MODE (x, VOIDmode);
2564       XVEC (x, 0) = rtvec_alloc (XVECLEN (insn, 0));
2565       for (i = j = 0; i < XVECLEN (insn, 0); i++)
2566         {
2567           rtx tmp = XVECEXP (insn, 0, i);
2568           if (GET_CODE (tmp) != MATCH_SCRATCH && GET_CODE (tmp) != MATCH_DUP)
2569             {
2570               XVECEXP (x, 0, j) = tmp;
2571               j++;
2572             }
2573         }
2574       XVECLEN (x, 0) = j;
2575
2576       c_test_pos[0] = 'A' + j - 1;
2577       c_test_pos[1] = '\0';
2578     }
2579   else if (XVECLEN (insn, type == RECOG) == 1)
2580     x = XVECEXP (insn, type == RECOG, 0);
2581   else
2582     {
2583       x = rtx_alloc (PARALLEL);
2584       XVEC (x, 0) = XVEC (insn, type == RECOG);
2585       PUT_MODE (x, VOIDmode);
2586     }
2587
2588   validate_pattern (x, insn, NULL_RTX, 0);
2589
2590   memset(&head, 0, sizeof(head));
2591   last = add_to_sequence (x, &head, "", type, 1);
2592
2593   /* Find the end of the test chain on the last node.  */
2594   for (test = last->tests; test->next; test = test->next)
2595     continue;
2596   place = &test->next;
2597
2598   /* Skip the C test if it's known to be true at compile time.  */
2599   if (truth == -1)
2600     {
2601       /* Need a new node if we have another test to add.  */
2602       if (test->type == DT_accept_op)
2603         {
2604           last = new_decision (c_test_pos, &last->success);
2605           place = &last->tests;
2606         }
2607       test = new_decision_test (DT_c_test, &place);
2608       test->u.c_test = c_test;
2609     }
2610
2611   test = new_decision_test (DT_accept_insn, &place);
2612   test->u.insn.code_number = next_insn_code;
2613   test->u.insn.lineno = pattern_lineno;
2614   test->u.insn.num_clobbers_to_add = 0;
2615
2616   switch (type)
2617     {
2618     case RECOG:
2619       /* If this is a DEFINE_INSN and X is a PARALLEL, see if it ends
2620          with a group of CLOBBERs of (hard) registers or MATCH_SCRATCHes.
2621          If so, set up to recognize the pattern without these CLOBBERs.  */
2622
2623       if (GET_CODE (x) == PARALLEL)
2624         {
2625           int i;
2626
2627           /* Find the last non-clobber in the parallel.  */
2628           for (i = XVECLEN (x, 0); i > 0; i--)
2629             {
2630               rtx y = XVECEXP (x, 0, i - 1);
2631               if (GET_CODE (y) != CLOBBER
2632                   || (!REG_P (XEXP (y, 0))
2633                       && GET_CODE (XEXP (y, 0)) != MATCH_SCRATCH))
2634                 break;
2635             }
2636
2637           if (i != XVECLEN (x, 0))
2638             {
2639               rtx new;
2640               struct decision_head clobber_head;
2641
2642               /* Build a similar insn without the clobbers.  */
2643               if (i == 1)
2644                 new = XVECEXP (x, 0, 0);
2645               else
2646                 {
2647                   int j;
2648
2649                   new = rtx_alloc (PARALLEL);
2650                   XVEC (new, 0) = rtvec_alloc (i);
2651                   for (j = i - 1; j >= 0; j--)
2652                     XVECEXP (new, 0, j) = XVECEXP (x, 0, j);
2653                 }
2654
2655               /* Recognize it.  */
2656               memset (&clobber_head, 0, sizeof(clobber_head));
2657               last = add_to_sequence (new, &clobber_head, "", type, 1);
2658
2659               /* Find the end of the test chain on the last node.  */
2660               for (test = last->tests; test->next; test = test->next)
2661                 continue;
2662
2663               /* We definitely have a new test to add -- create a new
2664                  node if needed.  */
2665               place = &test->next;
2666               if (test->type == DT_accept_op)
2667                 {
2668                   last = new_decision ("", &last->success);
2669                   place = &last->tests;
2670                 }
2671
2672               /* Skip the C test if it's known to be true at compile
2673                  time.  */
2674               if (truth == -1)
2675                 {
2676                   test = new_decision_test (DT_c_test, &place);
2677                   test->u.c_test = c_test;
2678                 }
2679
2680               test = new_decision_test (DT_accept_insn, &place);
2681               test->u.insn.code_number = next_insn_code;
2682               test->u.insn.lineno = pattern_lineno;
2683               test->u.insn.num_clobbers_to_add = XVECLEN (x, 0) - i;
2684
2685               merge_trees (&head, &clobber_head);
2686             }
2687         }
2688       break;
2689
2690     case SPLIT:
2691       /* Define the subroutine we will call below and emit in genemit.  */
2692       printf ("extern rtx gen_split_%d (rtx, rtx *);\n", next_insn_code);
2693       break;
2694
2695     case PEEPHOLE2:
2696       /* Define the subroutine we will call below and emit in genemit.  */
2697       printf ("extern rtx gen_peephole2_%d (rtx, rtx *);\n",
2698               next_insn_code);
2699       break;
2700     }
2701
2702   return head;
2703 }
2704
2705 static void
2706 process_tree (struct decision_head *head, enum routine_type subroutine_type)
2707 {
2708   if (head->first == NULL)
2709     {
2710       /* We can elide peephole2_insns, but not recog or split_insns.  */
2711       if (subroutine_type == PEEPHOLE2)
2712         return;
2713     }
2714   else
2715     {
2716       factor_tests (head);
2717
2718       next_subroutine_number = 0;
2719       break_out_subroutines (head, 1);
2720       find_afterward (head, NULL);
2721
2722       /* We run this after find_afterward, because find_afterward needs
2723          the redundant DT_mode tests on predicates to determine whether
2724          two tests can both be true or not.  */
2725       simplify_tests(head);
2726
2727       write_subroutines (head, subroutine_type);
2728     }
2729
2730   write_subroutine (head, subroutine_type);
2731 }
2732 \f
2733 extern int main (int, char **);
2734
2735 int
2736 main (int argc, char **argv)
2737 {
2738   rtx desc;
2739   struct decision_head recog_tree, split_tree, peephole2_tree, h;
2740
2741   progname = "genrecog";
2742
2743   memset (&recog_tree, 0, sizeof recog_tree);
2744   memset (&split_tree, 0, sizeof split_tree);
2745   memset (&peephole2_tree, 0, sizeof peephole2_tree);
2746
2747   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
2748     return (FATAL_EXIT_CODE);
2749
2750   next_insn_code = 0;
2751
2752   write_header ();
2753
2754   /* Read the machine description.  */
2755
2756   while (1)
2757     {
2758       desc = read_md_rtx (&pattern_lineno, &next_insn_code);
2759       if (desc == NULL)
2760         break;
2761
2762       switch (GET_CODE (desc))
2763         {
2764         case DEFINE_PREDICATE:
2765         case DEFINE_SPECIAL_PREDICATE:
2766           process_define_predicate (desc);
2767           break;
2768
2769         case DEFINE_INSN:
2770           h = make_insn_sequence (desc, RECOG);
2771           merge_trees (&recog_tree, &h);
2772           break;
2773
2774         case DEFINE_SPLIT:
2775           h = make_insn_sequence (desc, SPLIT);
2776           merge_trees (&split_tree, &h);
2777           break;
2778
2779         case DEFINE_PEEPHOLE2:
2780           h = make_insn_sequence (desc, PEEPHOLE2);
2781           merge_trees (&peephole2_tree, &h);
2782
2783         default:
2784           /* do nothing */;
2785         }
2786     }
2787
2788   if (error_count || have_error)
2789     return FATAL_EXIT_CODE;
2790
2791   puts ("\n\n");
2792
2793   process_tree (&recog_tree, RECOG);
2794   process_tree (&split_tree, SPLIT);
2795   process_tree (&peephole2_tree, PEEPHOLE2);
2796
2797   fflush (stdout);
2798   return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
2799 }
2800 \f
2801 /* Define this so we can link with print-rtl.o to get debug_rtx function.  */
2802 const char *
2803 get_insn_name (int code)
2804 {
2805   if (code < insn_name_ptr_size)
2806     return insn_name_ptr[code];
2807   else
2808     return NULL;
2809 }
2810
2811 static void
2812 record_insn_name (int code, const char *name)
2813 {
2814   static const char *last_real_name = "insn";
2815   static int last_real_code = 0;
2816   char *new;
2817
2818   if (insn_name_ptr_size <= code)
2819     {
2820       int new_size;
2821       new_size = (insn_name_ptr_size ? insn_name_ptr_size * 2 : 512);
2822       insn_name_ptr = xrealloc (insn_name_ptr, sizeof(char *) * new_size);
2823       memset (insn_name_ptr + insn_name_ptr_size, 0,
2824               sizeof(char *) * (new_size - insn_name_ptr_size));
2825       insn_name_ptr_size = new_size;
2826     }
2827
2828   if (!name || name[0] == '\0')
2829     {
2830       new = xmalloc (strlen (last_real_name) + 10);
2831       sprintf (new, "%s+%d", last_real_name, code - last_real_code);
2832     }
2833   else
2834     {
2835       last_real_name = new = xstrdup (name);
2836       last_real_code = code;
2837     }
2838
2839   insn_name_ptr[code] = new;
2840 }
2841 \f
2842 static void
2843 debug_decision_2 (struct decision_test *test)
2844 {
2845   switch (test->type)
2846     {
2847     case DT_num_insns:
2848       fprintf (stderr, "num_insns=%d", test->u.num_insns);
2849       break;
2850     case DT_mode:
2851       fprintf (stderr, "mode=%s", GET_MODE_NAME (test->u.mode));
2852       break;
2853     case DT_code:
2854       fprintf (stderr, "code=%s", GET_RTX_NAME (test->u.code));
2855       break;
2856     case DT_veclen:
2857       fprintf (stderr, "veclen=%d", test->u.veclen);
2858       break;
2859     case DT_elt_zero_int:
2860       fprintf (stderr, "elt0_i=%d", (int) test->u.intval);
2861       break;
2862     case DT_elt_one_int:
2863       fprintf (stderr, "elt1_i=%d", (int) test->u.intval);
2864       break;
2865     case DT_elt_zero_wide:
2866       fprintf (stderr, "elt0_w=" HOST_WIDE_INT_PRINT_DEC, test->u.intval);
2867       break;
2868     case DT_elt_zero_wide_safe:
2869       fprintf (stderr, "elt0_ws=" HOST_WIDE_INT_PRINT_DEC, test->u.intval);
2870       break;
2871     case DT_veclen_ge:
2872       fprintf (stderr, "veclen>=%d", test->u.veclen);
2873       break;
2874     case DT_dup:
2875       fprintf (stderr, "dup=%d", test->u.dup);
2876       break;
2877     case DT_pred:
2878       fprintf (stderr, "pred=(%s,%s)",
2879                test->u.pred.name, GET_MODE_NAME(test->u.pred.mode));
2880       break;
2881     case DT_c_test:
2882       {
2883         char sub[16+4];
2884         strncpy (sub, test->u.c_test, sizeof(sub));
2885         memcpy (sub+16, "...", 4);
2886         fprintf (stderr, "c_test=\"%s\"", sub);
2887       }
2888       break;
2889     case DT_accept_op:
2890       fprintf (stderr, "A_op=%d", test->u.opno);
2891       break;
2892     case DT_accept_insn:
2893       fprintf (stderr, "A_insn=(%d,%d)",
2894                test->u.insn.code_number, test->u.insn.num_clobbers_to_add);
2895       break;
2896
2897     default:
2898       gcc_unreachable ();
2899     }
2900 }
2901
2902 static void
2903 debug_decision_1 (struct decision *d, int indent)
2904 {
2905   int i;
2906   struct decision_test *test;
2907
2908   if (d == NULL)
2909     {
2910       for (i = 0; i < indent; ++i)
2911         putc (' ', stderr);
2912       fputs ("(nil)\n", stderr);
2913       return;
2914     }
2915
2916   for (i = 0; i < indent; ++i)
2917     putc (' ', stderr);
2918
2919   putc ('{', stderr);
2920   test = d->tests;
2921   if (test)
2922     {
2923       debug_decision_2 (test);
2924       while ((test = test->next) != NULL)
2925         {
2926           fputs (" + ", stderr);
2927           debug_decision_2 (test);
2928         }
2929     }
2930   fprintf (stderr, "} %d n %d a %d\n", d->number,
2931            (d->next ? d->next->number : -1),
2932            (d->afterward ? d->afterward->number : -1));
2933 }
2934
2935 static void
2936 debug_decision_0 (struct decision *d, int indent, int maxdepth)
2937 {
2938   struct decision *n;
2939   int i;
2940
2941   if (maxdepth < 0)
2942     return;
2943   if (d == NULL)
2944     {
2945       for (i = 0; i < indent; ++i)
2946         putc (' ', stderr);
2947       fputs ("(nil)\n", stderr);
2948       return;
2949     }
2950
2951   debug_decision_1 (d, indent);
2952   for (n = d->success.first; n ; n = n->next)
2953     debug_decision_0 (n, indent + 2, maxdepth - 1);
2954 }
2955
2956 void
2957 debug_decision (struct decision *d)
2958 {
2959   debug_decision_0 (d, 0, 1000000);
2960 }
2961
2962 void
2963 debug_decision_list (struct decision *d)
2964 {
2965   while (d)
2966     {
2967       debug_decision_0 (d, 0, 0);
2968       d = d->next;
2969     }
2970 }