Prechádzať zdrojové kódy

* coalesce if either u or v are precolored, tested on arm and i386, it gives for both a small advantage

git-svn-id: trunk@21812 -
florian 13 rokov pred
rodič
commit
9833f642fe
1 zmenil súbory, kde vykonal 7 pridanie a 2 odobranie
  1. 7 2
      compiler/rgobj.pas

+ 7 - 2
compiler/rgobj.pas

@@ -1,5 +1,5 @@
 {
-    Copyright (c) 1998-2002 by Florian Klaempfl
+    Copyright (c) 1998-2012 by the Free Pascal team
 
     This unit implements the base class for the register allocator
 
@@ -192,6 +192,7 @@ unit rgobj;
         reginfo           : PReginfo;
         usable_registers_cnt : word;
         usable_registers  : array[0..maxcpuregister] of tsuperregister;
+        usable_register_set : tcpuregisterset;
         ibitmap           : Tinterferencebitmap;
         spillednodes,
         simplifyworklist,
@@ -399,7 +400,10 @@ unit rgobj;
          // default value set by constructor
          // fillchar(usable_registers,sizeof(usable_registers),0);
          for i:=low(Ausable) to high(Ausable) do
-           usable_registers[i]:=Ausable[i];
+           begin
+             usable_registers[i]:=Ausable[i];
+             include(usable_register_set,Ausable[i]);
+           end;
          usable_registers_cnt:=high(Ausable)+1;
          { Initialize Worklists }
          spillednodes.init;
@@ -996,6 +1000,7 @@ unit rgobj;
 
       begin
         ok:=(t<first_imaginary) or
+            ((r<first_imaginary) and (r in usable_register_set)) or
             (reginfo[t].degree<usable_registers_cnt) or
             ibitmap[r,t];
       end;