<div dir="ltr">Hi All,<div><br></div><div>I'm writing to introduce and attract attention to the proposed change that was published for the review several month ago.</div><div><br></div><div><a href="https://reviews.llvm.org/D35267">https://reviews.llvm.org/D35267</a><br></div><div><br></div><div>I also tried to contact code owners explicitly but had no reply yet.</div><div><br></div><div>Brief story:</div><div><br></div><div><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px">In SIMT architectures VGPRs are high-demand resource. Same time significant part of the computations operate on naturally scalar data.<br style="margin-top:0px">That computations can be performed by the SALU and save a lot of VGPRs. This is intended to increase occupancy.<br>Also, splitting the data flow to scalar and vector parts provide more flexibility to the instruction scheduler that can increase HW utilization.</p><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px">On GPU targets we say that instruction is vector if it operates on VGPR operands each lane of which contains different values. <br style="margin-top:0px">We say the instruction is scalar if it operates on SGPR that is shared among the all threads in the warp.</p><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px">Divergence Analysis was introduced by F. Pereira & Co in 2013 and now is a part of LLVM core analysis stuff.<br style="margin-top:0px">Unfortunately it's results are mostly useless because there is no way to inform instruction selection DAG about the divergence property of the concrete instruction.<br>Literally, IR operation that has not divergent operands produces uniform result and should be selected to scalar instruction.</p><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px">We used to pass divergence data for memory access instructions through metadata just because MemSDNode has memory operand that refer the IR.<br style="margin-top:0px">This approach is restricted to memory accesses only. That's why we'd need another pass working on the machine code that propagates divergence property<br>from the value load to computations and finally to the result store. Except the fact that we'd need one more pass,<br>this pass would repeat on the machine instructions same algorithm that was already done by the divergence analysis over IR.</p><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px">Since SDNode flags field was recently enhanced to 16 bits and there are 5 bits unoccupied yet we have a chance to use them for passing divergence data to instruction selection.</p><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px">This change introduce possible approach to the implementation of such enhancement.<br style="margin-top:0px">It passes DA data for load instructions only. If accepted we'll go ahead and add same code to handle other instructions as well.<br></p><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px">I'd appreciate any advises and/or opinions.</p><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px">Thanks in advance.</p><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px">Alexander.</p><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px"><br></p></div></div>