* fix wrong comparisons in trgobj.conservative to enable better coalescing,

before this patch, k was calculated wrong most of the time

git-svn-id: trunk@31439 -
This commit is contained in:
florian 2015-08-28 18:49:04 +00:00
parent d71a3d0533
commit 199b1861d6

View File

@ -21,10 +21,11 @@
{$i fpcdefs.inc}
{ $define DEBUG_REGALLOC}
{ Allow duplicate allocations, can be used to get the .s file written }
{ $define ALLOWDUPREG}
unit rgobj;
interface
@ -577,9 +578,9 @@ unit rgobj;
insert_regalloc_info_all(list);
ibitmap:=tinterferencebitmap.create;
generate_interference_graph(list,headertai);
{$ifdef DEBUG_SSA}
{$ifdef DEBUG_REGALLOC}
writegraph(rtindex);
{$endif DEBUG_SSA}
{$endif DEBUG_REGALLOC}
inc(rtindex);
{ Don't do the real allocation when -sr is passed }
if (cs_no_regalloc in current_settings.globalswitches) then
@ -1116,7 +1117,7 @@ unit rgobj;
for i:=1 to adj^.length do
begin
n:=adj^.buf^[i-1];
if flags*[ri_coalesced,ri_selected]=[] then
if reginfo[n].flags*[ri_coalesced,ri_selected]=[] then
begin
supregset_include(done,n);
if reginfo[n].degree>=usable_registers_cnt then
@ -1131,7 +1132,7 @@ unit rgobj;
n:=adj^.buf^[i-1];
if not supregset_in(done,n) and
(reginfo[n].degree>=usable_registers_cnt) and
(reginfo[u].flags*[ri_coalesced,ri_selected]=[]) then
(reginfo[n].flags*[ri_coalesced,ri_selected]=[]) then
inc(k);
end;
conservative:=(k<usable_registers_cnt);