Hello, Ping #2 for the non-back-end parts of http://gcc.gnu.org/ml/gcc-patches/2012-04/msg01668.html
Thanks much in advance, Olivier > David approved the rs6000 parts already (with adjustments to > comments, http://gcc.gnu.org/ml/gcc-patches/2012-05/msg00368.html) > > Thanks much in advance for your feedback, > > Olivier > > On Apr 26, 2012, at 11:30 , Olivier Hainque wrote: > ... >> a number of places in the compiler use the >> mode_dependent_address_p predicate to actually check for weaker necesssary >> conditions. Typically, a few places need to check that a MEM access remains >> valid when just narrowing the mode, while mode_dependent_address_p tells if >> any mode change is valid. >> >> While this is of course generally safe, this has been causing endless >> troubles >> to the powerpc back-end which has apparently unique particularities related >> to >> altivec modes. > ... >> The attached patch is a proposal to fix this, slightly generalized compared >> to the original one. The general idea is to allow for weaker predicates at >> the places where we need them. >> >> This is achieved by the introduction of a TARGET_MAY_NARROW_ACCESS target >> hook, which defaults to !mode_dependent_address_p and is redefined for >> powerpc. The patch uses this hook directly instead of the former predicate in >> a couple of places where this was the intent already, as well as new >> "valid_access_mode_change_p" function to direct to one or the or the other >> depending on provided original and destination modes. >> >> This provides a better match for actual internal needs, allows to get rid of >> the powerpc back-end twists (no need to lie in mode_dependent_address_p any >> more) and cures the observed internal compiler error. > ... >> 2012-04-26 Olivier Hainque <hain...@adacore.com> >> >> * target.def (TARGET_MAY_NARROW_ACCESS_TO): New hook. >> * doc/tm.texi[.in] (TARGET_MAY_NARROW_ACCESS_TO): Document. >> * targhooks.c (default_may_narrow_access_to): Default implementation. >> * targhooks.h (default_may_narrow_access_to): Declare. >> * config/rs6000/rs6000.c (rs6000_may_narrow_access_to): Specific >> implementation. >> (rs6000_mode_dependent_address): Stop lying for + const_int. >> (rs6000_offsettable_memref_p): Adjust comments accordingly. >> * expr.c (convert_move): Use may_narrow_access_to instead of >> mode_dependent_address_p where appropriate. >> * recog.c (offsettable_address_addr_space_p): Likewise. >> (valid_access_mode_change_p): New function. >> * recog.h (valid_access_mode_change_p): Declare. >> * simplify-rtx.c (simplify_subreg): Use it instead of >> mode_dependent_address_p where appropriate. >> >> testsuite/ >> * gcc.dg/offsetmem.c: New test. >> >> <narrow.dif> >