On Thu, 26 Jan 2012, Eric Botcazou wrote: > > Of course get_inner_reference looks through these kind of > > conversions when returning the ultimate decl in MEM [&foo], > > see the jumps in tree-ssa-alias.c we perform to re-discover > > the view-converting cases ... (at some point I realized that > > this probably wasn't the best design decision). So maybe > > if the passed type isn't used in any other way we can > > get around and discover the view-convert and use the alias-type > > of the MEM_REF ... > > But I presume that the regular MEM_REF expander can cope with this case?
Sure. Btw, we seem to use the TYPE argument solely for the purpose of the assign_temp call - and in the forwarding to store_field we pass down the very same alias_set which isn't needed, we can just use MEM_ALIAS_SET (blk_object) here it seems, it's different memory after all, no need to conflict with TARGET (or set MEM_KEEP_ALIAS_SET_P - what's that ..., ah, DECL_NONADDRESSABLE ...). Of course if you can simplify the code by using the regular expander all the better (and eliminate the TYPE argument?). @@ -6299,7 +6302,7 @@ store_field (rtx target, HOST_WIDE_INT b store_field (blk_object, bitsize, bitpos, bitregion_start, bitregion_end, - mode, exp, type, alias_set, nontemporal); + mode, exp, type, MEM_ALIAS_SET (blk_object), nontemporal); emit_move_insn (target, object); works for me. Thanks, Richard.