Przeglądaj źródła

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

git-svn-id: trunk@35020 -
Jonas Maebe 8 lat temu
rodzic
commit
006c7e1ccf
1 zmienionych plików z 15 dodań i 8 usunięć
  1. 15 8
      compiler/llvm/tgllvm.pas

+ 15 - 8
compiler/llvm/tgllvm.pas

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