/* { 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;
}

