mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-13 05:29:34 +02:00
* changed create_hlcodegen into a procvar, so that we don't have to insert
hlcgllvm in the uses clause of every unit that calls create_hlcodegen o prevents dependency cycles that can cause llvm codegen units to init before the cpu variants, which is bad since the llvm versions have to override the cpu variants in their init code (+ added checks in the init code that they are in fact initialised later) git-svn-id: branches/debug_eh@40410 -
This commit is contained in:
parent
366bf4294b
commit
4cd6f59bc3
@ -45,8 +45,6 @@ interface
|
||||
procedure a_load_regconst_subsetreg_intern(list: TAsmList; fromsize, subsetsize: tdef; fromreg: tregister; const sreg: tsubsetregister; slopt: tsubsetloadopt); override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -219,11 +217,14 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgaarch64.create;
|
||||
create_codegen;
|
||||
end;
|
||||
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgaarch64;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
@ -46,8 +46,6 @@ interface
|
||||
procedure a_jmp_external_name(list: TAsmList; const externalname: TSymStr); override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -257,7 +255,7 @@ implementation
|
||||
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
if GenerateThumbCode then
|
||||
hlcg:=tthumbhlcgcpu.create
|
||||
@ -268,4 +266,5 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=tbasehlcgarm;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
@ -38,8 +38,6 @@ interface
|
||||
procedure g_intf_wrapper(list: TAsmList; procdef: tprocdef; const labelname: string; ioffset: longint);override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -52,7 +50,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgcpu.create;
|
||||
create_codegen;
|
||||
@ -60,4 +58,5 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgcpu;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
@ -669,7 +669,7 @@ unit hlcgobj;
|
||||
{ class type of high level code generator class (also valid when hlcg is
|
||||
nil, in order to be able to call its virtual class methods) }
|
||||
chlcgobj: thlcgobjclass;
|
||||
|
||||
create_hlcodegen: TProcedure;
|
||||
|
||||
procedure destroy_hlcodegen;
|
||||
|
||||
|
@ -52,8 +52,6 @@ interface
|
||||
procedure g_intf_wrapper(list: TAsmList; procdef: tprocdef; const labelname: string; ioffset: longint);override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -443,7 +441,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgcpu.create;
|
||||
create_codegen;
|
||||
@ -453,4 +451,5 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgcpu;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
@ -89,8 +89,6 @@ interface
|
||||
procedure location_force_mem(list:TAsmList;var l:tlocation;size:tdef);override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -713,7 +711,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgcpu.create;
|
||||
create_codegen;
|
||||
@ -722,4 +720,5 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgcpu;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
@ -234,8 +234,6 @@ uses
|
||||
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
|
||||
const
|
||||
opcmp2if: array[topcmp] of tasmop = (A_None,
|
||||
@ -2553,7 +2551,7 @@ implementation
|
||||
result:=get_call_result_cgpara(pd,forceresdef);
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgjvm.create;
|
||||
create_codegen;
|
||||
@ -2561,4 +2559,5 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgjvm;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
@ -157,9 +157,6 @@ uses
|
||||
procedure set_call_function_result(const list: TAsmList; const pd: tabstractprocdef; const llvmretdef, hlretdef: tdef; const resval: tregister; var retpara: tcgpara);
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -172,6 +169,9 @@ implementation
|
||||
pass_2,procinfo,llvmpi,cpuinfo,cgobj,cgllvm,cghlcpu,
|
||||
cgcpu,hlcgcpu;
|
||||
|
||||
var
|
||||
create_hlcodegen_cpu: TProcedure = nil;
|
||||
|
||||
const
|
||||
topcg2llvmop: array[topcg] of tllvmop =
|
||||
{ OP_NONE OP_MOVE OP_ADD OP_AND OP_DIV OP_IDIV OP_IMUL OP_MUL }
|
||||
@ -2052,7 +2052,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_llvm;
|
||||
begin
|
||||
if not assigned(current_procinfo) or
|
||||
not(po_assembler in current_procinfo.procdef.procoptions) then
|
||||
@ -2064,11 +2064,20 @@ implementation
|
||||
else
|
||||
begin
|
||||
tgobjclass:=orgtgclass;
|
||||
hlcgcpu.create_hlcodegen;
|
||||
create_hlcodegen_cpu;
|
||||
{ todo: handle/remove chlcgobj }
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgllvm;
|
||||
{ this unit must initialise after hlcgobj;
|
||||
message system has not been initialised yet here }
|
||||
if not assigned(create_hlcodegen) then
|
||||
begin
|
||||
writeln('Internalerror 2018052003');
|
||||
halt(1);
|
||||
end;
|
||||
create_hlcodegen_cpu:=create_hlcodegen;
|
||||
create_hlcodegen:=@create_hlcodegen_llvm;
|
||||
end.
|
||||
|
@ -231,6 +231,11 @@ unit llvmpara;
|
||||
end;
|
||||
|
||||
begin
|
||||
if not assigned(paramanager) then
|
||||
begin
|
||||
writeln('Internalerror 2018052006');
|
||||
halt(1);
|
||||
end;
|
||||
{ replace the native parameter manager. Maybe this has to be moved to a
|
||||
procedure like the creations of the code generators, but possibly not since
|
||||
we still call the original paramanager }
|
||||
|
@ -98,6 +98,11 @@ implementation
|
||||
|
||||
|
||||
begin
|
||||
if not assigned(cprocinfo) then
|
||||
begin
|
||||
writeln('Internalerror 2018052005');
|
||||
halt(1);
|
||||
end;
|
||||
cprocinfo:=tllvmprocinfo;
|
||||
end.
|
||||
|
||||
|
@ -183,6 +183,11 @@ implementation
|
||||
|
||||
|
||||
begin
|
||||
if not assigned(tgobjclass) then
|
||||
begin
|
||||
writeln('Internalerror 2018052004');
|
||||
halt(1);
|
||||
end;
|
||||
orgtgclass:=tgobjclass;
|
||||
tgobjclass:=ttgllvm;
|
||||
end.
|
||||
|
@ -47,8 +47,6 @@ interface
|
||||
procedure gen_load_loc_function_result(list: TAsmList; vardef: tdef; const l: tlocation);override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -264,7 +262,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgcpu.create;
|
||||
create_codegen;
|
||||
@ -272,4 +270,5 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgcpu;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
@ -46,8 +46,6 @@ uses
|
||||
procedure a_jmp_external_name(list: TAsmList; const externalname: TSymStr);override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -275,7 +273,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgmips.create;
|
||||
create_codegen;
|
||||
@ -283,4 +281,5 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgmips;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
@ -111,10 +111,6 @@ implementation
|
||||
dbgbase,
|
||||
nbas,ncon,nld,nmem,nutils,
|
||||
tgobj,cgobj,hlcgobj,hlcgcpu
|
||||
{$ifdef llvm}
|
||||
{ override create_hlcodegen from hlcgcpu }
|
||||
, hlcgllvm
|
||||
{$endif}
|
||||
{$ifdef powerpc}
|
||||
, cpupi
|
||||
{$endif}
|
||||
|
@ -40,8 +40,6 @@ interface
|
||||
procedure a_load_regconst_subsetreg_intern(list: TAsmList; fromsize, subsetsize: tdef; fromreg: tregister; const sreg: tsubsetregister; slopt: tsubsetloadopt); override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -111,7 +109,7 @@ implementation
|
||||
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgcpu.create;
|
||||
create_codegen;
|
||||
@ -120,5 +118,6 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgcpu;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
||||
|
@ -41,8 +41,6 @@ type
|
||||
procedure a_load_regconst_subsetreg_intern(list : TAsmList; fromsize, subsetsize: tdef; fromreg: tregister; const sreg: tsubsetregister; slopt: tsubsetloadopt); override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -119,7 +117,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgcpu.create;
|
||||
create_codegen;
|
||||
@ -129,4 +127,5 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgcpu;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
@ -115,10 +115,6 @@ implementation
|
||||
pbase,pstatmnt,pdecl,pdecsub,pexports,pgenutil,pparautl,
|
||||
{ codegen }
|
||||
tgobj,cgbase,cgobj,hlcgobj,hlcgcpu,dbgbase,
|
||||
{$ifdef llvm}
|
||||
{ override create_hlcodegen from hlcgcpu }
|
||||
hlcgllvm,
|
||||
{$endif}
|
||||
ncgutil,
|
||||
optbase,
|
||||
opttail,
|
||||
|
@ -256,5 +256,16 @@ implementation
|
||||
list.concat(Tai_symbol_end.Create(sym));
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgriscv.create;
|
||||
// create_codegen;
|
||||
end;
|
||||
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgriscv;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
||||
|
@ -42,8 +42,6 @@ interface
|
||||
procedure a_jmp_external_name(list: TAsmList; const externalname: TSymStr);override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -135,7 +133,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgcpu.create;
|
||||
create_codegen;
|
||||
@ -143,4 +141,5 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgcpu;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
@ -38,8 +38,6 @@ interface
|
||||
procedure g_intf_wrapper(list: TAsmList; procdef: tprocdef; const labelname: string; ioffset: longint);override;
|
||||
end;
|
||||
|
||||
procedure create_hlcodegen;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -113,7 +111,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure create_hlcodegen;
|
||||
procedure create_hlcodegen_cpu;
|
||||
begin
|
||||
hlcg:=thlcgcpu.create;
|
||||
create_codegen;
|
||||
@ -121,4 +119,5 @@ implementation
|
||||
|
||||
begin
|
||||
chlcgobj:=thlcgcpu;
|
||||
create_hlcodegen:=@create_hlcodegen_cpu;
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user