[Mangler] Mangle aliases to fastcall/vectorcall functions correctly
authorAmanieu d'Antras <amanieu@gmail.com>
Fri, 25 Feb 2022 22:06:47 +0000 (22:06 +0000)
committerAmanieu d'Antras <amanieu@gmail.com>
Fri, 25 Feb 2022 22:06:47 +0000 (22:06 +0000)
These aliases are produced by MergeFunctions and need to be mangled according to the calling convention of the function they are pointing to instead of defaulting to the C calling convention.

Reviewed By: rnk

Differential Revision: https://reviews.llvm.org/D120382

llvm/lib/IR/Mangler.cpp
llvm/test/CodeGen/X86/fastcall-correct-mangling.ll

index 2399ea2..b8e3e40 100644 (file)
@@ -144,7 +144,7 @@ void Mangler::getNameWithPrefix(raw_ostream &OS, const GlobalValue *GV,
 
   // Mangle functions with Microsoft calling conventions specially.  Only do
   // this mangling for x86_64 vectorcall and 32-bit x86.
-  const Function *MSFunc = dyn_cast<Function>(GV);
+  const Function *MSFunc = dyn_cast_or_null<Function>(GV->getAliaseeObject());
 
   // Don't add byte count suffixes when '\01' or '?' are in the first
   // character.
index 00dc44e..dd8ce0f 100644 (file)
@@ -31,3 +31,7 @@ define private x86_fastcallcc void @dontCrash() {
 ; CHECK64-LABEL: {{^}}.LdontCrash:
   ret void
 }
+
+@alias = alias void(i64, i8, i8, i16), void(i64, i8, i8, i16)* @func
+; CHECK32-LABEL: {{^}}.set @alias@20, @func@20
+; CHECK64-LABEL: {{^}}.set alias, func