This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [Patch, i386] Avoid LCP stalls (issue5975045)
On 03/30/2012 11:11 AM, Richard Henderson wrote:
> On 03/30/2012 11:03 AM, Teresa Johnson wrote:
>> +(define_insn "*movhi_imm_internal"
>> + [(set (match_operand:HI 0 "memory_operand" "=m")
>> + (match_operand:HI 1 "immediate_operand" "n"))]
>> + "!TARGET_LCP_STALL"
>> +{
>> + return "mov{w}\t{%1, %0|%0, %1}";
>> +}
>> + [(set (attr "type") (const_string "imov"))
>> + (set (attr "mode") (const_string "HI"))])
>> +
>> (define_insn "*movhi_internal"
>> [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,m")
>> - (match_operand:HI 1 "general_operand" "r,rn,rm,rn"))]
>> + (match_operand:HI 1 "general_operand" "r,rn,rm,r"))]
>> "!(MEM_P (operands[0]) && MEM_P (operands[1]))"
>
> For reload to work correctly, all alternatives must remain part of the same pattern.
> This issue should be handled with the ISA and ENABLED attributes.
I'll also ask if this should better be handled with a peephole2.
While movw $1234,(%eax) might be expensive, is it so expensive that we
*must* force the use of a free register? Might it be better only to
split the insn in two if and only if a free register exists?
That can easily be done with a peephole2 pattern...
r~