diff --git a/lld/MachO/LTO.cpp b/lld/MachO/LTO.cpp --- a/lld/MachO/LTO.cpp +++ b/lld/MachO/LTO.cpp @@ -27,6 +27,7 @@ static lto::Config createConfig() { lto::Config c; c.Options = initTargetOptionsFromCodeGenFlags(); + c.CodeModel = getCodeModelFromCMModel(); c.CPU = getCPUStr(); c.MAttrs = getMAttrs(); return c; diff --git a/lld/test/MachO/codemodel.ll b/lld/test/MachO/codemodel.ll new file mode 100644 --- /dev/null +++ b/lld/test/MachO/codemodel.ll @@ -0,0 +1,20 @@ +; REQUIRES: x86 +; RUN: llvm-as %s -o %t.o +; RUN: %lld -lSystem %t.o -o %ts -mllvm -code-model=small +; RUN: %lld -lSystem %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-apple-darwin" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" + +@data = internal constant [0 x i32] [] + +define i32* @main() nounwind readonly { +entry: +; CHECK-SMALL-LABEL: <_main>: +; CHECK-SMALL: leaq [[#]](%rip), %rax +; CHECK-LARGE-LABEL: <_main>: +; CHECK-LARGE: movabsq $[[#]], %rax + ret i32* getelementptr ([0 x i32], [0 x i32]* @data, i64 0, i64 0) +}