<br><br>2016-12-20 22:14 GMT+08:00 Tom Stellard <<a href="mailto:tom@stellard.net">tom@stellard.net</a>>:<br>><br>> On Tue, Dec 20, 2016 at 11:00:09AM +0800, Ruiling Song wrote:<br>> > Hi,<br>> ><br>> > I am working on a new LLVM target for Intel GPU, which also has same kind<br>> > of scalar/vector register classes used in AMDGPU target. Like for a i32<br>> > virtual register, it will be held in scalar register if its value is<br>> > uniform across a wavefront/warp, otherwise it will be in a vector register.<br>> > Does AMDGPU already done this? I read the code, but I didn't figure out how<br>> > to do this. Anybody has idea on this?<br>> ><br>><br>> In the AMDGPU backend we select everything we can to scalar<br>> instructions, and then after instruction selection, we move<br>> non-uniform values to the vector ALU.  This is done by<br>> the SIFixSGPRCopiesPass, which relies heavily on<br>> SIInstrInfo::moveToVALU().<br><br>Hi Tom,<br><br>I take a look at the code, it looks like a good idea. It really helps me a lot. Thanks Tom! I have a question for the code, why it only pass copy-like instructions as TopInst to moveToALU()? Is there any special reason to do like this? I thought that iterating through all the MIs and fix regClass if needed would be ok. Am I thinking it too simple?<br> <br>- Ruiling<br>><br>> -Tom<br>><br>> > - Ruiling<br><br><br><br><br>-- <br><div dir="ltr">- Ruiling</div><br>