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

Craig Topper via llvm-dev llvm-dev at lists.llvm.org
Fri Feb 9 13:29:49 PST 2018

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.


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/24753225/attachment-0001.html>

More information about the llvm-dev mailing list