* 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:
Jonas Maebe 2018-11-29 21:31:15 +00:00
parent 366bf4294b
commit 4cd6f59bc3
20 changed files with 67 additions and 50 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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;

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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 }

View File

@ -98,6 +98,11 @@ implementation
begin
if not assigned(cprocinfo) then
begin
writeln('Internalerror 2018052005');
halt(1);
end;
cprocinfo:=tllvmprocinfo;
end.

View File

@ -183,6 +183,11 @@ implementation
begin
if not assigned(tgobjclass) then
begin
writeln('Internalerror 2018052004');
halt(1);
end;
orgtgclass:=tgobjclass;
tgobjclass:=ttgllvm;
end.

View File

@ -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.

View File

@ -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.

View File

@ -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}

View File

@ -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.

View File

@ -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.

View File

@ -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,

View File

@ -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.

View File

@ -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.

View File

@ -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.