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"
This commit is contained in:
Jonas Maebe 2022-05-23 22:16:26 +02:00
parent aa43441ac9
commit fe0048bcec
2 changed files with 9 additions and 5 deletions

View File

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

View File

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