1 /* { dg-do compile } */
2 /* { dg-options "-O2 -ftree-vectorize" } */
3 
4 struct funny_match
5 {
6   int this, other;
7 };
8 
9 typedef struct rtx {
10     int code;
11 } *rtx;
12 
13 extern rtx recog_operand[];
14 extern int which_alternative;
15 extern int nalternatives;
16 
17 int
constrain_operands(insn_code_num,strict)18 constrain_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