Add v4i32 <-> v4f32 bitconvert patterns.
[oota-llvm.git] / lib / Target / TargetMachine.cpp
index 973165f186e3ae0cb55cdbeff20123193bd96107..a2a4200b06752b48841c5466b4e2f4b053485f39 100644 (file)
@@ -1,10 +1,10 @@
 //===-- TargetMachine.cpp - General Target Information ---------------------==//
-// 
+//
 //                     The LLVM Compiler Infrastructure
 //
 // This file was developed by the LLVM research group and is distributed under
 // the University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
+//
 //===----------------------------------------------------------------------===//
 //
 // This file describes the general parts of a Target machine.
@@ -12,6 +12,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetOptions.h"
 #include "llvm/Type.h"
 #include "llvm/CodeGen/IntrinsicLowering.h"
 #include "llvm/Support/CommandLine.h"
@@ -24,17 +25,46 @@ using namespace llvm;
 namespace llvm {
   bool PrintMachineCode;
   bool NoFramePointerElim;
+  bool NoExcessFPPrecision;
+  bool UnsafeFPMath;
+  Reloc::Model RelocationModel;
 };
 namespace {
   cl::opt<bool, true> PrintCode("print-machineinstrs",
     cl::desc("Print generated machine code"),
     cl::location(PrintMachineCode), cl::init(false));
 
-  cl::opt<bool, true> 
+  cl::opt<bool, true>
     DisableFPElim("disable-fp-elim",
                   cl::desc("Disable frame pointer elimination optimization"),
                   cl::location(NoFramePointerElim),
                   cl::init(false));
+  cl::opt<bool, true>
+  DisableExcessPrecision("disable-excess-fp-precision",
+               cl::desc("Disable optimizations that may increase FP precision"),
+               cl::location(NoExcessFPPrecision),
+               cl::init(false));
+  cl::opt<bool, true>
+  EnableUnsafeFPMath("enable-unsafe-fp-math",
+               cl::desc("Enable optimizations that may decrease FP precision"),
+               cl::location(UnsafeFPMath),
+               cl::init(false));
+  cl::opt<llvm::Reloc::Model, true>
+  DefRelocationModel(
+    "relocation-model",
+    cl::desc("Choose relocation model"),
+    cl::location(RelocationModel),
+    cl::init(Reloc::Default),
+    cl::values(
+      clEnumValN(Reloc::Default, "default",
+                 "Target default relocation model"),
+      clEnumValN(Reloc::Static, "static",
+                 "Non-relocatable code"),
+      clEnumValN(Reloc::PIC, "pic",
+                 "Fully relocatable, position independent code"),
+      clEnumValN(Reloc::DynamicNoPIC, "dynamic-no-pic",
+                 "Relocatable external references, non-relocatable code"),
+      clEnumValEnd));
 };
 
 //---------------------------------------------------------------------------
@@ -69,3 +99,13 @@ TargetMachine::~TargetMachine() {
   delete IL;
 }
 
+/// getRelocationModel - Returns the code generation relocation model. The
+/// choices are static, PIC, and dynamic-no-pic, and target default.
+Reloc::Model TargetMachine::getRelocationModel() {
+  return RelocationModel;
+}
+
+/// setRelocationModel - Sets the code generation relocation model.
+void TargetMachine::setRelocationModel(Reloc::Model Model) {
+  RelocationModel = Model;
+}