瀏覽代碼

+ Addi2Nop optimization

florian 8 月之前
父節點
當前提交
c45d03851a
共有 1 個文件被更改,包括 16 次插入1 次删除
  1. 16 1
      compiler/riscv/aoptcpurv.pas

+ 16 - 1
compiler/riscv/aoptcpurv.pas

@@ -265,6 +265,21 @@ implementation
       hp1: tai;
     begin
       result:=false;
+      {
+        Get rid of
+          addi x, x, 0
+      }
+      if (taicpu(p).ops=3) and
+        (taicpu(p).oper[2]^.typ=top_const) and
+        (taicpu(p).oper[2]^.val=0) and
+        MatchOperand(taicpu(p).oper[0]^,taicpu(p).oper[1]^) then
+        begin
+          DebugMsg('Peephole Addi2Nop performed', p);
+
+          RemoveInstr(p);
+
+          result:=true;
+        end
       {
         Changes
           addi x, y, #
@@ -273,7 +288,7 @@ implementation
         To
           addi z, y, #+#
       }
-      if (taicpu(p).ops=3) and
+      else if (taicpu(p).ops=3) and
          (taicpu(p).oper[2]^.typ=top_const) and
          GetNextInstructionUsingReg(p, hp1, taicpu(p).oper[0]^.reg) and
          MatchInstruction(hp1,[A_ADDI{$ifdef riscv64},A_ADDIW{$endif}]) and