소스 검색

+ RegModifiedBetween

git-svn-id: trunk@22216 -
florian 13 년 전
부모
커밋
ca5078f9cf
1개의 변경된 파일15개의 추가작업 그리고 0개의 파일을 삭제
  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 }
         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;
 
     function labelCanBeSkipped(p: tai_label): boolean;
@@ -255,6 +258,18 @@ unit aoptbase;
   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 *************************** }
 
   Function TAOptBase.RegMaxSize(Reg: TRegister): TRegister;