Add some helper methods
authorChris Lattner <sabre@nondot.org>
Mon, 20 Mar 2006 00:55:52 +0000 (00:55 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 20 Mar 2006 00:55:52 +0000 (00:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26882 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetLowering.h

index 2f950b01a29b0cebb7e9d5acde63029ee120c84d..5083e86046d1420ea5dd9f1744418e76c6fb904f 100644 (file)
@@ -195,6 +195,15 @@ public:
     return getOperationAction(Op, VT) == Legal ||
            getOperationAction(Op, VT) == Custom;
   }
+  
+  
+  /// isVectorShuffleLegal - Return true if a vector shuffle is legal with the
+  /// specified mask and type.  Targets can specify exactly which masks they
+  /// support and the code generator is tasked with not creating illegal masks.
+  bool isShuffleLegal(MVT::ValueType VT, SDOperand Mask) const {
+    return isOperationLegal(ISD::VECTOR_SHUFFLE, VT) && 
+           isShuffleMaskLegal(Mask);
+  }
 
   /// getTypeToPromoteTo - If the action for this operation is to promote, this
   /// method returns the ValueType to promote to.
@@ -476,6 +485,14 @@ protected:
     TargetDAGCombineArray[NT >> 3] |= 1 << (NT&7);
   }
   
+  /// isShuffleMaskLegal - Targets can use this to indicate that they only
+  /// support *some* VECTOR_SHUFFLE operations, those with specific masks.
+  /// By default, if a target supports the VECTOR_SHUFFLE node, all mask values
+  /// are assumed to be legal.
+  virtual bool isShuffleMaskLegal(SDOperand Mask) const {
+    return true;
+  }
+  
 public:
 
   //===--------------------------------------------------------------------===//