On 02/09/2011 07:07 AM, Ian Lance Taylor wrote:
> "Paulo J. Matos" <pocma...@gmail.com> writes:
> 
>> But then this is combined by cse into:
>>
>> (set (mem/s:QI (reg:QI 41)) (const_int 0))
>>
>> and bammm, same problem. No loop hoisting. What's the best way to
>> handle this? Any suggestions?
> 
> You need to set TARGET_RTX_COSTS to indicate that this operation is
> relatively expensive.  That should stop combine from generating it.

If constants are never valid as the source of a store,
then you could try something like

  register_operand (operands[0], <mode>)
  || register_operand (operands[1], <mode>)

in the extra-predicate field of your move insns.  This
is not unlike the check for two memories that many ports
use at the moment.  C.f. movsi_internal for i386.

That will prevent combine, or anyone else for that matter,
from re-combining the constant load.


r~

Reply via email to