Browse Source

- removed LLVM support for clang < 7.0 and Xcode < 10.0: those versions
contain various bugs and can't even complete "make all", so there is no
point in keeping them
o changed default LLVM target version to 7.0

git-svn-id: trunk@43682 -

Jonas Maebe 5 years ago
parent
commit
c477816100
3 changed files with 44 additions and 130 deletions
  1. 1 1
      compiler/globals.pas
  2. 38 52
      compiler/llvm/agllvm.pas
  3. 5 77
      compiler/llvm/llvminfo.pas

+ 1 - 1
compiler/globals.pas

@@ -570,7 +570,7 @@ interface
         instructionset : is_arm;
 {$endif defined(ARM)}
 {$if defined(LLVM) and not defined(GENERIC_CPU)}
-        llvmversion    : llvmver_3_9;
+        llvmversion    : llvmver_7_0;
 {$endif defined(LLVM) and not defined(GENERIC_CPU)}
         controllertype : ct_none;
         pmessage : nil;

+ 38 - 52
compiler/llvm/agllvm.pas

@@ -596,31 +596,28 @@ implementation
             else
               nested:=true;
             opstart:=1;
-            if llvmflag_load_getelptr_type in llvmversion_properties[current_settings.llvmversion] then
+            owner.writer.AsmWrite(getopcodestr(taillvm(hp)));
+            opdone:=true;
+            if nested then
+              owner.writer.AsmWrite(' (')
+            else
+              owner.writer.AsmWrite(' ');
+            { can't just dereference the type, because it may be an
+              implicit pointer type such as a class -> resort to string
+              manipulation... Not very clean :( }
+            tmpstr:=llvmencodetypename(taillvm(hp).spilling_get_reg_type(0));
+            if op=la_getelementptr then
               begin
-                owner.writer.AsmWrite(getopcodestr(taillvm(hp)));
-                opdone:=true;
-                if nested then
-                  owner.writer.AsmWrite(' (')
-                else
-                  owner.writer.AsmWrite(' ');
-                { can't just dereference the type, because it may be an
-                  implicit pointer type such as a class -> resort to string
-                  manipulation... Not very clean :( }
-                tmpstr:=llvmencodetypename(taillvm(hp).spilling_get_reg_type(0));
-                if op=la_getelementptr then
+                if tmpstr[length(tmpstr)]<>'*' then
                   begin
-                    if tmpstr[length(tmpstr)]<>'*' then
-                      begin
-                        writeln(tmpstr);
-                        internalerror(2016071101);
-                      end
-                    else
-                      setlength(tmpstr,length(tmpstr)-1);
-                  end;
-                owner.writer.AsmWrite(tmpstr);
-                owner.writer.AsmWrite(',');
-              end
+                    writeln(tmpstr);
+                    internalerror(2016071101);
+                  end
+                else
+                  setlength(tmpstr,length(tmpstr)-1);
+              end;
+            owner.writer.AsmWrite(tmpstr);
+            owner.writer.AsmWrite(',');
           end;
         la_ret, la_br, la_switch, la_indirectbr,
         la_resume,
@@ -641,27 +638,24 @@ implementation
             if taillvm(hp).oper[1]^.reg<>NR_NO then
               owner.writer.AsmWrite(getregisterstring(taillvm(hp).oper[1]^.reg)+' = ');
             opstart:=2;
-            if llvmflag_call_no_ptr in llvmversion_properties[current_settings.llvmversion] then
+            owner.writer.AsmWrite(getopcodestr(taillvm(hp)));
+            tmpstr:=llvm_callingconvention_name(taillvm(hp).oper[2]^.callingconvention);
+            if tmpstr<>'' then
               begin
-                owner.writer.AsmWrite(getopcodestr(taillvm(hp)));
-                tmpstr:=llvm_callingconvention_name(taillvm(hp).oper[2]^.callingconvention);
-                if tmpstr<>'' then
-                  begin
-                    owner.writer.AsmWrite(' ');
-                    owner.writer.AsmWrite(tmpstr);
-                  end;
-                opdone:=true;
-                tmpstr:=llvmencodetypename(taillvm(hp).oper[3]^.def);
-                if tmpstr[length(tmpstr)]<>'*' then
-                  begin
-                    writeln(tmpstr);
-                    internalerror(2016071102);
-                  end
-                else
-                  setlength(tmpstr,length(tmpstr)-1);
+                owner.writer.AsmWrite(' ');
                 owner.writer.AsmWrite(tmpstr);
-                opstart:=4;
               end;
+            opdone:=true;
+            tmpstr:=llvmencodetypename(taillvm(hp).oper[3]^.def);
+            if tmpstr[length(tmpstr)]<>'*' then
+              begin
+                writeln(tmpstr);
+                internalerror(2016071102);
+              end
+            else
+              setlength(tmpstr,length(tmpstr)-1);
+            owner.writer.AsmWrite(tmpstr);
+            opstart:=4;
           end;
         la_blockaddress:
           begin
@@ -996,12 +990,7 @@ implementation
              AB_WEAK_EXTERNAL:
                writer.AsmWrite(' extern_weak');
              AB_PRIVATE_EXTERN:
-               begin
-                 if not(llvmflag_linker_private in llvmversion_properties[current_settings.llvmversion]) then
-                   writer.AsmWrite(' hidden')
-                 else
-                   writer.AsmWrite(' linker_private');
-               end
+               writer.AsmWrite(' hidden')
              else
                internalerror(2014020104);
            end;
@@ -1399,11 +1388,8 @@ implementation
               else
                 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(sstr);
               writer.AsmWrite('* ');
               writer.AsmWriteln(LlvmAsmSymName(taillvmalias(hp).oldsym));
             end;

+ 5 - 77
compiler/llvm/llvminfo.pas

@@ -33,31 +33,9 @@ Type
    { possible supported processors for this target }
    tllvmversion =
       (llvmver_invalid,
-       llvmver_3_3,
-       llvmver_3_4,
-       llvmver_3_5,
        { 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
          they do come with Clang, which can be used instead of opt/llc) }
-       llvmver_xc_6_4,
-       llvmver_3_6,
-       llvmver_3_7,
-       llvmver_xc_7_0,
-       llvmver_xc_7_1,
-       llvmver_xc_7_2,
-       llvmver_3_8,
-       llvmver_xc_7_3,
-       llvmver_3_9,
-       llvmver_xc_8_0,
-       llvmver_xc_8_1,
-       llvmver_xc_8_2,
-       llvmver_4_0,
-       llvmver_xc_9_0,
-       llvmver_5_0,
-       llvmver_xc_9_1,
-       llvmver_xc_9_2,
-       llvmver_xc_9_3,
-       llvmver_6_0,
        llvmver_xc_10_0,
        llvmver_xc_10_1,
        llvmver_7_0,
@@ -67,12 +45,6 @@ Type
 
 type
    tllvmversionflag = (
-     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_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_alias_double_type,   { with "alias" declarations, have to print both aliasee and aliasee* types }
-     llvmflag_fembed_bitcode,      { support embedding bitcode in object files }
      llvmflag_memcpy_indiv_align,  { memcpy intrinsic supports separate alignment for source and dest }
      llvmflag_null_pointer_valid   { supports "llvmflag_null_pointer_valid" attribute, which indicates access to nil should not be optimized as undefined behaviour }
    );
@@ -81,28 +53,6 @@ type
 Const
    llvmversionstr : array[tllvmversion] of string[14] = (
      '',
-     '3.3',
-     '3.4',
-     '3.5',
-     'Xcode-6.4',
-     '3.6',
-     '3.7',
-     'Xcode-7.0',
-     'Xcode-7.1',
-     'Xcode-7.2',
-     '3.8',
-     'Xcode-7.3',
-     '3.9',
-     'Xcode-8.0',
-     'Xcode-8.1',
-     'Xcode-8.2',
-     '4.0',
-     'Xcode-9.0',
-     '5.0',
-     'Xcode-9.1',
-     'Xcode-9.2',
-     'Xcode-9.3',
-     '6.0',
      'Xcode-10.0',
      'Xcode-10.1',
      '7.0',
@@ -113,33 +63,11 @@ Const
    llvmversion_properties: array[tllvmversion] of tllvmversionflags =
      (
        { invalid         } [],
-       { llvmver_3_3     } [llvmflag_metadata_keyword,llvmflag_linker_private],
-       { llvmver_3_4     } [llvmflag_metadata_keyword,llvmflag_linker_private],
-       { llvmver_3_5     } [llvmflag_metadata_keyword],
-       { llvmver_xc_6_4  } [llvmflag_metadata_keyword],
-       { llvmver_3_6     } [],
-       { llvmver_3_7     } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr],
-       { llvmver_xc_7_0  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr],
-       { llvmver_xc_7_1  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr],
-       { llvmver_xc_7_2  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr],
-       { llvmver_3_8     } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type],
-       { llvmver_xc_7_3  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type],
-       { llvmver_3_9     } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_xc_8_0  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_xc_8_1  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_xc_8_2  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_4_0     } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_xc_9_0  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_5_0     } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_xc_9_0  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_xc_9_1  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_xc_9_2  } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_6_0     } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_xc_10_0 } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_xc_10_1 } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode],
-       { llvmver_7_0     } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode,llvmflag_memcpy_indiv_align,llvmflag_null_pointer_valid],
-       { llvmver_7_1     } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode,llvmflag_memcpy_indiv_align,llvmflag_null_pointer_valid],
-       { llvmver_8_0     } [llvmflag_load_getelptr_type,llvmflag_call_no_ptr,llvmflag_alias_double_type,llvmflag_fembed_bitcode,llvmflag_memcpy_indiv_align,llvmflag_null_pointer_valid]
+       { llvmver_xc_10_0 } [],
+       { llvmver_xc_10_1 } [],
+       { llvmver_7_0     } [llvmflag_memcpy_indiv_align,llvmflag_null_pointer_valid],
+       { llvmver_7_1     } [llvmflag_memcpy_indiv_align,llvmflag_null_pointer_valid],
+       { llvmver_8_0     } [llvmflag_memcpy_indiv_align,llvmflag_null_pointer_valid]
      );
 
    { Supported optimizations, only used for information }