<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:1.2em 0px!important">I plan on refactoring <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">LegalizeIntegerTypes.cpp</code> to make it more readable and less modular. After this I will submit a patch which adds a <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Split</code> legalization action which always expands by splitting, and leaving <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Expand</code> with its current meaning and not breaking any existing code. I believe it would be much more meaningful talking about this change with a prototype.</p>
<div title="MDH:SSBwbGFuIG9uIHJlZmFjdG9yaW5nIGBMZWdhbGl6ZUludGVnZXJUeXBlcy5jcHBgIHRvIG1ha2Ug
aXQgbW9yZSByZWFkYWJsZSBhbmQgbGVzcyBtb2R1bGFyLiBBZnRlciB0aGlzIEkgd2lsbCBzdWJt
aXQgYSBwYXRjaCB3aGljaCBhZGRzIGEgYFNwbGl0YCBsZWdhbGl6YXRpb24gYWN0aW9uIHdoaWNo
IGFsd2F5cyBleHBhbmRzIGJ5IHNwbGl0dGluZywgYW5kIGxlYXZpbmcgYEV4cGFuZGAgd2l0aCBp
dHMgY3VycmVudCBtZWFuaW5nIGFuZCBub3QgYnJlYWtpbmcgYW55IGV4aXN0aW5nIGNvZGUuIEkg
YmVsaWV2ZSBpdCB3b3VsZCBiZSBtdWNoIG1vcmUgbWVhbmluZ2Z1bCB0YWxraW5nIGFib3V0IHRo
aXMgY2hhbmdlIHdpdGggYSBwcm90b3R5cGUu" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 13, 2015 at 8:41 PM, Dylan McKay <span dir="ltr"><<a href="mailto:dylanmckay34@gmail.com" target="_blank">dylanmckay34@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 dir="ltr"><div><span class=""><blockquote style="margin:1.2em 0px;border-left-width:4px;border-left-style:solid;border-left-color:rgb(221,221,221);padding:0px 1em;color:rgb(119,119,119);quotes:none">
<p style="margin:1.2em 0px!important"> It’s faked by saying 64-bit add is legal and the expand to add + carry is handled during instruction selection, which works and also makes addressing mode matching easier.</p>
</blockquote>
</span><p style="margin:1.2em 0px!important">This is basically what we do currently. So this proposal (or at least something similar) would also help the AMDGPU backend?</p>
<div title="MDH:Jmd0O8KgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTIuODAwMDAwMTkwNzM0OXB4OyI+Jm5ic3A7
SXTigJlzIGZha2VkIGJ5IHNheWluZyA2NC1iaXQgYWRkIGlzIGxlZ2FsIGFuZCB0aGUgZXhwYW5k
IHRvIGFkZCArIGNhcnJ5IGlzIGhhbmRsZWQgZHVyaW5nIGluc3RydWN0aW9uIHNlbGVjdGlvbiwg
d2hpY2ggd29ya3MgYW5kIGFsc28gbWFrZXMgYWRkcmVzc2luZyBtb2RlIG1hdGNoaW5nIGVhc2ll
ci48L3NwYW4+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMi44MDAwMDAxOTA3MzQ5cHg7
Ij48YnI+PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTIuODAwMDAw
MTkwNzM0OXB4OyI+VGhpcyBpcyBiYXNpY2FsbHkgd2hhdCB3ZSBkbyBjdXJyZW50bHkuIFNvIHRo
aXMgcHJvcG9zYWwgKG9yIGF0IGxlYXN0IHNvbWV0aGluZyBzaW1pbGFyKSB3b3VsZCBhbHNvIGhl
bHAgdGhlIEFNREdQVSBiYWNrZW5kPzwvc3Bhbj48L2Rpdj4=" style="min-height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 13, 2015 at 4:21 PM, Matt Arsenault <span dir="ltr"><<a href="mailto:arsenm2@gmail.com" target="_blank">arsenm2@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 style="word-wrap:break-word"><span><br><div><blockquote type="cite"><div>On Aug 12, 2015, at 8:36 PM, Dylan McKay <<a href="mailto:dylanmckay34@gmail.com" target="_blank">dylanmckay34@gmail.com</a>> wrote:</div><br><div><ul style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;margin:1.2em 0px;padding-left:2em"><li style="margin:0.5em 0px">16-bit addition is illegal, should expand into an add and an add with carry</li><li style="margin:0.5em 0px">A few operations support 16-bit operands - the 16-bit<span> </span><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;display:inline;background-color:rgb(248,248,248)">DREGS</code><span> </span>register class</li></ul></div></blockquote></div></span>This sounds like basically the same situation AMDGPU has with 64-bit integers. Since you have a 16-bit register class, you avoid terrible problems by not having i16 be a legal type. There is no 64-bit add, and needs to be expanded into 32-bit add + carry. There are fewer 64-bit operations available, but some are. It’s faked by saying 64-bit add is legal and the expand to add + carry is handled during instruction selection, which works and also makes addressing mode matching easier.<div><br></div><div><br></div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>