Commit 8c339083 by Roger Sayle Committed by Roger Sayle

re PR target/27531 (sparc: undefined reference to .LL226 with -O2)

2006-06-22  Roger Sayle  <roger@eyesopen.com>
	    Steven Bosscher  <stevenb.gcc@gmail.com>

	PR target/27531
	* reload1.c (gen_reload): Call mark_jump_label on the new insns
	generated by gen_move_insn to add REG_LABEL notes if necessary.

	* gcc.dg/pr27531-1.c: New test case.


Co-Authored-By: Steven Bosscher <stevenb.gcc@gmail.com>

From-SVN: r114921
parent 70259b26
2006-06-22 Roger Sayle <roger@eyesopen.com>
Steven Bosscher <stevenb.gcc@gmail.com>
PR target/27531
* reload1.c (gen_reload): Call mark_jump_label on the new insns
generated by gen_move_insn to add REG_LABEL notes if necessary.
2006-06-22 Bob Wilson <bob.wilson@acm.org> 2006-06-22 Bob Wilson <bob.wilson@acm.org>
* config/xtensa/lib1funcs.asm (MIN_ESA): Delete. * config/xtensa/lib1funcs.asm (MIN_ESA): Delete.
......
...@@ -7757,7 +7757,11 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type) ...@@ -7757,7 +7757,11 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type)
} }
/* If IN is a simple operand, use gen_move_insn. */ /* If IN is a simple operand, use gen_move_insn. */
else if (OBJECT_P (in) || GET_CODE (in) == SUBREG) else if (OBJECT_P (in) || GET_CODE (in) == SUBREG)
emit_insn (gen_move_insn (out, in)); {
tem = emit_insn (gen_move_insn (out, in));
/* IN may contain a LABEL_REF, if so add a REG_LABEL note. */
mark_jump_label (in, tem, 0);
}
#ifdef HAVE_reload_load_address #ifdef HAVE_reload_load_address
else if (HAVE_reload_load_address) else if (HAVE_reload_load_address)
......
2006-06-22 Roger Sayle <roger@eyesopen.com>
PR target/27531
* gcc.dg/pr27531-1.c: New test case.
2006-06-22 Asher Langton <langton2@llnl.gov> 2006-06-22 Asher Langton <langton2@llnl.gov>
PR fortran/24748 PR fortran/24748
/* PR target/27531 */
/* This test case stressed the register allocator into reloading a LABEL_REF
on sparc, but didn't add a REG_LABEL note, ultimately causing the assembly
output to reference a label that had been eliminated. */
/* { dg-do link } */
/* { dg-options "-O2" } */
typedef struct _IO_FILE FILE;
char const *RCSname;
void *Locks;
void * Head;
struct Revpairs{
struct Revpairs * rnext;
};
extern char *strchr(const char *s, int c);
extern int fprintf(FILE *, const char *format, ...);
static void getrevpairs (char*);
static int branchflag;
static struct Revpairs *revlist, *Revlst;
extern int warn(const char *msg, char *argv);
extern int error(const char *msg, int c, char *argv);
extern int recentdate(void *foo, void *bar);
char *t;
int main (int argc, char **argv)
{
FILE *out;
char *a, **newargv;
void *currdate;
int descflag, selectflag;
int onlylockflag;
int onlyRCSflag;
int shownames;
descflag = selectflag = shownames = 1;
onlylockflag = onlyRCSflag = 0;
while (a = *++argv, 0<--argc)
{
switch (*a++)
{
case 'L':
onlylockflag = 1;
case 'N':
shownames = 0;
case 'R':
t = a;
case 'b':
branchflag = 1;
case 'r':
getrevpairs(a);
}
if (onlylockflag && !Locks)
fprintf(out, "%s\n", RCSname);
if (shownames)
while( currdate)
recentdate(Head, currdate);
}
}
void getrevpairs(char *argv)
{
char c;
struct Revpairs * nextrevpair;
int separator;
if (strchr(argv,':'))
separator = ':';
else
{
if (strchr(argv,'-') )
warn("`-' is obsolete in `-r%s'; use `:' instead", argv);
separator = '-';
}
for (;;)
{
nextrevpair->rnext = revlist;
for (;; c = *++argv)
{
switch (c)
{
default:
continue;
case ' ':
case '\t':
case '\n':
break;
case ':':
case '-':
if (c == separator)
continue;
}
break;
}
if (!c)
break;
error("missing `,' near `%c%s'", c, argv+1);
}
}
int warn(const char *msg, char *argv)
{
t = 0; /* this function needs side-effects. */
return 0;
}
int error(const char *msg, int c, char *argv)
{
t = 0; /* this function needs side-effects. */
return 0;
}
int recentdate(void *foo, void *bar)
{
t = 0; /* this function needs side-effects. */
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