Add all of the altivec comparison instructions. Add patterns for the
[oota-llvm.git] / lib / Target / TargetMachine.cpp
index 8e965767ce92da52f4641d0c6d7759b09c6d0395..74c90ed54e2f2c96602fcc422436418cbaa70156 100644 (file)
@@ -12,8 +12,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetOptions.h"
 #include "llvm/Type.h"
-#include "llvm/CodeGen/IntrinsicLowering.h"
 #include "llvm/Support/CommandLine.h"
 using namespace llvm;
 
@@ -25,7 +25,8 @@ namespace llvm {
   bool PrintMachineCode;
   bool NoFramePointerElim;
   bool NoExcessFPPrecision;
-  int  PatternISelTriState;
+  bool UnsafeFPMath;
+  Reloc::Model RelocationModel;
 };
 namespace {
   cl::opt<bool, true> PrintCode("print-machineinstrs",
@@ -42,17 +43,33 @@ namespace {
                cl::desc("Disable optimizations that may increase FP precision"),
                cl::location(NoExcessFPPrecision),
                cl::init(false));
-  cl::opt<int, true> PatternISel("enable-pattern-isel",
-                    cl::desc("sets the pattern ISel off(0), on(1), default(2)"),
-                    cl::location(PatternISelTriState),
-                    cl::init(2));
+  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));
 };
 
 //---------------------------------------------------------------------------
 // TargetMachine Class
 //
-TargetMachine::TargetMachine(const std::string &name, IntrinsicLowering *il,
-                             bool LittleEndian,
+TargetMachine::TargetMachine(const std::string &name, bool LittleEndian,
                              unsigned char PtrSize, unsigned char PtrAl,
                              unsigned char DoubleAl, unsigned char FloatAl,
                              unsigned char LongAl, unsigned char IntAl,
@@ -61,22 +78,26 @@ TargetMachine::TargetMachine(const std::string &name, IntrinsicLowering *il,
   : Name(name), DataLayout(name, LittleEndian,
                            PtrSize, PtrAl, DoubleAl, FloatAl, LongAl,
                            IntAl, ShortAl, ByteAl, BoolAl) {
-  IL = il ? il : new DefaultIntrinsicLowering();
 }
 
-TargetMachine::TargetMachine(const std::string &name, IntrinsicLowering *il,
-                             const TargetData &TD)
+TargetMachine::TargetMachine(const std::string &name, const TargetData &TD)
   : Name(name), DataLayout(TD) {
-  IL = il ? il : new DefaultIntrinsicLowering();
 }
 
-TargetMachine::TargetMachine(const std::string &name, IntrinsicLowering *il,
-                             const Module &M)
+TargetMachine::TargetMachine(const std::string &name, const Module &M)
   : Name(name), DataLayout(name, &M) {
-  IL = il ? il : new DefaultIntrinsicLowering();
 }
 
 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;
+}