- Re-enable population count loop idiom recognization
[oota-llvm.git] / include / llvm / TargetTransformInfo.h
index db9cc66cd6216a9dd00bd963b54bc9516b35cd41..a18cef6d017d2777bf84f5d6ab1ea0772b375950 100644 (file)
@@ -75,6 +75,18 @@ public:
 /// LSR, and LowerInvoke use this interface.
 class ScalarTargetTransformInfo {
 public:
+  /// PopcntHwSupport - Hardware support for population count. Compared to the
+  /// SW implementation, HW support is supposed to significantly boost the
+  /// performance when the population is dense, and it may or not may degrade
+  /// performance if the population is sparse. A HW support is considered as
+  /// "Fast" if it can outperform, or is on a par with, SW implementaion when
+  /// the population is sparse; otherwise, it is considered as "Slow".
+  enum PopcntHwSupport {
+    None,
+    Fast,
+    Slow
+  };
+
   virtual ~ScalarTargetTransformInfo() {}
 
   /// isLegalAddImmediate - Return true if the specified immediate is legal
@@ -122,6 +134,11 @@ public:
   virtual bool shouldBuildLookupTables() const {
     return true;
   }
+
+  /// getPopcntHwSupport - Return hardware support for population count.
+  virtual PopcntHwSupport getPopcntHwSupport(unsigned IntTyWidthInBit) const {
+    return None;
+  }
 };
 
 /// VectorTargetTransformInfo - This interface is used by the vectorizers