57 lines
1.1 KiB
C
57 lines
1.1 KiB
C
/* { 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;
|
|
}
|
|
|