<div dir="ltr"><div class="gmail_extra">OK, DAG...</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 12, 2014 at 5:22 PM, Tim Northover <span dir="ltr"><<a href="mailto:t.p.northover@gmail.com" target="_blank">t.p.northover@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":4zy" class="a3s" style="overflow:hidden">Assuming that's OK, onto the DAG level. What I'd like to do is a<br>

little odd, but makes sense I think:<br>
<br>
1. Keep ATOMIC_CMP_SWAP with its current semantics: strong <span class="il">cmpxchg</span>,<br>
returning just the loaded value.<br>
2. Add ATOMIC_CMP_SWAP_WITH_SUCCESS (better name suggestions welcome)<br>
that has a second i1 value (initially) as with the IR instruction.<br>
It's still a strong <span class="il">cmpxchg</span>.<br>
3. Expanding ATOMIC_CMP_SWAP_WITH_SUCCESS will yield an<br>
ATOMIC_CMP_SWAP and a SETCC.<br>
<br>
The advantage of this scheme is that existing targets can remain<br>
mostly unchanged if they're not interested in the extra work required.<br>
<br>
LL/SC architectures will be assumed to move over to something like the<br>
IR level pass already used by ARM if they want <span class="il">weak</span> support (or they<br>
can add <span class="il">weak</span> DAG nodes if they're masochists). x86 can switch its<br>
Custom handling over to the new ATOMIC_CMP_SWAP_WITH_SUCCESS to get<br>
rid of the vast majority of redundant comparisons coming out of C++<br>
code with relative ease.</div></blockquote></div><br>So, I see where you're going here, but I'm curious -- why not just switch ATOMIC_CMP_SWAP to have a second i1 value, and still be strong? Is this *just* to support expanding? I wonder if that's really useful rather than just lowering it directly on the various targets....</div>
</div>