Bläddra i källkod

+ RegModifiedBetween

git-svn-id: trunk@22216 -
florian 13 år sedan
förälder
incheckning
ca5078f9cf
1 ändrade filer med 15 tillägg och 0 borttagningar
  1. 15 0
      compiler/aoptbase.pas

+ 15 - 0
compiler/aoptbase.pas

@@ -91,6 +91,9 @@ unit aoptbase;
 
 
         { returns true if reg is used by any instruction between p1 and p2 }
         { returns true if reg is used by any instruction between p1 and p2 }
         Function RegUsedBetween(reg: TRegister; p1, p2: tai): Boolean;
         Function RegUsedBetween(reg: TRegister; p1, p2: tai): Boolean;
+
+        { returns true if reg is modified by any instruction between p1 and p2 }
+        function RegModifiedBetween(reg: TRegister; p1, p2: tai): Boolean;
     end;
     end;
 
 
     function labelCanBeSkipped(p: tai_label): boolean;
     function labelCanBeSkipped(p: tai_label): boolean;
@@ -255,6 +258,18 @@ unit aoptbase;
   end;
   end;
 
 
 
 
+  Function TAOptBase.RegModifiedBetween(reg : TRegister;p1,p2 : tai) : Boolean;
+  Begin
+    Result:=false;
+    while assigned(p1) and assigned(p2) and GetNextInstruction(p1,p1) and (p1<>p2) do
+      if RegModifiedByInstruction(reg,p1) then
+        begin
+          Result:=true;
+          exit;
+        end;
+  end;
+
+
   { ******************* Processor dependent stuff *************************** }
   { ******************* Processor dependent stuff *************************** }
 
 
   Function TAOptBase.RegMaxSize(Reg: TRegister): TRegister;
   Function TAOptBase.RegMaxSize(Reg: TRegister): TRegister;