create the raddr addressing mode that matches any register and the frame index
[oota-llvm.git] / lib / Target / TargetMachine.cpp
index 24e1e5a547a6e0f63267282f0429ec6df0f0cc7c..1fbad7d19ab968df020a981a6c6e84e13c7e3986 100644 (file)
@@ -26,8 +26,10 @@ namespace llvm {
   bool NoFramePointerElim;
   bool NoExcessFPPrecision;
   bool UnsafeFPMath;
+  bool FiniteOnlyFPMathOption;
   Reloc::Model RelocationModel;
-};
+  CodeModel::Model CMModel;
+}
 namespace {
   cl::opt<bool, true> PrintCode("print-machineinstrs",
     cl::desc("Print generated machine code"),
@@ -48,6 +50,11 @@ namespace {
                cl::desc("Enable optimizations that may decrease FP precision"),
                cl::location(UnsafeFPMath),
                cl::init(false));
+  cl::opt<bool, true>
+  EnableFiniteOnltFPMath("enable-finite-only-fp-math",
+               cl::desc("Enable optimizations that assumes non- NaNs / +-Infs"),
+               cl::location(FiniteOnlyFPMathOption),
+               cl::init(false));
   cl::opt<llvm::Reloc::Model, true>
   DefRelocationModel(
     "relocation-model",
@@ -64,7 +71,25 @@ namespace {
       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));
+}
 
 //---------------------------------------------------------------------------
 // TargetMachine Class
@@ -87,3 +112,22 @@ Reloc::Model TargetMachine::getRelocationModel() {
 void TargetMachine::setRelocationModel(Reloc::Model Model) {
   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),
+  /// the code generator is not allowed to assume that FP arithmetic arguments
+  /// and results are never NaNs or +-Infs.
+  bool FiniteOnlyFPMath() { return UnsafeFPMath || FiniteOnlyFPMathOption; }
+}