From 6a86ec1ef0fb0641138e65ec1903b743437e8615 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Sat, 20 Sep 2008 00:13:45 +0000 Subject: [PATCH] No need to print function stubs for Mac OS X 10.5 and up. Linker will handle it. llvm-svn: 56378 --- lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp | 13 ++++++++++--- test/CodeGen/X86/darwin-stub.ll | 12 ++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 test/CodeGen/X86/darwin-stub.ll diff --git a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp index 6977ead58e1..678b619f7ee 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp @@ -392,8 +392,13 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo, if (GV->isDeclaration() || GV->isWeakForLinker()) { // Dynamically-resolved functions need a stub for the function. if (isCallOp && isa(GV)) { - FnStubs.insert(Name); - printSuffixedName(Name, "$stub"); + // Function stubs are no longer needed for Mac OS X 10.5 and up. + if (Subtarget->isTargetDarwin() && Subtarget->getDarwinVers() >= 9) { + O << Name; + } else { + FnStubs.insert(Name); + printSuffixedName(Name, "$stub"); + } } else { GVStubs.insert(Name); printSuffixedName(Name, "$non_lazy_ptr"); @@ -475,7 +480,9 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo, bool needCloseParen = false; std::string Name(TAI->getGlobalPrefix()); Name += MO.getSymbolName(); - if (isCallOp && shouldPrintStub(TM, Subtarget)) { + // Print function stub suffix unless it's Mac OS X 10.5 and up. + if (isCallOp && shouldPrintStub(TM, Subtarget) && + !(Subtarget->isTargetDarwin() && Subtarget->getDarwinVers() >= 9)) { FnStubs.insert(Name); printSuffixedName(Name, "$stub"); return; diff --git a/test/CodeGen/X86/darwin-stub.ll b/test/CodeGen/X86/darwin-stub.ll new file mode 100644 index 00000000000..79eb31ac0fd --- /dev/null +++ b/test/CodeGen/X86/darwin-stub.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin | grep stub +; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin9 | not grep stub + +@"\01LC" = internal constant [13 x i8] c"Hello World!\00" ; <[13 x i8]*> [#uses=1] + +define i32 @main() nounwind { +entry: + %0 = tail call i32 @puts(i8* getelementptr ([13 x i8]* @"\01LC", i32 0, i32 0)) nounwind ; [#uses=0] + ret i32 0 +} + +declare i32 @puts(i8*)