Browse Source

+ Peephole optimizer MovPush2Push

git-svn-id: trunk@38195 -
florian 7 years ago
parent
commit
980c689d37
1 changed files with 16 additions and 0 deletions
  1. 16 0
      compiler/i8086/aoptcpu.pas

+ 16 - 0
compiler/i8086/aoptcpu.pas

@@ -118,6 +118,22 @@ unit aoptcpu;
                         asml.remove(hp2);
                         hp2.free;
                         result:=true;
+                      end
+                    else if MatchInstruction(p,A_MOV,[S_W]) and
+                      MatchOpType(taicpu(p),top_reg,top_reg) and
+                      GetNextInstruction(p, hp1) and
+                      MatchInstruction(hp1,A_PUSH,[S_W]) and
+                      MatchOperand(taicpu(p).oper[1]^,taicpu(hp1).oper[0]^) and
+                      assigned(FindRegDealloc(taicpu(hp1).oper[0]^.reg,tai(hp1.Next))) then
+                      begin
+                        DebugMsg('Peephole optimizer MovPush2Push',p);
+                        taicpu(hp1).loadreg(0,taicpu(p).oper[0]^.reg);
+                        { take care of the register (de)allocs following p }
+                        UpdateUsedRegs(tai(p.next));
+                        asml.remove(p);
+                        p.free;
+                        p:=hp1;
+                        result:=true;
                       end;
                   end;
                 A_SUB: