| /* { dg-do compile } */ |
| /* { dg-options "-O2 -ftree-vectorize" } */ |
| |
| struct funny_match |
| { |
| int this, other; |
| }; |
| |
| typedef struct rtx { |
| int code; |
| } *rtx; |
| |
| extern rtx recog_operand[]; |
| extern int which_alternative; |
| extern int nalternatives; |
| |
| int |
| constrain_operands (insn_code_num, strict) |
| int insn_code_num; |
| int strict; |
| { |
| char *constraints[10]; |
| struct funny_match funny_match[10]; |
| register int c; |
| int funny_match_index; |
| |
| which_alternative = 0; |
| |
| while (which_alternative < nalternatives) |
| { |
| register int opno; |
| register char *p = constraints[opno]; |
| int lose = 0; |
| funny_match_index = 0; |
| |
| while (*p && (c = *p++) != ',') |
| funny_match[funny_match_index++].other = c - '0'; |
| |
| if ((((recog_operand[opno])->code) == 12)) |
| lose = 1; |
| |
| if (!lose) |
| { |
| while (--funny_match_index >= 0) |
| recog_operand[funny_match[funny_match_index].other] |
| = recog_operand[funny_match[funny_match_index].this]; |
| return 1; |
| } |
| which_alternative++; |
| } |
| |
| if (strict == 0) |
| return constrain_operands (insn_code_num, -1); |
| return 0; |
| } |
| |