Arrange for FastISel code to have access to the MachineModuleInfo
authorDan Gohman <gohman@apple.com>
Tue, 23 Sep 2008 21:53:34 +0000 (21:53 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 23 Sep 2008 21:53:34 +0000 (21:53 +0000)
object. This will be needed to support debug info.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56508 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/FastISel.h
include/llvm/CodeGen/SelectionDAGISel.h
include/llvm/Target/TargetLowering.h
lib/CodeGen/SelectionDAG/FastISel.cpp
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
lib/Target/X86/X86FastISel.cpp
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86ISelLowering.h

index 33f595541c616ff8465bc973164938d584a5c2fc..763d7029e66284af7ea3fb2fb793fb68d3633eb2 100644 (file)
@@ -26,6 +26,7 @@ class MachineBasicBlock;
 class MachineConstantPool;
 class MachineFunction;
 class MachineFrameInfo;
+class MachineModuleInfo;
 class MachineRegisterInfo;
 class TargetData;
 class TargetInstrInfo;
@@ -44,6 +45,7 @@ protected:
   DenseMap<const BasicBlock *, MachineBasicBlock *> &MBBMap;
   DenseMap<const AllocaInst *, int> &StaticAllocaMap;
   MachineFunction &MF;
+  MachineModuleInfo *MMI;
   MachineRegisterInfo &MRI;
   MachineFrameInfo &MFI;
   MachineConstantPool &MCP;
@@ -94,6 +96,7 @@ public:
 
 protected:
   FastISel(MachineFunction &mf,
+           MachineModuleInfo *mmi,
            DenseMap<const Value *, unsigned> &vm,
            DenseMap<const BasicBlock *, MachineBasicBlock *> &bm,
            DenseMap<const AllocaInst *, int> &am);
index 86274ae1877d309dcd454c0aa0efec3372cb3dde..a1c6f5b79d7a491952f3f527c29ca70c07adf5af 100644 (file)
@@ -28,6 +28,7 @@ namespace llvm {
   class MachineBasicBlock;
   class MachineFunction;
   class MachineInstr;
+  class MachineModuleInfo;
   class TargetLowering;
   class FunctionLoweringInfo;
   class HazardRecognizer;
@@ -106,7 +107,8 @@ protected:
                     int64_t DesiredMaskS) const;
   
 private:
-  void SelectAllBasicBlocks(Function &Fn, MachineFunction &MF);
+  void SelectAllBasicBlocks(Function &Fn, MachineFunction &MF,
+                            MachineModuleInfo *MMI);
   void FinishBasicBlock();
 
   void SelectBasicBlock(BasicBlock *LLVMBB,
index af5641674c11dddb07551223bee062187cc60431..0a25f59db6af193f3aa15c8a02665bf9c6b1de1b 100644 (file)
@@ -40,6 +40,7 @@ namespace llvm {
   class MachineFunction;
   class MachineFrameInfo;
   class MachineInstr;
+  class MachineModuleInfo;
   class SDNode;
   class SDValue;
   class SelectionDAG;
@@ -1120,6 +1121,7 @@ public:
   /// or null if the target does not support "fast" ISel.
   virtual FastISel *
   createFastISel(MachineFunction &,
+                 MachineModuleInfo *,
                  DenseMap<const Value *, unsigned> &,
                  DenseMap<const BasicBlock *, MachineBasicBlock *> &,
                  DenseMap<const AllocaInst *, int> &) {
index 3139cb3bc7f5e30545543bfc0f5256bd7bba4dfa..4b773226072cfbb9b54144ff9105fb75323f0ac3 100644 (file)
@@ -450,7 +450,7 @@ FastISel::SelectOperator(User *I, unsigned Opcode) {
     UpdateValueMap(I, Reg);
     return true;
   }
-  
+
   default:
     // Unhandled instruction. Halt "fast" selection and bail.
     return false;
@@ -458,6 +458,7 @@ FastISel::SelectOperator(User *I, unsigned Opcode) {
 }
 
 FastISel::FastISel(MachineFunction &mf,
+                   MachineModuleInfo *mmi,
                    DenseMap<const Value *, unsigned> &vm,
                    DenseMap<const BasicBlock *, MachineBasicBlock *> &bm,
                    DenseMap<const AllocaInst *, int> &am)
@@ -466,6 +467,7 @@ FastISel::FastISel(MachineFunction &mf,
     MBBMap(bm),
     StaticAllocaMap(am),
     MF(mf),
+    MMI(mmi),
     MRI(MF.getRegInfo()),
     MFI(*MF.getFrameInfo()),
     MCP(*MF.getConstantPool()),
index c2938e35f88fc566474e2ffb88e3729e2aea7ff6..c1e80fc78894979fbca4cc21cb81d9e5d19456e5 100644 (file)
@@ -309,7 +309,8 @@ bool SelectionDAGISel::runOnFunction(Function &Fn) {
   DOUT << "\n\n\n=== " << Fn.getName() << "\n";
 
   FuncInfo->set(Fn, MF, EnableFastISel);
-  CurDAG->init(MF, getAnalysisToUpdate<MachineModuleInfo>());
+  MachineModuleInfo *MMI = getAnalysisToUpdate<MachineModuleInfo>();
+  CurDAG->init(MF, MMI);
   SDL->init(GFI, *AA);
 
   for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I)
@@ -317,7 +318,7 @@ bool SelectionDAGISel::runOnFunction(Function &Fn) {
       // Mark landing pad.
       FuncInfo->MBBMap[Invoke->getSuccessor(1)]->setIsLandingPad();
 
-  SelectAllBasicBlocks(Fn, MF);
+  SelectAllBasicBlocks(Fn, MF, MMI);
 
   // If the first basic block in the function has live ins that need to be
   // copied into vregs, emit the copies into the top of the block before
@@ -710,7 +711,8 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
   DEBUG(BB->dump());
 }  
 
-void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn, MachineFunction &MF) {
+void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn, MachineFunction &MF,
+                                            MachineModuleInfo *MMI) {
   for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) {
     BasicBlock *LLVMBB = &*I;
     BB = FuncInfo->MBBMap[LLVMBB];
@@ -726,7 +728,8 @@ void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn, MachineFunction &MF) {
     // Before doing SelectionDAG ISel, see if FastISel has been requested.
     // FastISel doesn't support EH landing pads, which require special handling.
     if (EnableFastISel && !BB->isLandingPad()) {
-      if (FastISel *F = TLI.createFastISel(*FuncInfo->MF, FuncInfo->ValueMap,
+      if (FastISel *F = TLI.createFastISel(*FuncInfo->MF, MMI,
+                                           FuncInfo->ValueMap,
                                            FuncInfo->MBBMap,
                                            FuncInfo->StaticAllocaMap)) {
         // Emit code for any incoming arguments. This must happen before
index 7747788e8136090af7f5af356807f0706ed7668d..b53e042edcb51c6e305d667e524c424170025bd4 100644 (file)
@@ -49,10 +49,11 @@ class X86FastISel : public FastISel {
 
 public:
   explicit X86FastISel(MachineFunction &mf,
+                       MachineModuleInfo *mmi,
                        DenseMap<const Value *, unsigned> &vm,
                        DenseMap<const BasicBlock *, MachineBasicBlock *> &bm,
                        DenseMap<const AllocaInst *, int> &am)
-    : FastISel(mf, vm, bm, am) {
+    : FastISel(mf, mmi, vm, bm, am) {
     Subtarget = &TM.getSubtarget<X86Subtarget>();
     StackPtr = Subtarget->is64Bit() ? X86::RSP : X86::ESP;
     X86ScalarSSEf64 = Subtarget->hasSSE2();
@@ -1160,9 +1161,10 @@ unsigned X86FastISel::TargetMaterializeAlloca(AllocaInst *C) {
 
 namespace llvm {
   llvm::FastISel *X86::createFastISel(MachineFunction &mf,
+                        MachineModuleInfo *mmi,
                         DenseMap<const Value *, unsigned> &vm,
                         DenseMap<const BasicBlock *, MachineBasicBlock *> &bm,
                         DenseMap<const AllocaInst *, int> &am) {
-    return new X86FastISel(mf, vm, bm, am);
+    return new X86FastISel(mf, mmi, vm, bm, am);
   }
 }
index f988048a1063c32035d27c3ee7502e9bdc4a18d0..18d0f6c78cab79ac92351a0a3b3b25c33dfc3317 100644 (file)
@@ -1866,12 +1866,13 @@ bool X86TargetLowering::IsEligibleForTailCallOptimization(CallSDNode *TheCall,
 
 FastISel *
 X86TargetLowering::createFastISel(MachineFunction &mf,
+                                  MachineModuleInfo *mmo,
                                   DenseMap<const Value *, unsigned> &vm,
                                   DenseMap<const BasicBlock *,
                                            MachineBasicBlock *> &bm,
                                   DenseMap<const AllocaInst *, int> &am) {
                                          
-  return X86::createFastISel(mf, vm, bm, am);
+  return X86::createFastISel(mf, mmo, vm, bm, am);
 }
 
 
index 96d829c583eb7806ff4a898fcf1fc4d6dd63b842..875787a53aac32a16535acfb0b2840c2d4dd2a89 100644 (file)
@@ -472,6 +472,7 @@ namespace llvm {
     /// or null if the target does not support "fast" ISel.
     virtual FastISel *
     createFastISel(MachineFunction &mf,
+                   MachineModuleInfo *mmi,
                    DenseMap<const Value *, unsigned> &,
                    DenseMap<const BasicBlock *, MachineBasicBlock *> &,
                    DenseMap<const AllocaInst *, int> &);
@@ -604,6 +605,7 @@ namespace llvm {
 
   namespace X86 {
     FastISel *createFastISel(MachineFunction &mf,
+                           MachineModuleInfo *mmi,
                            DenseMap<const Value *, unsigned> &,
                            DenseMap<const BasicBlock *, MachineBasicBlock *> &,
                            DenseMap<const AllocaInst *, int> &);