[llvm-dev] [X86] MoveImm flag for instructions

S. Bharadwaj Yadavalli via llvm-dev llvm-dev at lists.llvm.org
Fri Feb 9 19:41:23 PST 2018


Thanks for the explanation and the suggestion, Craig. I will try it out.

Bharadwaj


On Fri, Feb 9, 2018 at 1:29 PM, Craig Topper <craig.topper at gmail.com> wrote:

> I think even if we did use it, MoveImmediate is intended for instructions
> that move an immediate into a register rather than into memory. It's
> supposed to indicate instructions that can be folded with the user of the
> register by changing the user to an immediate instruction. And it wouldn't
> be set on an instruction like "addl $0, %eax" or "addl $0, (%ecx)" either
> since those aren't moves.
>
> For X86 you can try using "X86II::hasImm(MI.getDesc().TSFlags)"  that's
> what the encoder uses to determine if there's an immediate to encode at the
> end of the instruction encoding.
>
>
>
> ~Craig
>
> On Fri, Feb 9, 2018 at 1:13 PM, S. Bharadwaj Yadavalli <
> bharadwajy at gmail.com> wrote:
>
>> I am trying to categorize the machine instructions based on associated
>> static (i.e., as encoded in .td file) machine description and the
>> corresponding APIs.
>> I would like to perform appropriate actions based on the kind of
>> instruction in a tool that I am working on.
>>
>> For example, I'd like to distinguish between memop instructions involving
>> immediate vs register. While it appears that I would be able to accomplish
>> this by rummaging through the instruction operands, a combination of the
>> flag(s) MayLoad/MayStore and MoveImm seemed attractive/clean/efficient(?),
>> if the instruction description did indeed use the flags.
>>
>> Hence the question.
>>
>> Thanks,
>>
>> Bharadwaj
>>
>> On Fri, Feb 9, 2018 at 12:17 PM, Craig Topper <craig.topper at gmail.com>
>> wrote:
>>
>>> That flag is specifically used by the foldImmediate optimization in the
>>> Peephole pass. We don't implement the TLI foldImmediate hook the peephole
>>> pass uses on x86 so we have no reason to set the flag on any instructions
>>>
>>> What are you trying to do?
>>>
>>> ~Craig
>>>
>>> On Fri, Feb 9, 2018 at 11:45 AM, S. Bharadwaj Yadavalli via llvm-dev <
>>> llvm-dev at lists.llvm.org> wrote:
>>>
>>>> Hi,
>>>>
>>>> I had (naively?) expected that the instruction to move immediate to
>>>> register or memory (such as MOV32mi, MOV32ri, MOV64mi32, MOV64ri,
>>>> MOV64ri32) would be marked with the flag MCID::MovImm via the
>>>> X86InstrInfo.td (and hence in the generated X86GenInstrInfo.inc).
>>>>
>>>> I do not see that to be the case.
>>>>
>>>> Can someone please tell me if my expectation is flawed? Is there a
>>>> better/different way to determine to test for move immediate to
>>>> register/memory instruction on X86 other that the existing interface
>>>> MCID::isMoveImmediate()?
>>>>
>>>> Thanks,
>>>>
>>>> Bharadwaj
>>>>
>>>>
>>>> _______________________________________________
>>>> LLVM Developers mailing list
>>>> llvm-dev at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180209/152b999f/attachment.html>


More information about the llvm-dev mailing list