mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-28 21:40:34 +02:00
* apply localalignmin/max to local variables for LLVM (fixes webtbs/tw15582)
git-svn-id: trunk@35020 -
This commit is contained in:
parent
7af2663ed1
commit
006c7e1ccf
@ -56,6 +56,7 @@ unit tgllvm;
|
||||
ttgllvm = class(ttgobj)
|
||||
protected
|
||||
procedure alloctemp(list: TAsmList; size: asizeint; alignment: shortint; temptype: ttemptype; def: tdef; fini: boolean; out ref: treference); override;
|
||||
procedure gethltempintern(list: TAsmList; def: tdef; alignment: shortint; forcesize: asizeint; temptype: ttemptype; out ref: treference);
|
||||
public
|
||||
alloclist: tasmlist;
|
||||
|
||||
@ -122,6 +123,17 @@ implementation
|
||||
current_filepos:=oldfileinfo;
|
||||
end;
|
||||
|
||||
procedure ttgllvm.gethltempintern(list: TAsmList; def: tdef; alignment: shortint; forcesize: asizeint; temptype: ttemptype; out ref: treference);
|
||||
begin
|
||||
{ empty array (can happen for arrayconstructors) -> don't request the
|
||||
size, as that will internalerror }
|
||||
if (def.typ=arraydef) and
|
||||
(tarraydef(def).highrange<tarraydef(def).lowrange) then
|
||||
alloctemp(list,0,alignment,temptype,def,false,ref)
|
||||
else
|
||||
alloctemp(list,def.size,alignment,temptype,def,false,ref);
|
||||
end;
|
||||
|
||||
|
||||
function ttgllvm.istemp(const ref: treference): boolean;
|
||||
begin
|
||||
@ -153,19 +165,14 @@ implementation
|
||||
|
||||
procedure ttgllvm.getlocal(list: TAsmList; size: asizeint; alignment: shortint; def: tdef; var ref: treference);
|
||||
begin
|
||||
gethltemp(list,def,size,tt_persistent,ref);
|
||||
alignment:=used_align(alignment,current_settings.alignment.localalignmin,current_settings.alignment.localalignmax);
|
||||
gethltempintern(list,def,alignment,size,tt_persistent,ref);
|
||||
end;
|
||||
|
||||
|
||||
procedure ttgllvm.gethltemp(list: TAsmList; def: tdef; forcesize: asizeint; temptype: ttemptype; out ref: treference);
|
||||
begin
|
||||
{ empty array (can happen for arrayconstructors) -> don't request the
|
||||
size, as that will internalerror }
|
||||
if (def.typ=arraydef) and
|
||||
(tarraydef(def).highrange<tarraydef(def).lowrange) then
|
||||
alloctemp(list,0,def.alignment,temptype,def,false,ref)
|
||||
else
|
||||
alloctemp(list,def.size,def.alignment,temptype,def,false,ref);
|
||||
gethltempintern(list,def,def.alignment,forcesize,tt_persistent,ref);
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user