Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
Pass CPU string to LTO pipeline.
Browse files Browse the repository at this point in the history
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!

git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@323801 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
espindola committed Jan 30, 2018
1 parent 83f0c4b commit 95a9b67
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Common/TargetOptionsCommandFlags.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,5 @@ llvm::TargetOptions lld::InitTargetOptionsFromCodeGenFlags() {
llvm::Optional<llvm::CodeModel::Model> lld::GetCodeModelFromCMModel() {
return getCodeModel();
}

std::string lld::GetCPUStr() { return ::getCPUStr(); }
1 change: 1 addition & 0 deletions ELF/LTO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ static std::unique_ptr<lto::LTO> createLTO() {
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;
Expand Down
1 change: 1 addition & 0 deletions include/lld/Common/TargetOptionsCommandFlags.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@
namespace lld {
llvm::TargetOptions InitTargetOptionsFromCodeGenFlags();
llvm::Optional<llvm::CodeModel::Model> GetCodeModelFromCMModel();
std::string GetCPUStr();
}
23 changes: 23 additions & 0 deletions test/ELF/lto/cpu-string.ll
Original file line number Diff line number Diff line change
@@ -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" }

0 comments on commit 95a9b67

Please sign in to comment.