[llvm-dev] x86 instructions EFLAGS in TableGen

Craig Topper via llvm-dev llvm-dev at lists.llvm.org
Mon Jun 24 21:52:51 PDT 2019


We are using SETcc+TEST when we need to keep a flag live across a call
these days. It's done by pass just looking at the condition code of the
flag consumer and copying that condition code to a SETcc before the call
and the TEST checks if the register written by the SETcc is zero or not
after the call.

~Craig


On Mon, Jun 24, 2019 at 9:25 PM JF Bastien <jfbastien at apple.com> wrote:

> Agreed, I looked at whether it was worth modeling each sub-flag a while
> ago and it didn’t seem worth it back then:
>
> https://github.com/jfbastien/benchmark-x86-flags
>
> Of course it’s a microbenchmark of what I was looking at back then… Might
> still be worth doing. At the time I remember that GCC did really well on
> each sub-flag, but I think they did their magic through simple peepholes
> instead of fully modeling stuff. Maybe we can do more of that first?
>
> Also, IIRC Chandler had looked into EFLAGS some more recently.
>
>
>
> On Jun 24, 2019, at 8:45 PM, Craig Topper via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
> We don’t model the eflags at that level. With maybe the exception of the
> direction flag. It’s just not that useful to the compiler to have the exact
> bits that are changed. And I’m not even sure we would ever emit CLC on our
> own.
>
> On Mon, Jun 24, 2019 at 7:59 PM Antonin Reitz via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> Hello,
>>
>> Here is one question regarding the LLVM TableGen:
>>
>> Which file in the llvm/lib/Target/X86 folder describes how the bits in
>> the EFLAGS register are modified by the x86 instructions? For example,
>> in the "X86InstrInfo.td" file, lines 2134-2135, it says:
>>
>> let SchedRW = [WriteALU], Defs = [EFLAGS], Uses = [EFLAGS] in {
>> def CLC : I<0xF8, RawFrm, (outs), (ins), "clc", []>;
>>
>> So it says the Defs of CLC is EFLAGS, but actually the CLC instruction
>> only clears the "CF" flag in the EFLAGS register and has nothing to do
>> with the other bits of EFLAGS. So which files in this folder describes
>> the fact that CLC only modifies the CF bit?
>>
>> Thank you in advance,
>> Antonin Reitz
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
> --
> ~Craig
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://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/20190624/aa5dae46/attachment.html>


More information about the llvm-dev mailing list