Index: Common/TargetOptionsCommandFlags.cpp =================================================================== --- Common/TargetOptionsCommandFlags.cpp +++ Common/TargetOptionsCommandFlags.cpp @@ -30,3 +30,5 @@ llvm::Optional lld::GetCodeModelFromCMModel() { return getCodeModel(); } + +std::string lld::GetCPUStr() { return ::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: 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 GetCodeModelFromCMModel(); +std::string GetCPUStr(); } 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 %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" "target-cpu"="znver1"}