Răsfoiți Sursa

+ support for LLVM 3.8 and LLVM 3.9 IR to the llvm assembler writer

git-svn-id: trunk@35003 -
Jonas Maebe 8 ani în urmă
părinte
comite
4d951780d1
2 a modificat fișierele cu 17 adăugiri și 3 ștergeri
  1. 9 2
      compiler/llvm/agllvm.pas
  2. 8 1
      compiler/llvm/llvminfo.pas

+ 9 - 2
compiler/llvm/agllvm.pas

@@ -1027,6 +1027,7 @@ implementation
       var
       var
         hp2: tai;
         hp2: tai;
         s: string;
         s: string;
+        sstr: TSymStr;
         i: longint;
         i: longint;
         ch: ansichar;
         ch: ansichar;
       begin
       begin
@@ -1230,9 +1231,15 @@ implementation
               writer.AsmWrite(' = alias ');
               writer.AsmWrite(' = alias ');
               WriteLinkageVibilityFlags(taillvmalias(hp).bind);
               WriteLinkageVibilityFlags(taillvmalias(hp).bind);
               if taillvmalias(hp).def.typ=procdef then
               if taillvmalias(hp).def.typ=procdef then
-                writer.AsmWrite(llvmencodeproctype(tabstractprocdef(taillvmalias(hp).def), '', lpd_alias))
+                sstr:=llvmencodeproctype(tabstractprocdef(taillvmalias(hp).def), '', lpd_alias)
               else
               else
-                writer.AsmWrite(llvmencodetypename(taillvmalias(hp).def));
+                sstr:=llvmencodetypename(taillvmalias(hp).def);
+              writer.AsmWrite(sstr);
+              if llvmflag_alias_double_type in llvmversion_properties[current_settings.llvmversion] then
+                begin
+                  writer.AsmWrite(', ');
+                  writer.AsmWrite(sstr);
+                end;
               writer.AsmWrite('* ');
               writer.AsmWrite('* ');
               writer.AsmWriteln(LlvmAsmSymName(taillvmalias(hp).oldsym));
               writer.AsmWriteln(LlvmAsmSymName(taillvmalias(hp).oldsym));
             end;
             end;

+ 8 - 1
compiler/llvm/llvminfo.pas

@@ -34,6 +34,8 @@ Type
        llvmver_3_6_1,
        llvmver_3_6_1,
        llvmver_3_6_2,
        llvmver_3_6_2,
        llvmver_3_7_0,
        llvmver_3_7_0,
+       llvmver_3_8_0,
+       llvmver_3_9_0,
        { Xcode versions use snapshots of LLVM and don't correspond to released
        { Xcode versions use snapshots of LLVM and don't correspond to released
          versions of llvm (they don't ship with the llvm utilities either, but
          versions of llvm (they don't ship with the llvm utilities either, but
          they do come with Clang, which can also be used to some extent instead
          they do come with Clang, which can also be used to some extent instead
@@ -46,7 +48,8 @@ type
      llvmflag_metadata_keyword,    { use "metadata" keyword (others leave it away, except when metadata is an argument to call instructions) }
      llvmflag_metadata_keyword,    { use "metadata" keyword (others leave it away, except when metadata is an argument to call instructions) }
      llvmflag_linker_private,      { have linker_private linkage type (later versions use global in combination with hidden visibility) }
      llvmflag_linker_private,      { have linker_private linkage type (later versions use global in combination with hidden visibility) }
      llvmflag_load_getelptr_type,  { the return type of loads and the base type of getelementptr must be specified }
      llvmflag_load_getelptr_type,  { the return type of loads and the base type of getelementptr must be specified }
-     llvmflag_call_no_ptr          { with direct calls, the function type is not a function pointer }
+     llvmflag_call_no_ptr,         { with direct calls, the function type is not a function pointer }
+     llvmflag_alias_double_type    { with "alias" declarations, have to print both aliasee and aliasee* types }
    );
    );
    tllvmversionflags = set of tllvmversionflag;
    tllvmversionflags = set of tllvmversionflag;
 
 
@@ -63,6 +66,8 @@ Const
      'LLVM-3.6.1',
      'LLVM-3.6.1',
      'LLVM-3.6.2',
      'LLVM-3.6.2',
      'LLVM-3.7.0',
      'LLVM-3.7.0',
+     'LLVM-3.8.0',
+     'LLVM-3.9.0',
      'LLVM-Xcode-6.4' { somewhere around LLVM 3.6.0 }
      'LLVM-Xcode-6.4' { somewhere around LLVM 3.6.0 }
    );
    );
 
 
@@ -79,6 +84,8 @@ Const
        { llvmver_3_6_1  } [],
        { llvmver_3_6_1  } [],
        { llvmver_3_6_2  } [],
        { llvmver_3_6_2  } [],
        { llvmver_3_7_0  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr],
        { llvmver_3_7_0  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr],
+       { llvmver_3_8_0  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type],
+       { llvmver_3_9_0  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type],
        { llvmver_xc_6_4 } [llvmflag_metadata_keyword]
        { llvmver_xc_6_4 } [llvmflag_metadata_keyword]
      );
      );