[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