Commit 92a21141 by Brad Kaiser Committed by Richard Henderson

reload1.c (elimination_effects): Use function_invariant_p instead of CONSTANT_P when...

        * reload1.c (elimination_effects): Use function_invariant_p
        instead of CONSTANT_P when considering register equivalences.

From-SVN: r47226
parent da6ccf83
2001-11-20 Brad Kaiser <bkaiser@acelink.net>
* reload1.c (elimination_effects): Use function_invariant_p
instead of CONSTANT_P when considering register equivalences.
2001-11-20 David O'Brien <obrien@FreeBSD.org>
* config.gcc: Add FreeBSD/PowerPC target.
......
......@@ -2699,7 +2699,7 @@ elimination_effects (x, mem_mode)
}
else if (reg_renumber[regno] < 0 && reg_equiv_constant
&& reg_equiv_constant[regno]
&& ! CONSTANT_P (reg_equiv_constant[regno]))
&& ! function_invariant_p (reg_equiv_constant[regno]))
elimination_effects (reg_equiv_constant[regno], mem_mode);
return;
......
/* Test for reload failing to eliminate from argp to sp. */
/* { dg-do run { target i?86-*-* } } */
/* { dg-options "-O2 -fomit-frame-pointer" } */
static int ustrsize (const char *s);
static int (*ucwidth) (int c);
static int (*ugetxc) (const char **s);
static int (*usetc) (char *s, int c);
char *ustrzcat(char *dest, int size, const char *src)
{
int pos = ustrsize(dest);
int c;
size -= pos + ucwidth(0);
while ((c = ugetxc(&src)) != 0) {
size -= ucwidth(c);
if (size < 0)
break;
pos += usetc(dest+pos, c);
}
usetc(dest+pos, 0);
return dest;
}
static int __attribute__((noinline))
ustrsize (const char *s)
{
return 0;
}
static int
ucwidth_ (int c)
{
return 1;
}
static int
ugetxc_ (const char **s)
{
return '\0';
}
static int
usetc_ (char *s, int c)
{
return 1;
}
int
main()
{
ucwidth = ucwidth_;
ugetxc = ugetxc_;
usetc = usetc_;
/* ??? It is impossible to explicitly modify the hard frame pointer.
This will run afoul of code in flow.c that declines to mark regs
in eliminate_regs in regs_ever_used. Apparently, we have to wait
for reload to decide that it won't need a frame pointer before a
variable can be allocated to %ebp.
So save, restore, and clobber %ebp by hand. */
asm ("pushl %%ebp\n\t"
"movl $-1, %%ebp\n\t"
"pushl $0\n\t"
"pushl $0\n\t"
"pushl $0\n\t"
"call %P0\n\t"
"addl $12, %%esp\n\t"
"popl %%ebp"
: : "i"(ustrzcat));
return 0;
}
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