reload.c (find_reloads_toplev): Mode of X is not important when simplifying subregs of constants.

* reload.c (find_reloads_toplev): Mode of X is not important
        when simplifying subregs of constants.
	* g++.dg/opt/reload1.C: New.

From-SVN: r58490
This commit is contained in:
Richard Henderson 2002-10-24 02:02:24 -07:00 committed by Richard Henderson
parent 60bc2b4b9c
commit 3bd216f201
3 changed files with 50 additions and 2 deletions

View file

@ -1,3 +1,9 @@
2002-10-24 Richard Henderson <rth@redhat.com>
PR opt/7944
* reload.c (find_reloads_toplev): Mode of X is not important
when simplifying subregs of constants.
2002-10-24 Richard Sandiford <rsandifo@redhat.com>
* config.gcc (mips64vr-*-elf*, mips64vrel-*-elf*): Add

View file

@ -4471,8 +4471,7 @@ find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest, insn,
reg_equiv_constant[regno])) != 0)
return tem;
if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
&& regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
&& reg_equiv_constant[regno] != 0)
{
tem =

View file

@ -0,0 +1,43 @@
// PR 7944
// { dg-do compile }
// { dg-options -O2 }
struct B
{
B & operator << (short s)
{
int j;
if (j)
return operator << (s);
else
return operator << (s);
}
};
struct A
{
int i;
static void bar ();
static int quux ()
{
bar ();
return 0;
}
A ():i (quux ())
{
}
~A ()
{
}
};
void
foo ()
{
short s[4] = { 0, 0, 0, 1 };
A a[2] = { A (), A () };
B b;
b << s[0] << s[2];
}