Commit ea475b23 by Jakub Jelinek Committed by Jakub Jelinek

regrename.c (build_def_use): Share RTL between MATCH_OPERATOR and corresponding MATCH_DUP.

	* regrename.c (build_def_use): Share RTL between MATCH_OPERATOR and
	corresponding MATCH_DUP.

	* gcc.c-torture/compile/20020323-1.c: New test.

From-SVN: r51305
parent 9b95cee6
2002-03-25 Jakub Jelinek <jakub@redhat.com>
* regrename.c (build_def_use): Share RTL between MATCH_OPERATOR and
corresponding MATCH_DUP.
2002-03-24 Richard Henderson <rth@redhat.com>
* unroll.c (unroll_loop): Zero label_map.
......
......@@ -764,7 +764,7 @@ build_def_use (bb)
rtx note;
rtx old_operands[MAX_RECOG_OPERANDS];
rtx old_dups[MAX_DUP_OPERANDS];
int i;
int i, icode;
int alt;
int predicated;
......@@ -786,6 +786,7 @@ build_def_use (bb)
extract_insn (insn);
constrain_operands (1);
icode = recog_memoized (insn);
preprocess_constraints ();
alt = which_alternative;
n_ops = recog_data.n_operands;
......@@ -827,8 +828,16 @@ build_def_use (bb)
}
for (i = 0; i < recog_data.n_dups; i++)
{
int dup_num = recog_data.dup_num[i];
old_dups[i] = *recog_data.dup_loc[i];
*recog_data.dup_loc[i] = cc0_rtx;
/* For match_dup of match_operator or match_parallel, share
them, so that we don't miss changes in the dup. */
if (icode >= 0
&& insn_data[icode].operand[dup_num].eliminable == 0)
old_dups[i] = recog_data.operand[dup_num];
}
scan_rtx (insn, &PATTERN (insn), NO_REGS, terminate_all_read,
......
2002-03-25 Jakub Jelinek <jakub@redhat.com>
* gcc.c-torture/compile/20020323-1.c: New test.
2002-03-24 Richard Henderson <rth@redhat.com>
* gcc.dg/weak-1.c: Use -fno-common.
......
/* This testcase caused ICE on powerpc at -O3, because regrename did
not handle match_dup of match_operator if the RTLs were not shared. */
struct A
{
unsigned char *a0, *a1;
int a2;
};
void bar (struct A *);
unsigned int
foo (int x)
{
struct A a;
unsigned int b;
if (x < -128 || x > 255 || x == -1)
return 26;
a.a0 = (unsigned char *) &b;
a.a1 = a.a0 + sizeof (unsigned int);
a.a2 = 0;
bar (&a);
return b;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment