diff --git a/llvm/lib/LTO/LTOBackend.cpp b/llvm/lib/LTO/LTOBackend.cpp --- a/llvm/lib/LTO/LTOBackend.cpp +++ b/llvm/lib/LTO/LTOBackend.cpp @@ -415,6 +415,8 @@ TM->Options.ObjectFilenameForDebug = Stream->ObjectPathName; legacy::PassManager CodeGenPasses; + TargetLibraryInfoImpl TLII(Triple(Mod.getTargetTriple())); + CodeGenPasses.add(new TargetLibraryInfoWrapperPass(TLII)); CodeGenPasses.add( createImmutableModuleSummaryIndexWrapperPass(&CombinedIndex)); if (Conf.PreCodeGenPassesHook) diff --git a/llvm/test/LTO/X86/tli-sqrtf_finite.ll b/llvm/test/LTO/X86/tli-sqrtf_finite.ll new file mode 100644 --- /dev/null +++ b/llvm/test/LTO/X86/tli-sqrtf_finite.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as < %s > %t +; RUN: llvm-lto %t -exported-symbol=foo -filetype=asm -o - | FileCheck %s + +; Check that sqrtf_finite is recognized as a libcall by SelectionDAGBuilder +; to enable sqrtss instruction to be used. + +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +define float @foo(float %x) { +; CHECK: sqrtss + %call = tail call nnan ninf float @__sqrtf_finite(float %x) readnone + ret float %call +} + +declare float @__sqrtf_finite(float) readnone