<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><p style="margin: 0;"><span style="font-family: "Courier New";">Hello,</span><span style="font-family: "Courier New";"> </span></p><div id="isForwardContent"><div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">I am modifying the new committed pass "aarch64-mi-peephole-opt", but get unexpected errors.</span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">My code:</span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">  const TargetRegisterClass *RC =<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">      (RegSize == 32) ? &AArch64::GPR32spRegClass : &AArch64::GPR64spRegClass;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">  Register DstReg = MI.getOperand(0).getReg();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">  Register SrcReg = MI.getOperand(1).getReg();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">  Register TmpReg = MRI->createVirtualRegister(RC);</span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">  BuildMI(*MBB, MI, DL, TII->get(AArch64::SUBXri), TmpReg)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">      .addReg(SrcReg)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">      .addImm(Imm)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">      .addImm(12);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">But when I tried to compile a simple function with
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">"llc a.ll -mtriple=aarch64 -verify-machineinstrs", I got errors like<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">*** Bad machine code: Illegal virtual register for instruction ***<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">- function:    add_two_parts_imm_i64<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">- basic block: %bb.0  (0x561f681b0410)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">- instruction: %3:gpr64common = SUBXri %0:gpr64, 2730, 12<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">- operand 1:   %0:gpr64<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">Expected a GPR64sp register, but got a GPR64 register<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">LLVM ERROR: Found 1 machine code errors.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">But if I changed to Opcode from SUBXri to ANDXri, then the errors were eliminated.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New""><o:p> </o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New""><o:p>What is difference between ANDXri and SUBXri? (also ADDXri has the same errors)</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">What should I do to avoid the errors with Opcode SUBXri/ADDXri ?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New"">Ben Shi<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Courier New""><o:p> </o:p></span></p>
</div>


</div><style></style></div>