This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/47744] [x32] ICE: in reload_cse_simplify_operands, at postreload.c:403
- From: "hjl.tools at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 1 Mar 2011 17:27:10 +0000
- Subject: [Bug target/47744] [x32] ICE: in reload_cse_simplify_operands, at postreload.c:403
- Auto-submitted: auto-generated
- References: <bug-47744-4@http.gcc.gnu.org/bugzilla/>
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]$