1/* { dg-do compile } */
2/* { dg-options "-O2 -ftree-vectorize" } */
3
4struct funny_match
5{
6  int this, other;
7};
8
9typedef struct rtx {
10    int code;
11} *rtx;
12
13extern rtx recog_operand[];
14extern int which_alternative;
15extern int nalternatives;
16
17int
18constrain_operands (insn_code_num, strict)
19     int insn_code_num;
20     int strict;
21{
22  char *constraints[10];
23  struct funny_match funny_match[10];
24  register int c;
25  int funny_match_index;
26
27  which_alternative = 0;
28
29  while (which_alternative < nalternatives)
30    {
31      register int opno;
32      register char *p = constraints[opno];
33      int lose = 0;
34      funny_match_index = 0;
35
36      while (*p && (c = *p++) != ',')
37	funny_match[funny_match_index++].other = c - '0';
38
39      if ((((recog_operand[opno])->code) == 12))
40	lose = 1;
41
42      if (!lose)
43	{
44	  while (--funny_match_index >= 0)
45	    recog_operand[funny_match[funny_match_index].other]
46		    = recog_operand[funny_match[funny_match_index].this];
47	  return 1;
48	}
49      which_alternative++;
50    }
51
52  if (strict == 0)
53    return constrain_operands (insn_code_num, -1);
54  return 0;
55}
56
57