Переглянути джерело

llvm: changed llvm_metadatatype from untyped pointer to undefineddef

That matches its meaning better, as it should not result in type conversions.
E.g. some kinds of metadata parameters expect a "type register" parameter such
as "metadata i32* %reg.3"
Jonas Maebe 3 роки тому
батько
коміт
fe0048bcec
2 змінених файлів з 9 додано та 5 видалено
  1. 8 4
      compiler/llvm/llvmdef.pas
  2. 1 1
      compiler/psystem.pas

+ 8 - 4
compiler/llvm/llvmdef.pas

@@ -401,9 +401,7 @@ implementation
             end;
           pointerdef :
             begin
-              if def=llvm_metadatatype then
-                encodedstr:=encodedstr+'metadata'
-              else if is_voidpointer(def) then
+              if is_voidpointer(def) then
                 encodedstr:=encodedstr+'i8*'
               else
                 begin
@@ -617,7 +615,13 @@ implementation
               else
                 internalerror(2013100601);
             end;
-          undefineddef,
+          undefineddef:
+            begin
+              if def=llvm_metadatatype then
+                encodedstr:=encodedstr+'metadata'
+              else
+                internalerror(2022052301);
+            end;
           errordef :
             internalerror(2013100604);
         else

+ 1 - 1
compiler/psystem.pas

@@ -589,7 +589,7 @@ implementation
         addtype('$qwordbool',bool64type);
 {$ifdef llvm}
         addtype('$llvmbool1',llvmbool1type);
-        llvm_metadatatype:=cpointerdef.create(voidtype);
+        llvm_metadatatype:=cundefineddef.create(true);
         { if this gets renamed, also adjust agllvm so it still writes the identifier of this type as "metadata" }
         addtype('$metadata',llvm_metadatatype);
         addtype('LLVMMetadata',llvm_metadatatype);