http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47744

--- Comment #5 from H.J. Lu <hjl.tools at gmail dot com> 2011-03-01 17:27:00 
UTC ---
Another one:

[hjl@gnu-6 ilp32-26]$ cat x.c
typedef union rtunion_def {
  struct rtx_def *rtx;
} rtunion;
typedef struct rtx_def {
  unsigned short code;
  rtunion fld[1];
} *rtx;
extern rtx recog_operand[];
extern rtx *recog_operand_loc[];
extern int reload_n_operands;
extern void find_dummy_reload (int, int);
extern int asm_noperands (rtx);
extern int n_occurrences (char **);
char operands_match[10][10];
void find_reloads (rtx insn, int n_alternatives, int commutative)
{
  register int i, j;
  int noperands;
  char *constraints[10];
  int address_reloaded[10];
  int this_alternative[10];
  char this_alternative_win[10];
  int this_alternative_matches[10];
  int this_alternative_number;
  rtx body = ((insn)->fld[3].rtx);
  int operand_mode[10];
  if (body->code == 1)
    {
      reload_n_operands = noperands = asm_noperands (body);
      n_alternatives = n_occurrences (constraints);
    }
  for (this_alternative_number = 0;
       this_alternative_number < n_alternatives;
       this_alternative_number++)
    for (i = 0;
     i < noperands;
     i++)
      {
    register char *p = constraints[i];
    register int win = 0;
    int badop = 1;
    int c;
    register rtx operand = recog_operand[i];
    int force_reload = 0;
    this_alternative_win[i] = 0;
    this_alternative[i] = 1;
    while (*p && (c = *p++) != ',')
      switch (c)
        {
        case '4':
          c -= '0';
          this_alternative_matches[i] = c;
          if ((c != commutative
           || i != commutative + 1)
          && operands_match[c][i])
        win = this_alternative_win[c];
          else
        find_dummy_reload (operand_mode[i], this_alternative[c]);
          if (! win || force_reload)
        for (j = 0; j < i; j++)
          if (this_alternative_matches[j]
              == this_alternative_matches[i])
            badop = 1;
          break;
        case '<':
          if (operand->code == 2
          && ! address_reloaded[i]
          && operand->fld[0].rtx->code == 3)
        win = 1;
        }
      }
}
[hjl@gnu-6 ilp32-26]$ make
/export/build/gnu/gcc-x32/build-x86_64-linux/gcc/xgcc
-B/export/build/gnu/gcc-x32/build-x86_64-linux/gcc/ -S -o x.s -mx32 -O  x.c
x.c: In function ‘find_reloads’:
x.c:72:1: error: insn does not satisfy its constraints:
(insn 173 171 174 21 (set (reg:SI 0 ax [169])
        (plus:SI (plus:SI (reg:SI 44 r15 [175])
                (subreg:SI (plus:DI (reg/f:DI 7 sp)
                        (const_int 240 [0xf0])) 0))
            (const_int -96 [0xffffffffffffffa0]))) x.c:67 251 {*lea_1_x32}
     (nil))
x.c:72:1: internal compiler error: in reload_cse_simplify_operands, at
postreload.c:403
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
make: *** [x.s] Error 1
[hjl@gnu-6 ilp32-26]$

Reply via email to