[llvm-commits] CVS: llvm/lib/Target/X86/X86.h X86ATTAsmPrinter.cpp X86ATTAsmPrinter.h X86AsmPrinter.cpp X86AsmPrinter.h X86ELFWriter.cpp X86ISelDAGToDAG.cpp X86ISelLowering.h X86IntelAsmPrinter.cpp X86IntelAsmPrinter.h X86JITInfo.h X86TargetMachine.cpp X86TargetMachine.h

Evan Cheng evan.cheng at apple.com
Mon Mar 13 15:20:51 PST 2006



Changes in directory llvm/lib/Target/X86:

X86.h updated: 1.44 -> 1.45
X86ATTAsmPrinter.cpp updated: 1.30 -> 1.31
X86ATTAsmPrinter.h updated: 1.9 -> 1.10
X86AsmPrinter.cpp updated: 1.170 -> 1.171
X86AsmPrinter.h updated: 1.13 -> 1.14
X86ELFWriter.cpp updated: 1.2 -> 1.3
X86ISelDAGToDAG.cpp updated: 1.55 -> 1.56
X86ISelLowering.h updated: 1.32 -> 1.33
X86IntelAsmPrinter.cpp updated: 1.23 -> 1.24
X86IntelAsmPrinter.h updated: 1.10 -> 1.11
X86JITInfo.h updated: 1.7 -> 1.8
X86TargetMachine.cpp updated: 1.106 -> 1.107
X86TargetMachine.h updated: 1.31 -> 1.32
---
Log message:

Added getTargetLowering() to TargetMachine. Refactored targets to support this.


---
Diffs of the changes:  (+45 -37)

 X86.h                  |    8 ++++----
 X86ATTAsmPrinter.cpp   |    1 -
 X86ATTAsmPrinter.h     |    4 +---
 X86AsmPrinter.cpp      |   10 +++++-----
 X86AsmPrinter.h        |    5 ++---
 X86ELFWriter.cpp       |    6 +++---
 X86ISelDAGToDAG.cpp    |   10 ++++++----
 X86ISelLowering.h      |    6 ++++++
 X86IntelAsmPrinter.cpp |    1 -
 X86IntelAsmPrinter.h   |    5 +----
 X86JITInfo.h           |    6 +++---
 X86TargetMachine.cpp   |    8 ++++++--
 X86TargetMachine.h     |   12 ++++++++----
 13 files changed, 45 insertions(+), 37 deletions(-)


Index: llvm/lib/Target/X86/X86.h
diff -u llvm/lib/Target/X86/X86.h:1.44 llvm/lib/Target/X86/X86.h:1.45
--- llvm/lib/Target/X86/X86.h:1.44	Thu Feb 16 18:03:04 2006
+++ llvm/lib/Target/X86/X86.h	Mon Mar 13 17:20:37 2006
@@ -19,7 +19,7 @@
 
 namespace llvm {
 
-class TargetMachine;
+class X86TargetMachine;
 class PassManager;
 class FunctionPass;
 class IntrinsicLowering;
@@ -28,7 +28,7 @@
 /// createX86ISelDag - This pass converts a legalized DAG into a 
 /// X86-specific DAG, ready for instruction scheduling.
 ///
-FunctionPass *createX86ISelDag(TargetMachine &TM);
+FunctionPass *createX86ISelDag(X86TargetMachine &TM);
 
 /// createX86FloatingPointStackifierPass - This function returns a pass which
 /// converts floating point register references and pseudo instructions into
@@ -40,7 +40,7 @@
 /// assembly code for a MachineFunction to the given output stream,
 /// using the given target machine description.
 ///
-FunctionPass *createX86CodePrinterPass(std::ostream &o, TargetMachine &tm);
+FunctionPass *createX86CodePrinterPass(std::ostream &o, X86TargetMachine &tm);
 
 /// createX86CodeEmitterPass - Return a pass that emits the collected X86 code
 /// to the specified MCE object.
@@ -50,7 +50,7 @@
 /// code as an ELF object file.
 ///
 void addX86ELFObjectWriterPass(PassManager &FPM,
-                               std::ostream &o, TargetMachine &tm);
+                               std::ostream &o, X86TargetMachine &tm);
 
 /// createX86EmitCodeToMemory - Returns a pass that converts a register
 /// allocated function into raw machine code in a dynamically


