On Wed, May 28, 2014 at 11:02 AM, Bernd Edlinger
<bernd.edlin...@hotmail.de> wrote:
> Hi,
>
>
>> But the coment previously read
>>
>> /* A constant address in TO_RTX can have VOIDmode, we must not try
>> to call force_reg for that case. Avoid that case. */
>>
>> and you are removing that check. So I guess you want to retain
>>
>> && GET_MODE (XEXP (to_rtx, 0)) != VOIDmode
>>
>> or investigate why we don't need to avoid this case anymore. In fact,
>> that's probably the only change necessary, just drop the == BLKmode
>> check? Your lengthy description doesn't reveal if you investigated that.
>> It seems to me it tries to avoid ajdusting MEM (symbol-ref) for example?
>> Maybe also for optimization reasons?
>
> I have now found out, what kind of MEM it is, which has a VOIDmode address...
>
> Just a few lines above, there is this:
>
>           if (!MEM_P (to_rtx))
>             {
>               /* We can get constant negative offsets into arrays with broken
>                  user code.  Translate this to a trap instead of ICEing.  */
>               gcc_assert (TREE_CODE (offset) == INTEGER_CST);
>               expand_builtin_trap ();
>               to_rtx = gen_rtx_MEM (BLKmode, const0_rtx);
>             }
>
> now, I have never ever seen this block executed.
> Even the examples from PR 23714 do not execute this block any more.
>
> But const0_rtx has VOIDmode. This would satisfy the condition.
>
> So if I try:
>
> to_rtx = gen_rtx_MEM (BLKmode, const0_rtx);
> force_reg(mode1, to_rtx);
>
> Voila: assertion in emit_move_insn.
>
> Somehow this matches literally to what Jeff wrote in the comment:
> "A constant address in TO_RTX can have VOIDmode, we must not try
> to call force_reg for that case."
>
> But nothing happens with:
>
> to_rtx = gen_rtx_MEM (BLKmode, const0_rtx);
> to_rtx = adjust_address (to_rtx, mode1, bitpos / BITS_PER_UNIT)
>
> also the rest of the code generation works, and of course this
> expands a null pointer access.
>
>
>> Adding a new comment before the block reflecting your analysis above
>> would be nice as well.
>
> done, see the attached patch v2.
>
> I have also removed the check for MEM_P (to_rtx) in the first if-statement,
> because this is always satisfied, after the if (!MEM_P(to_rtx))-block above.
> Now both places have exactly the same logic.
>
> Boot-strapped & regression-tested in x86_64-linux-gnu.
>
> OK for trunk?

Ok.

Thanks,
Richard.

>
> Thanks
> Bernd.
>

Reply via email to