[llvm-commits] CVS: llvm/include/llvm/Target/TargetLowering.h

Evan Cheng evan.cheng at apple.com
Thu Mar 16 13:47:56 PST 2006



Changes in directory llvm/include/llvm/Target:

TargetLowering.h updated: 1.60 -> 1.61
---
Log message:

Added a way for TargetLowering to specify what values can be used as the
scale component of the target addressing mode.


---
Diffs of the changes:  (+28 -9)

 TargetLowering.h |   37 ++++++++++++++++++++++++++++---------
 1 files changed, 28 insertions(+), 9 deletions(-)


Index: llvm/include/llvm/Target/TargetLowering.h
diff -u llvm/include/llvm/Target/TargetLowering.h:1.60 llvm/include/llvm/Target/TargetLowering.h:1.61
--- llvm/include/llvm/Target/TargetLowering.h:1.60	Mon Mar 13 17:15:27 2006
+++ llvm/include/llvm/Target/TargetLowering.h	Thu Mar 16 15:47:42 2006
@@ -560,15 +560,6 @@
   virtual bool isOperandValidForConstraint(SDOperand Op, char ConstraintLetter);
   
   //===--------------------------------------------------------------------===//
-  // Loop Strength Reduction hooks
-  //
-  
-  /// 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;
-  
-  //===--------------------------------------------------------------------===//
   // Scheduler hooks
   //
   
@@ -580,6 +571,34 @@
   virtual MachineBasicBlock *InsertAtEndOfBasicBlock(MachineInstr *MI,
                                                      MachineBasicBlock *MBB);
 
+  //===--------------------------------------------------------------------===//
+  // Loop Strength Reduction hooks
+  //
+  
+  /// 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;
+
+  typedef std::vector<unsigned>::const_iterator legal_am_scale_iterator;
+  legal_am_scale_iterator legal_am_scale_begin() const {
+    return LegalAddressScales.begin();
+  }
+  legal_am_scale_iterator legal_am_scale_end() const {
+    return LegalAddressScales.end();
+  }
+
+protected:
+  /// addLegalAddressScale - Add a integer (> 1) value which can be used as
+  /// scale in the target addressing mode. Note: the ordering matters so the
+  /// least efficient ones should be entered first.
+  void addLegalAddressScale(unsigned Scale) {
+    LegalAddressScales.push_back(Scale);
+  }
+
+private:
+  std::vector<unsigned> LegalAddressScales;
+  
 private:
   TargetMachine &TM;
   const TargetData &TD;






More information about the llvm-commits mailing list