http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55721



--- Comment #8 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
2013-01-09 20:32:25 UTC ---

Created attachment 29132

  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29132

prototype patch



Here's the current version of patch in case anyone wants to give

it a try.  It feels a bit overengineered considering that in practice

I think we really do just care about (SYMBOL_64_HIGH << 32) + SYMBOL_64_LOW

(i.e. the result of the superscalar lea optimisation).  Everything

else should still be a recognisable (lo_sum (foo (high X)) X), where

(foo ...) represents optional indexing.  Recognising the HIGH part

sometimes relies on a (high X) REG_EQUAL note, but that's OK.



The patch seems to cope with things like:



extern int x[];

void bar (int *);



void

f1 (long y)

{

  bar (&x[y + 3]);

}

Reply via email to