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