diff options
author | Martell Malone <martellmalone@gmail.com> | 2017-02-28 23:43:26 +0000 |
---|---|---|
committer | Martell Malone <martellmalone@gmail.com> | 2017-02-28 23:43:26 +0000 |
commit | 6b43b7ad49927ef5fc521ef4aaaaeb64dd905507 (patch) | |
tree | 0721e1b888049df785947a11a22c6d239f50e59d | |
parent | dccb4feff8e748c92fb8f8dd1ecb1bff1a6a12dc (diff) | |
download | bcm5719-llvm-6b43b7ad49927ef5fc521ef4aaaaeb64dd905507.tar.gz bcm5719-llvm-6b43b7ad49927ef5fc521ef4aaaaeb64dd905507.zip |
[ELF] - Allow the Code Model flag when using LTO
Differential Revision: https://reviews.llvm.org/D29445
llvm-svn: 296542
-rw-r--r-- | lld/ELF/Config.h | 1 | ||||
-rw-r--r-- | lld/ELF/LTO.cpp | 1 | ||||
-rw-r--r-- | lld/include/lld/Core/TargetOptionsCommandFlags.h | 2 | ||||
-rw-r--r-- | lld/lib/Core/TargetOptionsCommandFlags.cpp | 4 | ||||
-rw-r--r-- | lld/test/ELF/lto/codemodel.ll | 20 |
5 files changed, 28 insertions, 0 deletions
diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h index c88abd84a27..a47d7cda4af 100644 --- a/lld/ELF/Config.h +++ b/lld/ELF/Config.h @@ -13,6 +13,7 @@ #include "llvm/ADT/MapVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSet.h" +#include "llvm/Support/CodeGen.h" #include "llvm/Support/ELF.h" #include <vector> diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index 1fb752579a9..eec62e96bb1 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -73,6 +73,7 @@ static std::unique_ptr<lto::LTO> createLTO() { Conf.Options.RelaxELFRelocations = true; Conf.RelocModel = Config->pic() ? Reloc::PIC_ : Reloc::Static; + Conf.CodeModel = GetCodeModelFromCMModel(); Conf.DisableVerify = Config->DisableVerify; Conf.DiagHandler = diagnosticHandler; Conf.OptLevel = Config->LTOO; diff --git a/lld/include/lld/Core/TargetOptionsCommandFlags.h b/lld/include/lld/Core/TargetOptionsCommandFlags.h index f6cb91168de..9ba99d94b95 100644 --- a/lld/include/lld/Core/TargetOptionsCommandFlags.h +++ b/lld/include/lld/Core/TargetOptionsCommandFlags.h @@ -11,8 +11,10 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Support/CodeGen.h" #include "llvm/Target/TargetOptions.h" namespace lld { llvm::TargetOptions InitTargetOptionsFromCodeGenFlags(); +llvm::CodeModel::Model GetCodeModelFromCMModel(); } diff --git a/lld/lib/Core/TargetOptionsCommandFlags.cpp b/lld/lib/Core/TargetOptionsCommandFlags.cpp index 3865c7b3f8b..e0f26761e70 100644 --- a/lld/lib/Core/TargetOptionsCommandFlags.cpp +++ b/lld/lib/Core/TargetOptionsCommandFlags.cpp @@ -26,3 +26,7 @@ llvm::TargetOptions lld::InitTargetOptionsFromCodeGenFlags() { return ::InitTargetOptionsFromCodeGenFlags(); } + +llvm::CodeModel::Model lld::GetCodeModelFromCMModel() { + return CMModel; +} diff --git a/lld/test/ELF/lto/codemodel.ll b/lld/test/ELF/lto/codemodel.ll new file mode 100644 index 00000000000..cc126202f29 --- /dev/null +++ b/lld/test/ELF/lto/codemodel.ll @@ -0,0 +1,20 @@ +; REQUIRES: x86 +; RUN: llvm-as %s -o %t.o +; RUN: ld.lld -m elf_x86_64 %t.o -o %ts -mllvm -code-model=small +; RUN: ld.lld -m elf_x86_64 %t.o -o %tl -mllvm -code-model=large +; RUN: llvm-objdump -d %ts | FileCheck %s --check-prefix=CHECK-SMALL +; RUN: llvm-objdump -d %tl | FileCheck %s --check-prefix=CHECK-LARGE + +target triple = "x86_64-unknown-linux-gnu" +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" + +@data = internal constant [0 x i32] [] + +define i32* @_start() nounwind readonly { +entry: +; CHECK-SMALL-LABEL: _start: +; CHECK-SMALL: movl $2097440, %eax +; CHECK-LARGE-LABEL: _start: +; CHECK-LARGE: movabsq $2097440, %rax + ret i32* getelementptr ([0 x i32], [0 x i32]* @data, i64 0, i64 0) +} |