Bläddra i källkod

* fixed LLVM register allocator after r46199

git-svn-id: trunk@46212 -
Jonas Maebe 5 år sedan
förälder
incheckning
3047ce71bc
2 ändrade filer med 6 tillägg och 1 borttagningar
  1. 5 0
      compiler/llvm/rgllvm.pas
  2. 1 1
      compiler/rgobj.pas

+ 5 - 0
compiler/llvm/rgllvm.pas

@@ -72,6 +72,11 @@ implementation
          inherited;
          { tell the generic register allocator to generate SSA spilling code }
          ssa_safe:=true;
+         { all registers are "usable" for us; we only care about SSA form. This
+           prevents the register allocator from trying to spill every single
+           register (because our "usable registers" array contains just one,
+           dummy, register) }
+         usable_registers_cnt:=high(usable_registers_cnt);
        end;
 
      procedure trgllvm.do_register_allocation(list: TAsmList; headertai: tai);

+ 1 - 1
compiler/rgobj.pas

@@ -226,11 +226,11 @@ unit rgobj;
       strict protected
         { Highest register allocated until now.}
         reginfo           : PReginfo;
+        usable_registers_cnt : word;
       private
         int_live_range_direction: TRADirection;
         { First imaginary register.}
         first_imaginary   : Tsuperregister;
-        usable_registers_cnt : word;
         usable_registers  : array[0..maxcpuregister] of tsuperregister;
         usable_register_set : tcpuregisterset;
         ibitmap           : Tinterferencebitmap;