<div dir="ltr">Hi,<br>I have a special hardware, it have two different ALU units, use different registers. It's hard for DAGIsel to map i32 ISD::ADD to different ALU because LLVM does not aware register class's differ.<br><br>  def 16rr : ABCInstALU0rr<funct4, 0b0, <b>OPC_ALU0</b>,<br>                               (outs<b> GPR_OUT</b>:$vx), (ins <b>GPR:</b>$rs1, <b>GPR:</b>$rs2),<br>                               !strconcat(opcodestr,".S16"), "$rs1, $rs2, $vx",<br>                               [(set i16:$vx, (OpNode i16:$rs1, i16:$rs2))]>;<br><br>  def 16rr : ABCInstALU1rr<funct4, 0b0, <b>OPC_ALU1</b>,<br>                               (outs <b>SGPR16</b>:$vx), (ins <b>SGPR16</b>:$rs1, <b>SGPR16</b>:$rs2),<br>                               !strconcat(opcodestr,".S16"), "$rs1, $rs2, $vx",<br>                               [(set i16:$vx, (OpNode i16:$rs1, i16:$rs2))]>;<br><div><br></div><div>5    for(i=0; i<loopNum; i++ )</div>6                 a[i+offset] = b;<br>line 5: i++            have to run on ALU0<br><div>line 6:  i+offset    have to run on ALU1</div><br><div>It's hard for me to add context analysis during DAG because that is function scope analysis and also hard to change reigster class(Is there any API for register class update? ). <br></div><div><br></div><div>So I think maybe I should introduce MVT::i16s type and add a pass just before creating SDNode to complete context analysis and update MVT type to solve this issue. What's your suggestion? </div><br><br>-- <br>Best Regards,<br>Yu Rong Tan</div>