* apply localalignmin/max to local variables for LLVM (fixes webtbs/tw15582)

git-svn-id: trunk@35020 -
This commit is contained in:
Jonas Maebe 2016-11-29 21:54:30 +00:00
parent 7af2663ed1
commit 006c7e1ccf

View File

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