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
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