<div dir="ltr"><div>In LLVM 3.6,</div><div><br></div><div> We have an instruction that uses a register class that is defined of several different reg classes. In 3.4 this works fine but in 3.6 this is broken.</div><div><br></div><div>For example, I have a mov instruction. mov can be executed between different register types (ie gpr, index, base, etc..)</div><div><br></div><div>In 3.4, we would get something like this:</div><div><br></div><div>mov @a, %b1 // moving this immediate to a base register, which is what we want</div><div><br></div><div>In 3.6, we now get this:</div><div><br></div><div>mov @a, %r0  // r0 = gpr</div><div>mov %r0, %b1 // b1 = base reg</div><div><br></div><div>The register class looks like this:</div><div><br></div><div>def ARegs : RegisterClass<"us", [i16], i16, (add GPRRegs, IndexRegs, BaseRegs)>;</div><div><br></div><div>I have absolutely no idea why this is not matching any longer? </div><div><br></div><div>The fix here is to define an MI with explicit single register class (ie it only allows PTRRegs as the destination).</div><div><br></div><div>This must be an issue with something else and not the tablegen but if that was the case I'm not sure. Anyway help would be great, what should I be looking at here?</div><div><br></div><div>Thanks.</div></div>