[Patch, i386] Avoid LCP stalls (issue5975045)

H.J. Lu hjl.tools@gmail.com
Fri Mar 30 16:23:00 GMT 2012


On Fri, Mar 30, 2012 at 8:19 AM, Richard Henderson <rth@redhat.com> wrote:
> 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...
>

Here is a very old LCP patch with peephole2.  It may need some
updates.


-- 
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gcc-x86-movw-7.patch
Type: text/x-patch
Size: 3115 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20120330/f3ba4364/attachment.bin>


More information about the Gcc-patches mailing list