------- Comment #11 from wilson at codesourcery dot com 2010-03-18 00:12 ------- Subject: Re: [ia64] Inappropriate address spills
On Wed, 2010-03-17 at 23:47 +0000, sje at cup dot hp dot com wrote: > Reading Richard's initial comment I thought the problem was that the code was > (or could be) illegal because the relocation may be out of range and we > shouldn't > use the gprel relocation for any of these constant pool references. The code is invalid only if you use -mno-sdata. The only reason why Richard wanted to use -mno-sdata is because he saw the non-optimal code, and hoped that -mno-sdata would fix that. It didn't. It just made the problem worse by generating invalid code. So there is probably also a bug here in the handling of -mno-sdata, but fixing that doesn't help Richard, because it doesn't solve the real problem he was complaining about, which was the non-optimal code. I suspect that the -mno-sdata bug is that ia64_expand_load_address does else if (sdata_symbolic_operand (src, VOIDmode)) emit_insn (gen_load_gprel (dest, src)); and sdata_symbolic_operand fails to check TARGET_NO_SDATA, so it assumes that constant pool entries are still in the sdata section, and we end up with gprel references to items that aren't in the sdata section anymore, which will fail at link time. If we fix that, -mno-sdata will work, but we will still have all of the inappropriate address spills (i.e. non-optimal code) which is what the PR summary is complaining about. Jim -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42040