On Thu, Oct 17, 2013 at 4:16 PM, Kirill Yukhin <kirill.yuk...@gmail.com> wrote:

>> >> > I suspect gen_lowpart is bad turn when reload is completed, as
>> >> > far as it can create new pseudo. gen_lowpart () may call
>> >> > gen_reg_rtx (), which contain corresponging gcc_assert ().
>> >>
>> >> False.  gen_lowpart is perfectly safe post-reload.
>> >> Indeed, taking the subreg of a hard register should arrive
>> >>
>> >>           x = gen_rtx_REG_offset (op, outermode, final_regno, 
>> >> final_offset);
>> >>
>> >> in simplify_subreg.
>> >>
>> >> Have you encountered some specific problem with gen_lowpart?
>> > Maybe the code in the pattern is buggy? Or is it a gen_lowpart?
>>
>> I think that original approach with gen_rtx_REG is correct and follows
>> established practice in sse.md (please grep for gen_reg_RTX in
>> sse.md). If this approach is necessary due to the deficiency of
>> gen_lowpart, then the fix to gen_lowpart should be proposed in a
>> follow-up patch.
>
> So, I've reverted changes in mult_vect patterns and
> added "%" to constraints.

Please also add back expanders with operand fixups and insn
constraints, as is the case with other commutative operators. They are
needed to hoist operand loads out of the loops (reload and later
passes won't hoist memory loads out of the loops when fixing up
operands).

The patch is OK with this change, but please wait for rths final approval.

Thanks,
Uros.

Reply via email to