Index: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
diff -u llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.30 llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.31
--- llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.30	Mon Mar  6 20:23:26 2006
+++ llvm/lib/Target/X86/X86ATTAsmPrinter.cpp	Mon Mar 13 17:20:37 2006
@@ -21,7 +21,6 @@
 #include "llvm/Target/TargetOptions.h"
 #include <iostream>
 using namespace llvm;
-using namespace x86;
 
 /// runOnMachineFunction - This uses the printMachineInstruction()
 /// method to print assembly for each instruction.


Index: llvm/lib/Target/X86/X86ATTAsmPrinter.h
diff -u llvm/lib/Target/X86/X86ATTAsmPrinter.h:1.9 llvm/lib/Target/X86/X86ATTAsmPrinter.h:1.10
--- llvm/lib/Target/X86/X86ATTAsmPrinter.h:1.9	Mon Mar  6 20:02:57 2006
+++ llvm/lib/Target/X86/X86ATTAsmPrinter.h	Mon Mar 13 17:20:37 2006
@@ -18,10 +18,9 @@
 #include "llvm/CodeGen/ValueTypes.h"
 
 namespace llvm {
-namespace x86 {
 
 struct X86ATTAsmPrinter : public X86SharedAsmPrinter {
- X86ATTAsmPrinter(std::ostream &O, TargetMachine &TM)
+ X86ATTAsmPrinter(std::ostream &O, X86TargetMachine &TM)
     : X86SharedAsmPrinter(O, TM) { }
 
   virtual const char *getPassName() const {
@@ -69,7 +68,6 @@
   bool runOnMachineFunction(MachineFunction &F);
 };
 
-} // end namespace x86
 } // end namespace llvm
 
 #endif


Index: llvm/lib/Target/X86/X86AsmPrinter.cpp
diff -u llvm/lib/Target/X86/X86AsmPrinter.cpp:1.170 llvm/lib/Target/X86/X86AsmPrinter.cpp:1.171
--- llvm/lib/Target/X86/X86AsmPrinter.cpp:1.170	Tue Mar  7 16:00:35 2006
+++ llvm/lib/Target/X86/X86AsmPrinter.cpp	Mon Mar 13 17:20:37 2006
@@ -14,10 +14,10 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "X86AsmPrinter.h"
 #include "X86ATTAsmPrinter.h"
 #include "X86IntelAsmPrinter.h"
 #include "X86Subtarget.h"
-#include "X86.h"
 #include "llvm/Constants.h"
 #include "llvm/Module.h"
 #include "llvm/Type.h"
@@ -25,10 +25,9 @@
 #include "llvm/Support/Mangler.h"
 #include "llvm/Support/CommandLine.h"
 using namespace llvm;
-using namespace x86;
 
-Statistic<> llvm::x86::EmittedInsts("asm-printer",
-                                    "Number of machine instrs printed");
+Statistic<> llvm::EmittedInsts("asm-printer",
+                               "Number of machine instrs printed");
 
 enum AsmWriterFlavorTy { att, intel };
 cl::opt<AsmWriterFlavorTy>
@@ -210,7 +209,8 @@
 /// for a MachineFunction to the given output stream, using the given target
 /// machine description.
 ///
-FunctionPass *llvm::createX86CodePrinterPass(std::ostream &o,TargetMachine &tm){
+FunctionPass *llvm::createX86CodePrinterPass(std::ostream &o,
+                                             X86TargetMachine &tm){
   switch (AsmWriterFlavor) {
   default:
     assert(0 && "Unknown asm flavor!");


Index: llvm/lib/Target/X86/X86AsmPrinter.h
diff -u llvm/lib/Target/X86/X86AsmPrinter.h:1.13 llvm/lib/Target/X86/X86AsmPrinter.h:1.14
--- llvm/lib/Target/X86/X86AsmPrinter.h:1.13	Mon Mar  6 20:23:26 2006
+++ llvm/lib/Target/X86/X86AsmPrinter.h	Mon Mar 13 17:20:37 2006
@@ -17,6 +17,7 @@
 #define X86ASMPRINTER_H
 
 #include "X86.h"
+#include "X86TargetMachine.h"
 #include "llvm/CodeGen/AsmPrinter.h"
 #include "llvm/CodeGen/DwarfWriter.h"
 #include "llvm/CodeGen/MachineDebugInfo.h"
@@ -25,7 +26,6 @@
 
 
 namespace llvm {
-namespace x86 {
 
 extern Statistic<> EmittedInsts;
 
@@ -56,7 +56,7 @@
 struct X86SharedAsmPrinter : public AsmPrinter {
   X86DwarfWriter DW;
 
-  X86SharedAsmPrinter(std::ostream &O, TargetMachine &TM)
+  X86SharedAsmPrinter(std::ostream &O, X86TargetMachine &TM)
     : AsmPrinter(O, TM), DW(O, this), forDarwin(false) { }
 
   bool doInitialization(Module &M);
@@ -90,7 +90,6 @@
   }
 };
 
-} // end namespace x86
 } // end namespace llvm
 
 #endif


Index: llvm/lib/Target/X86/X86ELFWriter.cpp
diff -u llvm/lib/Target/X86/X86ELFWriter.cpp:1.2 llvm/lib/Target/X86/X86ELFWriter.cpp:1.3
--- llvm/lib/Target/X86/X86ELFWriter.cpp:1.2	Mon Jul 11 00:17:48 2005
+++ llvm/lib/Target/X86/X86ELFWriter.cpp	Mon Mar 13 17:20:37 2006
@@ -13,15 +13,15 @@
 //===----------------------------------------------------------------------===//
 
 #include "X86.h"
+#include "X86TargetMachine.h"
 #include "llvm/PassManager.h"
 #include "llvm/CodeGen/ELFWriter.h"
-#include "llvm/Target/TargetMachine.h"
 using namespace llvm;
 
 namespace {
   class X86ELFWriter : public ELFWriter {
   public:
-    X86ELFWriter(std::ostream &O, TargetMachine &TM) : ELFWriter(O, TM) {
+    X86ELFWriter(std::ostream &O, X86TargetMachine &TM) : ELFWriter(O, TM) {
       e_machine = 3;   // EM_386
     }
   };
@@ -31,7 +31,7 @@
 /// as an ELF object file.
 ///
 void llvm::addX86ELFObjectWriterPass(PassManager &FPM,
-                                     std::ostream &O, TargetMachine &TM) {
+                                     std::ostream &O, X86TargetMachine &TM) {
   X86ELFWriter *EW = new X86ELFWriter(O, TM);
   FPM.add(EW);
   FPM.add(createX86CodeEmitterPass(EW->getMachineCodeEmitter()));


Index: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
diff -u llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.55 llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.56
--- llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:1.55	Tue Feb 28 15:13:57 2006
+++ llvm/lib/Target/X86/X86ISelDAGToDAG.cpp	Mon Mar 13 17:20:37 2006
@@ -15,9 +15,10 @@
 #define DEBUG_TYPE "isel"
 #include "X86.h"
 #include "X86InstrBuilder.h"
+#include "X86ISelLowering.h"
 #include "X86RegisterInfo.h"
 #include "X86Subtarget.h"
-#include "X86ISelLowering.h"
+#include "X86TargetMachine.h"
 #include "llvm/GlobalValue.h"
 #include "llvm/Instructions.h"
 #include "llvm/Support/CFG.h"
@@ -90,8 +91,9 @@
 
     unsigned GlobalBaseReg;
   public:
-    X86DAGToDAGISel(TargetMachine &TM)
-      : SelectionDAGISel(X86Lowering), X86Lowering(TM) {
+    X86DAGToDAGISel(X86TargetMachine &TM)
+      : SelectionDAGISel(X86Lowering),
+        X86Lowering(*TM.getTargetLowering()) {
       Subtarget = &TM.getSubtarget<X86Subtarget>();
     }
 
@@ -842,6 +844,6 @@
 /// createX86ISelDag - This pass converts a legalized DAG into a 
 /// X86-specific DAG, ready for instruction scheduling.
 ///
-FunctionPass *llvm::createX86ISelDag(TargetMachine &TM) {
+FunctionPass *llvm::createX86ISelDag(X86TargetMachine &TM) {
   return new X86DAGToDAGISel(TM);
 }


Index: llvm/lib/Target/X86/X86ISelLowering.h
diff -u llvm/lib/Target/X86/X86ISelLowering.h:1.32 llvm/lib/Target/X86/X86ISelLowering.h:1.33
--- llvm/lib/Target/X86/X86ISelLowering.h:1.32	Thu Feb 23 14:41:18 2006
+++ llvm/lib/Target/X86/X86ISelLowering.h	Mon Mar 13 17:20:37 2006
@@ -230,6 +230,12 @@
     std::vector<unsigned> 
       getRegClassForInlineAsmConstraint(const std::string &Constraint,
                                         MVT::ValueType VT) const;
+
+    /// isLegalAddressImmediate - Return true if the integer value or
+    /// GlobalValue can be used as the offset of the target addressing mode.
+    virtual bool isLegalAddressImmediate(int64_t V) const;
+    virtual bool isLegalAddressImmediate(GlobalValue *GV) const;
+
   private:
     // C Calling Convention implementation.
     std::vector<SDOperand> LowerCCCArguments(Function &F, SelectionDAG &DAG);


Index: llvm/lib/Target/X86/X86IntelAsmPrinter.cpp
diff -u llvm/lib/Target/X86/X86IntelAsmPrinter.cpp:1.23 llvm/lib/Target/X86/X86IntelAsmPrinter.cpp:1.24
--- llvm/lib/Target/X86/X86IntelAsmPrinter.cpp:1.23	Mon Mar  6 20:23:26 2006
+++ llvm/lib/Target/X86/X86IntelAsmPrinter.cpp	Mon Mar 13 17:20:37 2006
@@ -20,7 +20,6 @@
 #include "llvm/Support/Mangler.h"
 #include "llvm/Target/TargetOptions.h"
 using namespace llvm;
-using namespace x86;
 
 /// runOnMachineFunction - This uses the printMachineInstruction()
 /// method to print assembly for each instruction.


Index: llvm/lib/Target/X86/X86IntelAsmPrinter.h
diff -u llvm/lib/Target/X86/X86IntelAsmPrinter.h:1.10 llvm/lib/Target/X86/X86IntelAsmPrinter.h:1.11
--- llvm/lib/Target/X86/X86IntelAsmPrinter.h:1.10	Mon Mar  6 20:02:57 2006
+++ llvm/lib/Target/X86/X86IntelAsmPrinter.h	Mon Mar 13 17:20:37 2006
@@ -16,14 +16,12 @@
 
 #include "X86AsmPrinter.h"
 #include "llvm/CodeGen/ValueTypes.h"
-#include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/MRegisterInfo.h"
 
 namespace llvm {
-namespace x86 {
 
 struct X86IntelAsmPrinter : public X86SharedAsmPrinter {
- X86IntelAsmPrinter(std::ostream &O, TargetMachine &TM)
+ X86IntelAsmPrinter(std::ostream &O, X86TargetMachine &TM)
     : X86SharedAsmPrinter(O, TM) { }
 
   virtual const char *getPassName() const {
@@ -91,7 +89,6 @@
   bool doInitialization(Module &M);
 };
 
-} // end namespace x86
 } // end namespace llvm
 
 #endif


Index: llvm/lib/Target/X86/X86JITInfo.h
diff -u llvm/lib/Target/X86/X86JITInfo.h:1.7 llvm/lib/Target/X86/X86JITInfo.h:1.8
--- llvm/lib/Target/X86/X86JITInfo.h:1.7	Fri Jul 29 18:32:02 2005
+++ llvm/lib/Target/X86/X86JITInfo.h	Mon Mar 13 17:20:37 2006
@@ -17,13 +17,13 @@
 #include "llvm/Target/TargetJITInfo.h"
 
 namespace llvm {
-  class TargetMachine;
+  class X86TargetMachine;
   class IntrinsicLowering;
 
   class X86JITInfo : public TargetJITInfo {
-    TargetMachine &TM;
+    X86TargetMachine &TM;
   public:
-    X86JITInfo(TargetMachine &tm) : TM(tm) {useGOT = 0;}
+    X86JITInfo(X86TargetMachine &tm) : TM(tm) {useGOT = 0;}
 
     /// addPassesToJITCompile - Add passes to the specified pass manager to
     /// implement a fast dynamic compiler for this target.  Return true if this


Index: llvm/lib/Target/X86/X86TargetMachine.cpp
diff -u llvm/lib/Target/X86/X86TargetMachine.cpp:1.106 llvm/lib/Target/X86/X86TargetMachine.cpp:1.107
--- llvm/lib/Target/X86/X86TargetMachine.cpp:1.106	Thu Mar  9 15:51:28 2006
+++ llvm/lib/Target/X86/X86TargetMachine.cpp	Mon Mar 13 17:20:37 2006
@@ -79,7 +79,7 @@
     Subtarget(M, FS),
     FrameInfo(TargetFrameInfo::StackGrowsDown,
               Subtarget.getStackAlignment(), -4),
-    JITInfo(*this) {
+    JITInfo(*this), TLInfo(*this) {
   if (getRelocationModel() == Reloc::Default)
     if (Subtarget.isTargetDarwin())
       setRelocationModel(Reloc::DynamicNoPIC);
@@ -97,7 +97,7 @@
       FileType != TargetMachine::ObjectFile) return true;
 
   // Run loop strength reduction before anything else.
-  if (EnableX86LSR) PM.add(createLoopStrengthReducePass());
+  if (EnableX86LSR) PM.add(createLoopStrengthReducePass(1, &TLInfo));
 
   // FIXME: Implement efficient support for garbage collection intrinsics.
   PM.add(createLowerGCPass());
@@ -164,6 +164,10 @@
   // The JIT should use static relocation model.
   TM.setRelocationModel(Reloc::Static);
 
+  // Run loop strength reduction before anything else.
+  if (EnableX86LSR)
+    PM.add(createLoopStrengthReducePass(1, TM.getTargetLowering()));
+
   // FIXME: Implement efficient support for garbage collection intrinsics.
   PM.add(createLowerGCPass());
 


Index: llvm/lib/Target/X86/X86TargetMachine.h
diff -u llvm/lib/Target/X86/X86TargetMachine.h:1.31 llvm/lib/Target/X86/X86TargetMachine.h:1.32
--- llvm/lib/Target/X86/X86TargetMachine.h:1.31	Mon Nov  7 20:11:51 2005
+++ llvm/lib/Target/X86/X86TargetMachine.h	Mon Mar 13 17:20:37 2006
@@ -17,18 +17,21 @@
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/TargetFrameInfo.h"
 #include "llvm/PassManager.h"
+#include "X86.h"
 #include "X86InstrInfo.h"
 #include "X86JITInfo.h"
 #include "X86Subtarget.h"
+#include "X86ISelLowering.h"
 
 namespace llvm {
 class IntrinsicLowering;
 
 class X86TargetMachine : public TargetMachine {
-  X86InstrInfo    InstrInfo;
-  X86Subtarget    Subtarget;
-  TargetFrameInfo FrameInfo;
-  X86JITInfo      JITInfo;
+  X86InstrInfo      InstrInfo;
+  X86Subtarget      Subtarget;
+  TargetFrameInfo   FrameInfo;
+  X86JITInfo        JITInfo;
+  X86TargetLowering TLInfo;
 public:
   X86TargetMachine(const Module &M, IntrinsicLowering *IL,
                    const std::string &FS);
@@ -37,6 +40,7 @@
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
   virtual       TargetJITInfo    *getJITInfo()         { return &JITInfo; }
   virtual const TargetSubtarget  *getSubtargetImpl() const{ return &Subtarget; }
+  virtual       X86TargetLowering *getTargetLowering() { return &TLInfo; }
   virtual const MRegisterInfo    *getRegisterInfo() const {
     return &InstrInfo.getRegisterInfo();
   }






More information about the llvm-commits mailing list