------- Comment #4 from wilson at codesourcery dot com 2010-03-13 03:16 -------
Subject: Re: [ia64] Inappropriate address spills
Or maybe we should just accept any constant here? I tried that, and for
typedef struct table { int a; int b; int c; } table;
extern table mv_tables[100000];
void foo()
{
init_mv_table(&mv_tables[50000]);
}
I get
addl r35 = @ltoff(mv_tables#+606208), r1
;;
ld8 r35 = [r35]
;;
adds r35 = -6208, r35
which is perhaps still better than using @gprel and the constant pool.
In this case, in ia64_legitimate_constant_p we can just return true if
aligned_offset_symbol_operand is true, and there is no need for the
addend local variable.
Jim
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42040