This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Try to canonicalize MEM_REFs that are put into MEM_EXPRs for DEBUG_INSNs (PR debug/47283)


On Thu, Mar 3, 2011 at 8:22 AM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Thu, Mar 03, 2011 at 03:31:55PM +1000, Richard Henderson wrote:
>> On 03/03/2011 03:40 AM, Jakub Jelinek wrote:
>> > ? ? ?case MEM_REF:
>> > + ? ? ?if (!is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
>> > + ? {
>> > + ? ? tree newexp = fold_binary (MEM_REF, TREE_TYPE (exp),
>> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TREE_OPERAND (exp, 0),
>> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TREE_OPERAND (exp, 1));
>> > + ? ? if (newexp)
>> > + ? ? ? exp = newexp;
>> > + ? }
>> > + ? ? ?/* FALLTHROUGH */
>> > ? ? ?case INDIRECT_REF:
>>
>> Do you really want to fallthru with newexp here?
>> In theory it could have folded to anything. ?My guess is that
>> you want to restart instead...
>
> fold_binary only optimizes:
> /* MEM[&MEM[p, CST1], CST2] -> MEM[p, CST1 + CST2]. ?*/
> and
> /* MEM[&a.b, CST2] -> MEM[&a, offsetof (a, b) + CST2]. ?*/
>
> But if you prefer, I can certainly do there
> ? ? ? ?if (newexp)
> ? ? ? ? ?return expand_debug_expr (newexp);
> instead.

It's probably more safe, at least for 4.7, in case we ever start to do
constant folding here.

Btw, I don't really like another caller of set_mem_attributes that
passes a type rather than an expression ... OTOH, the folding
should never fail to generate a canonical MEM ref (I bet asserting
that the MEM_REF is a proper one after folding passes bootstrap
just ok), so maybe just drop the debug expr on the floor in this
case (eventually ICE when checking is enabled)?  At least I can't
see how we could end up with a non-canonicalizable address.

Richard.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]