<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hi Eli,</div><div class=""><br class=""></div><div class="">Thanks for your feedbacks.</div><div class=""><br class=""></div><div class="">Answers inlined.</div><br class=""><div><blockquote type="cite" class=""><div class="">On Jun 22, 2016, at 4:21 PM, Eli Friedman <<a href="mailto:eli.friedman@gmail.com" class="">eli.friedman@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra">On Wed, Jun 22, 2016 at 2:39 PM, Tim Northover<span class="Apple-converted-space"> </span><span dir="ltr" class=""><<a href="mailto:t.p.northover@gmail.com" target="_blank" class="">t.p.northover@gmail.com</a>></span><span class="Apple-converted-space"> </span>wrote:<br class=""><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><span class="">> I'm not sure if this is really going to work the way you want. On x86 with<br class="">> AVX (but not AVX2), is LOAD <8 x i32> legal?  I mean, you could declare that<br class="">> it is... but you're going to end up with a bunch of vector shuffles trying<br class="">> to legalize ADD <8 x i32>. You could clean it up afterwards with some sort<br class="">> of optimization pass to split vectors where it's profitable... but it gets<br class="">> complicated when you start dealing with values with multiple uses and PHI<br class="">> nodes.<br class=""><br class=""></span>This still seems to be something for RegBankSelect to me. It's going<br class="">to see something like<br class=""><br class="">   <span class="Apple-converted-space"> </span>%0(256) = G_LOAD <4 x i32> ...<br class="">   <span class="Apple-converted-space"> </span>%1(128) = G_EXTRACT <2 x i32> %0, 0<br class="">   <span class="Apple-converted-space"> </span>%2(128) = G_EXTRACT <2 x i32> %0, 1<br class="">   <span class="Apple-converted-space"> </span>%3(128) = G_ADD <2 x i32> %1, ...<br class="">   <span class="Apple-converted-space"> </span>%4(128) = G_ADD <2 x i32> %2, ...<br class="">   <span class="Apple-converted-space"> </span>%5(256) = G_SEQ <4 x i32> %3 %4<br class=""><br class="">and ought to have the cost model necessary to decide that (XMM, XMM)<br class="">is the best register class (in whatever representation it has, an<br class="">extension of the .td RegClasses with tuples) rather than YMM.<br class=""></blockquote><br class="">We run RegBankSelect after legalization?  Then what happens?  Presumably, if you have a load or arithmetic operation whose result ends up in (XMM, XMM), you then want to split it so you have two operations which each end up in one xmm register... then you have a bunch of new operations which haven't been through legalization and register bank selection, so you need to run legalization and RegBankSelect from the top again? </div></div></div></div></blockquote><div><br class=""></div><div>No, we do not run the full legalizer. RegBankSelect creates very specific operations (glorified copies per say, this includes extract and build_sequence) and the plan is to apply the legalizer helper on them.</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote">Or do we have some sort of restricted post-RegBankSelect legalizer which doesn't require a second pass?<br class=""></div></div></div></div></blockquote><div><br class=""></div>No, see my previous answer.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><br class="">If we're doing custom lowering before RegBankSelect, we could end up being effectively forced to choose a bank during legalization, without the benefit of a cost model. </div></div></div></div></blockquote><div><br class=""></div><div>Even custom lowered instructions can be remapped. The target can specify alternative instructions mapping for every instruction, generic or not.</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote">For example, if you need to custom-lower an <8 x i32> shuffle on AVX, the result could look substantially different depending on whether the result needs to be in on YMM or two XMM registers.  Things become even more awkward if you don't distinguish between integer and vector registers on x86; for example, if I have an i64 add on x86-32, does it need to be widened to <2 x i64> or split into two i32 ADDE operations?<br class=""></div></div></div></div></blockquote><div><br class=""></div><div>I don’t understand the example. Also how is this different from what we currently do?</div><div><br class=""></div><div>Cheers,</div><div>-Quentin</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_extra"><div class="gmail_quote"><br class=""></div><div class="gmail_quote">-Eli</div></div></div></div></blockquote></div><br class=""></body></html>