[PATCH] D42183: [LLD] [ELF] Pass CPU string to LTO pipeline.

Pratik Bhatu via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 18 22:04:21 PST 2018


pbhatu updated this revision to Diff 130560.
pbhatu added a comment.

I added a test case.  Since znver1 supports NOPW, it should be generated when we specify it as the CPU.


https://reviews.llvm.org/D42183

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


Index: test/ELF/lto/cpu-string.ll
===================================================================
--- /dev/null
+++ test/ELF/lto/cpu-string.ll
@@ -0,0 +1,23 @@
+; REQUIRES: x86
+; RUN: llvm-as %s -o %t.o
+
+; RUN: ld.lld -m elf_x86_64 %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 -m elf_x86_64 %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"}
Index: include/lld/Common/TargetOptionsCommandFlags.h
===================================================================
--- include/lld/Common/TargetOptionsCommandFlags.h
+++ include/lld/Common/TargetOptionsCommandFlags.h
@@ -18,4 +18,5 @@
 namespace lld {
 llvm::TargetOptions InitTargetOptionsFromCodeGenFlags();
 llvm::Optional<llvm::CodeModel::Model> GetCodeModelFromCMModel();
+std::string GetCPUStr();
 }
Index: ELF/LTO.cpp
===================================================================
--- ELF/LTO.cpp
+++ ELF/LTO.cpp
@@ -87,6 +87,7 @@
   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;
Index: Common/TargetOptionsCommandFlags.cpp
===================================================================
--- Common/TargetOptionsCommandFlags.cpp
+++ Common/TargetOptionsCommandFlags.cpp
@@ -30,3 +30,7 @@
 llvm::Optional<llvm::CodeModel::Model> lld::GetCodeModelFromCMModel() {
   return getCodeModel();
 }
+
+std::string lld::GetCPUStr() {
+  return ::getCPUStr();
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42183.130560.patch
Type: text/x-patch
Size: 2063 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180119/b659f0ac/attachment.bin>


More information about the llvm-commits mailing list