[AsmPrinter] Delete redundant .type foo, @function when emitting an ifunc
authorFangrui Song <maskray@google.com>
Wed, 14 Aug 2019 10:30:27 +0000 (10:30 +0000)
committerFangrui Song <maskray@google.com>
Wed, 14 Aug 2019 10:30:27 +0000 (10:30 +0000)
In MCAsmStreamer:

.type foo,@function   # <--- this is redundant
.type foo,@gnu_indirect_function

In MCELFStreamer, the latter STT_GNU_IFUNC overrides STT_FUNC.

llvm-svn: 368823

llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
llvm/test/CodeGen/X86/ifunc-asm.ll

index cc85cb9..61cb46c 100644 (file)
@@ -1313,11 +1313,10 @@ void AsmPrinter::emitGlobalIndirectSymbol(Module &M,
 
   // Set the symbol type to function if the alias has a function type.
   // This affects codegen when the aliasee is not a function.
-  if (IsFunction) {
-    OutStreamer->EmitSymbolAttribute(Name, MCSA_ELF_TypeFunction);
-    if (isa<GlobalIFunc>(GIS))
-      OutStreamer->EmitSymbolAttribute(Name, MCSA_ELF_TypeIndFunction);
-  }
+  if (IsFunction)
+    OutStreamer->EmitSymbolAttribute(Name, isa<GlobalIFunc>(GIS)
+                                               ? MCSA_ELF_TypeIndFunction
+                                               : MCSA_ELF_TypeFunction);
 
   EmitVisibility(Name, GIS.getVisibility());
 
index ef3f5b3..c160488 100644 (file)
@@ -10,6 +10,5 @@ entry:
 ; CHECK-NEXT: foo_ifunc:
 
 @foo = ifunc i32 (i32), i64 ()* @foo_ifunc
-; CHECK: .type foo,@function
-; CHECK-NEXT: .type foo,@gnu_indirect_function
+; CHECK:      .type foo,@gnu_indirect_function
 ; CHECK-NEXT: .set foo, foo_ifunc