Added option -code-model to set code model (only used in 64-bit) mode. Valid
values include small, kernel, medium, large, and default.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29009 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/TargetMachine.cpp b/lib/Target/TargetMachine.cpp
index 5072537..1fbad7d 100644
--- a/lib/Target/TargetMachine.cpp
+++ b/lib/Target/TargetMachine.cpp
@@ -28,6 +28,7 @@
   bool UnsafeFPMath;
   bool FiniteOnlyFPMathOption;
   Reloc::Model RelocationModel;
+  CodeModel::Model CMModel;
 }
 namespace {
   cl::opt<bool, true> PrintCode("print-machineinstrs",
@@ -70,6 +71,24 @@
       clEnumValN(Reloc::DynamicNoPIC, "dynamic-no-pic",
                  "Relocatable external references, non-relocatable code"),
       clEnumValEnd));
+  cl::opt<llvm::CodeModel::Model, true>
+  DefCodeModel(
+    "code-model",
+    cl::desc("Choose relocation model"),
+    cl::location(CMModel),
+    cl::init(CodeModel::Default),
+    cl::values(
+      clEnumValN(CodeModel::Default, "default",
+                 "Target default code model"),
+      clEnumValN(CodeModel::Small, "small",
+                 "Small code model"),
+      clEnumValN(CodeModel::Kernel, "kernel",
+                 "Kernel code model"),
+      clEnumValN(CodeModel::Medium, "medium",
+                 "Medium code model"),
+      clEnumValN(CodeModel::Large, "large",
+                 "Large code model"),
+      clEnumValEnd));
 }
 
 //---------------------------------------------------------------------------
@@ -94,6 +113,17 @@
   RelocationModel = Model;
 }
 
+/// getCodeModel - Returns the code model. The choices are small, kernel,
+/// medium, large, and target default.
+CodeModel::Model TargetMachine::getCodeModel() {
+  return CMModel;
+}
+
+/// setCodeModel - Sets the code model.
+void TargetMachine::setCodeModel(CodeModel::Model Model) {
+  CMModel = Model;
+}
+
 namespace llvm {
   /// FiniteOnlyFPMath - This returns true when the -enable-finite-only-fp-math
   /// option is specified on the command line. If this returns false (default),