mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 21:19:31 +02:00
* support top_para in trgllvm.get_spill_temp()
git-svn-id: trunk@30426 -
This commit is contained in:
parent
e750678f37
commit
e12dff9a5e
@ -161,8 +161,9 @@ implementation
|
||||
procedure trgllvm.get_spill_temp(list: TAsmlist; spill_temps: Pspill_temp_list; supreg: tsuperregister);
|
||||
var
|
||||
supstart: tai;
|
||||
i: longint;
|
||||
i, paracnt: longint;
|
||||
def: tdef;
|
||||
callpara: pllvmcallpara;
|
||||
begin
|
||||
supstart:=live_start[supreg];
|
||||
if supstart.typ<>ait_llvmins then
|
||||
@ -172,13 +173,29 @@ implementation
|
||||
def:=nil;
|
||||
for i:=0 to taillvm(supstart).ops-1 do
|
||||
begin
|
||||
if (taillvm(supstart).oper[i]^.typ=top_reg) and
|
||||
(getregtype(taillvm(supstart).oper[i]^.reg)=regtype) and
|
||||
(getsupreg(taillvm(supstart).oper[i]^.reg)=supreg) then
|
||||
begin
|
||||
def:=taillvm(supstart).spilling_get_reg_type(i);
|
||||
break
|
||||
end;
|
||||
case taillvm(supstart).oper[i]^.typ of
|
||||
top_reg:
|
||||
if (getregtype(taillvm(supstart).oper[i]^.reg)=regtype) and
|
||||
(getsupreg(taillvm(supstart).oper[i]^.reg)=supreg) then
|
||||
begin
|
||||
def:=taillvm(supstart).spilling_get_reg_type(i);
|
||||
break
|
||||
end;
|
||||
top_para:
|
||||
begin
|
||||
for paracnt:=0 to taillvm(supstart).oper[i]^.paras.count-1 do
|
||||
begin
|
||||
callpara:=pllvmcallpara(taillvm(supstart).oper[i]^.paras[paracnt]);
|
||||
if (callpara^.loc in [LOC_REGISTER,LOC_FPUREGISTER,LOC_MMREGISTER]) and
|
||||
(getregtype(callpara^.reg)=regtype) and
|
||||
(getsupreg(callpara^.reg)=supreg) then
|
||||
begin
|
||||
def:=callpara^.def;
|
||||
break
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if not assigned(def) then
|
||||
internalerror(2013110702);
|
||||
|
@ -194,8 +194,8 @@ unit rgobj;
|
||||
|
||||
function addreginfo(var regs: tspillregsinfo; const r: tsuperregisterset; reg: tregister; operation: topertype): boolean;
|
||||
function instr_get_oper_spilling_info(var regs: tspillregsinfo; const r: tsuperregisterset; instr: tai_cpu_abstract_sym; opidx: longint): boolean; virtual;
|
||||
procedure substitute_spilled_registers(const regs: tspillregsinfo; instr: tai_cpu_abstract_sym; opidx: longint);
|
||||
procedure try_replace_reg(const regs: tspillregsinfo; var reg: tregister; useloadreg: boolean); virtual;
|
||||
procedure substitute_spilled_registers(const regs: tspillregsinfo; instr: tai_cpu_abstract_sym; opidx: longint); virtual;
|
||||
procedure try_replace_reg(const regs: tspillregsinfo; var reg: tregister; useloadreg: boolean);
|
||||
function instr_spill_register(list:TAsmList;
|
||||
instr:tai_cpu_abstract_sym;
|
||||
const r:Tsuperregisterset;
|
||||
|
Loading…
Reference in New Issue
Block a user