Eliminate IntrinsicLowering from TargetMachine.
Make the CBE and V9 backends create their own, since they're the only ones that use it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26974 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/Alpha/AlphaTargetMachine.cpp b/lib/Target/Alpha/AlphaTargetMachine.cpp
index dd593d1..2daaab2 100644
--- a/lib/Target/Alpha/AlphaTargetMachine.cpp
+++ b/lib/Target/Alpha/AlphaTargetMachine.cpp
@@ -53,9 +53,8 @@
 #endif
 }
 
-AlphaTargetMachine::AlphaTargetMachine(const Module &M, IntrinsicLowering *IL,
-                                       const std::string &FS)
-  : TargetMachine("alpha", IL, true),
+AlphaTargetMachine::AlphaTargetMachine(const Module &M, const std::string &FS)
+  : TargetMachine("alpha", true),
     FrameInfo(TargetFrameInfo::StackGrowsDown, 16, 0),
     JITInfo(*this),
     Subtarget(M, FS)
diff --git a/lib/Target/Alpha/AlphaTargetMachine.h b/lib/Target/Alpha/AlphaTargetMachine.h
index 20ae44c..8f6caeb 100644
--- a/lib/Target/Alpha/AlphaTargetMachine.h
+++ b/lib/Target/Alpha/AlphaTargetMachine.h
@@ -24,7 +24,6 @@
 namespace llvm {
 
 class GlobalValue;
-class IntrinsicLowering;
 
 class AlphaTargetMachine : public TargetMachine {
   AlphaInstrInfo InstrInfo;
@@ -33,8 +32,7 @@
   AlphaSubtarget Subtarget;
 
 public:
-  AlphaTargetMachine(const Module &M, IntrinsicLowering *IL,
-                     const std::string &FS);
+  AlphaTargetMachine(const Module &M, const std::string &FS);
 
   virtual const AlphaInstrInfo *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index 8988189..5389387 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -67,7 +67,7 @@
   /// module to a C translation unit.
   class CWriter : public FunctionPass, public InstVisitor<CWriter> {
     std::ostream &Out;
-    IntrinsicLowering &IL;
+    DefaultIntrinsicLowering IL;
     Mangler *Mang;
     LoopInfo *LI;
     const Module *TheModule;
@@ -75,7 +75,7 @@
 
     std::map<const ConstantFP *, unsigned> FPConstantMap;
   public:
-    CWriter(std::ostream &o, IntrinsicLowering &il) : Out(o), IL(il) {}
+    CWriter(std::ostream &o) : Out(o) {}
 
     virtual const char *getPassName() const { return "C backend"; }
 
@@ -1931,6 +1931,6 @@
   PM.add(createLowerInvokePass());
   PM.add(createCFGSimplificationPass());   // clean up after lower invoke.
   PM.add(new CBackendNameAllUsedStructsAndMergeFunctions());
-  PM.add(new CWriter(o, getIntrinsicLowering()));
+  PM.add(new CWriter(o));
   return false;
 }
diff --git a/lib/Target/CBackend/CTargetMachine.h b/lib/Target/CBackend/CTargetMachine.h
index f5894aa..f947f65 100644
--- a/lib/Target/CBackend/CTargetMachine.h
+++ b/lib/Target/CBackend/CTargetMachine.h
@@ -17,12 +17,10 @@
 #include "llvm/Target/TargetMachine.h"
 
 namespace llvm {
-class IntrinsicLowering;
 
 struct CTargetMachine : public TargetMachine {
-  CTargetMachine(const Module &M, IntrinsicLowering *IL,
-                 const std::string &FS) :
-    TargetMachine("CBackend", IL, M) {}
+  CTargetMachine(const Module &M, const std::string &FS)
+    : TargetMachine("CBackend", M) {}
 
   // This is the only thing that actually does anything here.
   virtual bool addPassesToEmitFile(PassManager &PM, std::ostream &Out,
diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp
index 8988189..5389387 100644
--- a/lib/Target/CBackend/Writer.cpp
+++ b/lib/Target/CBackend/Writer.cpp
@@ -67,7 +67,7 @@
   /// module to a C translation unit.
   class CWriter : public FunctionPass, public InstVisitor<CWriter> {
     std::ostream &Out;
-    IntrinsicLowering &IL;
+    DefaultIntrinsicLowering IL;
     Mangler *Mang;
     LoopInfo *LI;
     const Module *TheModule;
@@ -75,7 +75,7 @@
 
     std::map<const ConstantFP *, unsigned> FPConstantMap;
   public:
-    CWriter(std::ostream &o, IntrinsicLowering &il) : Out(o), IL(il) {}
+    CWriter(std::ostream &o) : Out(o) {}
 
     virtual const char *getPassName() const { return "C backend"; }
 
@@ -1931,6 +1931,6 @@
   PM.add(createLowerInvokePass());
   PM.add(createCFGSimplificationPass());   // clean up after lower invoke.
   PM.add(new CBackendNameAllUsedStructsAndMergeFunctions());
-  PM.add(new CWriter(o, getIntrinsicLowering()));
+  PM.add(new CWriter(o));
   return false;
 }
diff --git a/lib/Target/IA64/IA64TargetMachine.cpp b/lib/Target/IA64/IA64TargetMachine.cpp
index 9757b99..4c7af41 100644
--- a/lib/Target/IA64/IA64TargetMachine.cpp
+++ b/lib/Target/IA64/IA64TargetMachine.cpp
@@ -15,7 +15,6 @@
 #include "IA64.h"
 #include "llvm/Module.h"
 #include "llvm/PassManager.h"
-#include "llvm/CodeGen/IntrinsicLowering.h"
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/CodeGen/Passes.h"
 #include "llvm/Target/TargetOptions.h"
@@ -76,9 +75,8 @@
 
 /// IA64TargetMachine ctor - Create an LP64 architecture model
 ///
-IA64TargetMachine::IA64TargetMachine(const Module &M, IntrinsicLowering *IL,
-                                     const std::string &FS)
-  : TargetMachine("IA64", IL, true),
+IA64TargetMachine::IA64TargetMachine(const Module &M, const std::string &FS)
+  : TargetMachine("IA64", true),
     FrameInfo(TargetFrameInfo::StackGrowsDown, 16, 0),
     TLInfo(*this) { // FIXME? check this stuff
 }
diff --git a/lib/Target/IA64/IA64TargetMachine.h b/lib/Target/IA64/IA64TargetMachine.h
index fb633bc..7b9342e 100644
--- a/lib/Target/IA64/IA64TargetMachine.h
+++ b/lib/Target/IA64/IA64TargetMachine.h
@@ -21,7 +21,6 @@
 #include "IA64ISelLowering.h"
 
 namespace llvm {
-class IntrinsicLowering;
 
 class IA64TargetMachine : public TargetMachine {
   IA64InstrInfo      InstrInfo;
@@ -29,8 +28,7 @@
   //IA64JITInfo      JITInfo;
   IA64TargetLowering TLInfo;
 public:
-  IA64TargetMachine(const Module &M, IntrinsicLowering *IL,
-                    const std::string &FS);
+  IA64TargetMachine(const Module &M, const std::string &FS);
 
   virtual const IA64InstrInfo      *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo    *getFrameInfo() const { return &FrameInfo; }
diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
index 8985a43..6082956 100644
--- a/lib/Target/PowerPC/PPCTargetMachine.cpp
+++ b/lib/Target/PowerPC/PPCTargetMachine.cpp
@@ -18,7 +18,6 @@
 #include "llvm/Module.h"
 #include "llvm/PassManager.h"
 #include "llvm/Analysis/Verifier.h"
-#include "llvm/CodeGen/IntrinsicLowering.h"
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/CodeGen/Passes.h"
 #include "llvm/Target/TargetOptions.h"
@@ -58,9 +57,8 @@
   return getJITMatchQuality()/2;
 }
 
-PPCTargetMachine::PPCTargetMachine(const Module &M, IntrinsicLowering *IL,
-                                   const std::string &FS)
-: TargetMachine("PowerPC", IL, false, 4, 4, 4, 4, 4, 4, 2, 1, 1),
+PPCTargetMachine::PPCTargetMachine(const Module &M, const std::string &FS)
+: TargetMachine("PowerPC", false, 4, 4, 4, 4, 4, 4, 2, 1, 1),
   Subtarget(M, FS), FrameInfo(*this, false), JITInfo(*this),
   TLInfo(*this), InstrItins(Subtarget.getInstrItineraryData()) {
   if (TargetDefault == PPCTarget) {
diff --git a/lib/Target/PowerPC/PPCTargetMachine.h b/lib/Target/PowerPC/PPCTargetMachine.h
index 4038a2a..3b2e481 100644
--- a/lib/Target/PowerPC/PPCTargetMachine.h
+++ b/lib/Target/PowerPC/PPCTargetMachine.h
@@ -23,9 +23,7 @@
 
 namespace llvm {
 class PassManager;
-class IntrinsicLowering;
 class GlobalValue;
-class IntrinsicLowering;
 
 class PPCTargetMachine : public TargetMachine {
   PPCInstrInfo           InstrInfo;
@@ -35,8 +33,7 @@
   PPCTargetLowering      TLInfo;
   InstrItineraryData     InstrItins;
 public:
-  PPCTargetMachine(const Module &M, IntrinsicLowering *IL,
-                   const std::string &FS);
+  PPCTargetMachine(const Module &M, const std::string &FS);
 
   virtual const PPCInstrInfo     *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
diff --git a/lib/Target/Sparc/SparcTargetMachine.cpp b/lib/Target/Sparc/SparcTargetMachine.cpp
index 2b545ac..565ccb9 100644
--- a/lib/Target/Sparc/SparcTargetMachine.cpp
+++ b/lib/Target/Sparc/SparcTargetMachine.cpp
@@ -30,9 +30,8 @@
 
 /// SparcTargetMachine ctor - Create an ILP32 architecture model
 ///
-SparcTargetMachine::SparcTargetMachine(const Module &M, IntrinsicLowering *IL,
-                                       const std::string &FS)
-  : TargetMachine("Sparc", IL, false, 4, 4),
+SparcTargetMachine::SparcTargetMachine(const Module &M, const std::string &FS)
+  : TargetMachine("Sparc", false, 4, 4),
     Subtarget(M, FS), InstrInfo(Subtarget),
     FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0) {
 }
diff --git a/lib/Target/Sparc/SparcTargetMachine.h b/lib/Target/Sparc/SparcTargetMachine.h
index 196ad75..0cad652 100644
--- a/lib/Target/Sparc/SparcTargetMachine.h
+++ b/lib/Target/Sparc/SparcTargetMachine.h
@@ -22,7 +22,6 @@
 
 namespace llvm {
 
-class IntrinsicLowering;
 class Module;
 
 class SparcTargetMachine : public TargetMachine {
@@ -30,8 +29,7 @@
   SparcInstrInfo InstrInfo;
   TargetFrameInfo FrameInfo;
 public:
-  SparcTargetMachine(const Module &M, IntrinsicLowering *IL,
-                     const std::string &FS);
+  SparcTargetMachine(const Module &M, const std::string &FS);
 
   virtual const SparcInstrInfo *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
diff --git a/lib/Target/SparcV9/SparcV9BurgISel.cpp b/lib/Target/SparcV9/SparcV9BurgISel.cpp
index 1c03a9e..dcb99a7 100644
--- a/lib/Target/SparcV9/SparcV9BurgISel.cpp
+++ b/lib/Target/SparcV9/SparcV9BurgISel.cpp
@@ -4356,6 +4356,7 @@
 //==------------------------------------------------------------------------==//
 
 bool V9ISel::runOnFunction(Function &F) {
+  DefaultIntrinsicLowering IL;
   // First pass - Walk the function, lowering any calls to intrinsic functions
   // which the instruction selector cannot handle.
   for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
@@ -4376,7 +4377,7 @@
           default:
             // All other intrinsic calls we must lower.
             Instruction *Before = CI->getPrev();
-            Target.getIntrinsicLowering().LowerIntrinsicCall(CI);
+            IL.LowerIntrinsicCall(CI);
             if (Before) {        // Move iterator to instruction after call
               I = Before;  ++I;
             } else {
diff --git a/lib/Target/SparcV9/SparcV9TargetMachine.cpp b/lib/Target/SparcV9/SparcV9TargetMachine.cpp
index 0748018..a0d76bb 100644
--- a/lib/Target/SparcV9/SparcV9TargetMachine.cpp
+++ b/lib/Target/SparcV9/SparcV9TargetMachine.cpp
@@ -17,7 +17,6 @@
 #include "llvm/PassManager.h"
 #include "llvm/Assembly/PrintModulePass.h"
 #include "llvm/CodeGen/InstrScheduling.h"
-#include "llvm/CodeGen/IntrinsicLowering.h"
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/CodeGen/Passes.h"
 #include "llvm/Target/TargetOptions.h"
@@ -147,10 +146,9 @@
 }
 
 
-SparcV9TargetMachine::SparcV9TargetMachine(const Module &M,
-                                           IntrinsicLowering *il,
+SparcV9TargetMachine::SparcV9TargetMachine(const Module &M, 
                                            const std::string &FS)
-  : TargetMachine("UltraSparcV9-Native", il, false),
+  : TargetMachine("UltraSparcV9-Native", false),
     schedInfo(*this),
     regInfo(*this),
     frameInfo(*this),
diff --git a/lib/Target/SparcV9/SparcV9TargetMachine.h b/lib/Target/SparcV9/SparcV9TargetMachine.h
index 1f83282..3bbb6a4 100644
--- a/lib/Target/SparcV9/SparcV9TargetMachine.h
+++ b/lib/Target/SparcV9/SparcV9TargetMachine.h
@@ -32,8 +32,7 @@
   SparcV9FrameInfo frameInfo;
   SparcV9JITInfo   jitInfo;
 public:
-  SparcV9TargetMachine(const Module &M, IntrinsicLowering *IL,
-                       const std::string &FS);
+  SparcV9TargetMachine(const Module &M, const std::string &FS);
 
   virtual const TargetInstrInfo  *getInstrInfo() const { return &instrInfo; }
   virtual const TargetSchedInfo  *getSchedInfo() const { return &schedInfo; }
diff --git a/lib/Target/TargetMachine.cpp b/lib/Target/TargetMachine.cpp
index a2a4200..74c90ed 100644
--- a/lib/Target/TargetMachine.cpp
+++ b/lib/Target/TargetMachine.cpp
@@ -14,7 +14,6 @@
 #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;
 
@@ -70,8 +69,7 @@
 //---------------------------------------------------------------------------
 // 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,
@@ -80,23 +78,17 @@
   : 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
diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp
index ef603ea..f6d34ea 100644
--- a/lib/Target/X86/X86TargetMachine.cpp
+++ b/lib/Target/X86/X86TargetMachine.cpp
@@ -15,7 +15,6 @@
 #include "X86.h"
 #include "llvm/Module.h"
 #include "llvm/PassManager.h"
-#include "llvm/CodeGen/IntrinsicLowering.h"
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/CodeGen/Passes.h"
 #include "llvm/Target/TargetOptions.h"
@@ -69,10 +68,8 @@
 
 /// X86TargetMachine ctor - Create an ILP32 architecture model
 ///
-X86TargetMachine::X86TargetMachine(const Module &M,
-                                  IntrinsicLowering *IL,
-                                  const std::string &FS)
-  : TargetMachine("X86", IL, true, 4, 4, 4, 4, 4),
+X86TargetMachine::X86TargetMachine(const Module &M, const std::string &FS)
+  : TargetMachine("X86", true, 4, 4, 4, 4, 4),
     Subtarget(M, FS),
     FrameInfo(TargetFrameInfo::StackGrowsDown,
               Subtarget.getStackAlignment(), -4),
diff --git a/lib/Target/X86/X86TargetMachine.h b/lib/Target/X86/X86TargetMachine.h
index f63fc34..4ad0722 100644
--- a/lib/Target/X86/X86TargetMachine.h
+++ b/lib/Target/X86/X86TargetMachine.h
@@ -24,7 +24,6 @@
 #include "X86ISelLowering.h"
 
 namespace llvm {
-class IntrinsicLowering;
 
 class X86TargetMachine : public TargetMachine {
   X86InstrInfo      InstrInfo;
@@ -33,8 +32,7 @@
   X86JITInfo        JITInfo;
   X86TargetLowering TLInfo;
 public:
-  X86TargetMachine(const Module &M, IntrinsicLowering *IL,
-                   const std::string &FS);
+  X86TargetMachine(const Module &M, const std::string &FS);
 
   virtual const X86InstrInfo     *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }