summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartell Malone <martellmalone@gmail.com>2017-02-28 23:43:26 +0000
committerMartell Malone <martellmalone@gmail.com>2017-02-28 23:43:26 +0000
commit6b43b7ad49927ef5fc521ef4aaaaeb64dd905507 (patch)
tree0721e1b888049df785947a11a22c6d239f50e59d
parentdccb4feff8e748c92fb8f8dd1ecb1bff1a6a12dc (diff)
downloadbcm5719-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.h1
-rw-r--r--lld/ELF/LTO.cpp1
-rw-r--r--lld/include/lld/Core/TargetOptionsCommandFlags.h2
-rw-r--r--lld/lib/Core/TargetOptionsCommandFlags.cpp4
-rw-r--r--lld/test/ELF/lto/codemodel.ll20
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)
+}
OpenPOWER on IntegriCloud