[lld] r323801 - Pass CPU string to LTO pipeline.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 30 10:18:59 PST 2018


Author: rafael
Date: Tue Jan 30 10:18:59 2018
New Revision: 323801

URL: http://llvm.org/viewvc/llvm-project?rev=323801&view=rev
Log:
Pass CPU string to LTO pipeline.

Previously an empty CPU string was passed to the LTO engine which
resulted in a generic CPU for which certain features like NOPL were
disabled. This fixes that.

Patch by Pratik Bhatu!

Added:
    lld/trunk/test/ELF/lto/cpu-string.ll
Modified:
    lld/trunk/Common/TargetOptionsCommandFlags.cpp
    lld/trunk/ELF/LTO.cpp
    lld/trunk/include/lld/Common/TargetOptionsCommandFlags.h

Modified: lld/trunk/Common/TargetOptionsCommandFlags.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/Common/TargetOptionsCommandFlags.cpp?rev=323801&r1=323800&r2=323801&view=diff
==============================================================================
--- lld/trunk/Common/TargetOptionsCommandFlags.cpp (original)
+++ lld/trunk/Common/TargetOptionsCommandFlags.cpp Tue Jan 30 10:18:59 2018
@@ -30,3 +30,5 @@ llvm::TargetOptions lld::InitTargetOptio
 llvm::Optional<llvm::CodeModel::Model> lld::GetCodeModelFromCMModel() {
   return getCodeModel();
 }
+
+std::string lld::GetCPUStr() { return ::getCPUStr(); }

Modified: lld/trunk/ELF/LTO.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LTO.cpp?rev=323801&r1=323800&r2=323801&view=diff
==============================================================================
--- lld/trunk/ELF/LTO.cpp (original)
+++ lld/trunk/ELF/LTO.cpp Tue Jan 30 10:18:59 2018
@@ -87,6 +87,7 @@ static std::unique_ptr<lto::LTO> createL
   Conf.DisableVerify = Config->DisableVerify;
   Conf.DiagHandler = diagnosticHandler;
   Conf.OptLevel = Config->LTOO;
+  Conf.CPU = GetCPUStr();
 
   // Set up a custom pipeline if we've been asked to.
   Conf.OptPipeline = Config->LTONewPmPasses;

Modified: lld/trunk/include/lld/Common/TargetOptionsCommandFlags.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Common/TargetOptionsCommandFlags.h?rev=323801&r1=323800&r2=323801&view=diff
==============================================================================
--- lld/trunk/include/lld/Common/TargetOptionsCommandFlags.h (original)
+++ lld/trunk/include/lld/Common/TargetOptionsCommandFlags.h Tue Jan 30 10:18:59 2018
@@ -18,4 +18,5 @@
 namespace lld {
 llvm::TargetOptions InitTargetOptionsFromCodeGenFlags();
 llvm::Optional<llvm::CodeModel::Model> GetCodeModelFromCMModel();
+std::string GetCPUStr();
 }

Added: lld/trunk/test/ELF/lto/cpu-string.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/cpu-string.ll?rev=323801&view=auto
==============================================================================
--- lld/trunk/test/ELF/lto/cpu-string.ll (added)
+++ lld/trunk/test/ELF/lto/cpu-string.ll Tue Jan 30 10:18:59 2018
@@ -0,0 +1,23 @@
+; REQUIRES: x86
+; RUN: llvm-as %s -o %t.o
+
+; RUN: ld.lld %t.o -o %t.so -shared
+; RUN: llvm-objdump -d -section=".text" -no-leading-addr -no-show-raw-insn %t.so | FileCheck %s
+
+; RUN: ld.lld -mllvm -mcpu=znver1 %t.o -o %m.so -shared
+; RUN: llvm-objdump -d -section=".text" -no-leading-addr -no-show-raw-insn %m.so | FileCheck -check-prefix=ZNVER1 %s
+
+; CHECK: nop{{$}}
+
+; ZNVER1: nopw
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @foo() #0 {
+entry:
+  call void asm sideeffect ".p2align        4, 0x90", "~{dirflag},~{fpsr},~{flags}"()
+  ret void
+}
+
+attributes #0 = { "no-frame-pointer-elim"="true" }




More information about the llvm-commits mailing list