<div dir="ltr">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.<div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jun 24, 2019 at 9:25 PM JF Bastien <<a href="mailto:jfbastien@apple.com">jfbastien@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;">Agreed, I looked at whether it was worth modeling each sub-flag a while ago and it didn’t seem worth it back then:<blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><a href="https://github.com/jfbastien/benchmark-x86-flags" target="_blank">https://github.com/jfbastien/benchmark-x86-flags</a></div></blockquote><div>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?</div><div><br></div><div>Also, IIRC Chandler had looked into EFLAGS some more recently.</div><div><br></div><div><br><div><br><blockquote type="cite"><div>On Jun 24, 2019, at 8:45 PM, Craig Topper via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="gmail-m_-2707317188610955289Apple-interchange-newline"><div><div><div dir="auto">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.</div></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jun 24, 2019 at 7:59 PM Antonin Reitz via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello,<br>
<br>
Here is one question regarding the LLVM TableGen:<br>
<br>
Which file in the llvm/lib/Target/X86 folder describes how the bits in <br>
the EFLAGS register are modified by the x86 instructions? For example, <br>
in the "X86InstrInfo.td" file, lines 2134-2135, it says:<br>
<br>
let SchedRW = [WriteALU], Defs = [EFLAGS], Uses = [EFLAGS] in {<br>
def CLC : I<0xF8, RawFrm, (outs), (ins), "clc", []>;<br>
<br>
So it says the Defs of CLC is EFLAGS, but actually the CLC instruction <br>
only clears the "CF" flag in the EFLAGS register and has nothing to do <br>
with the other bits of EFLAGS. So which files in this folder describes <br>
the fact that CLC only modifies the CF bit?<br>
<br>
Thank you in advance,<br>
Antonin Reitz<br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>-- <br><div dir="ltr" class="gmail-m_-2707317188610955289gmail_signature">~Craig</div>
_______________________________________________<br>LLVM Developers mailing list<br><a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br></div></blockquote></div><br></div></div></blockquote></div>