< prev index next >

src/hotspot/share/opto/vectornode.hpp

Print this page

        

@@ -1264,10 +1264,23 @@
   Node* vec1() const { return in(1); }
   Node* vec2() const { return in(2); }
   Node* vec_mask() const { return in(3); }
 };
 
+class VectorRearrangeNode : public VectorNode {
+public:
+  VectorRearrangeNode(Node* vec1, Node* shuffle)
+    : VectorNode(vec1, shuffle, vec1->bottom_type()->is_vect()) {
+    // assert(mask->is_VectorMask(), "VectorBlendNode requires that third argument be a mask");
+  }
+
+  virtual int Opcode() const;
+  Node* vec1() const { return in(1); }
+  Node* vec_shuffle() const { return in(2); }
+};
+
+
 class VectorLoadMaskNode : public VectorNode {
  public:
   VectorLoadMaskNode(Node* in, const TypeVect* vt)
     : VectorNode(in, vt) {
     assert(in->is_LoadVector(), "expected load vector");

@@ -1276,10 +1289,22 @@
 
   int GetOutMaskSize() const { return type2aelembytes(vect_type()->element_basic_type()); }
   virtual int Opcode() const;
 };
 
+class VectorLoadShuffleNode : public VectorNode {
+public:
+  VectorLoadShuffleNode(Node* in, const TypeVect* vt)
+    : VectorNode(in, vt) {
+    assert(in->is_LoadVector(), "expected load vector");
+    assert(in->as_LoadVector()->vect_type()->element_basic_type() == T_BYTE, "must be BYTE");
+  }
+
+  int GetOutShuffleSize() const { return type2aelembytes(vect_type()->element_basic_type()); }
+  virtual int Opcode() const;
+};
+
 class VectorStoreMaskNode : public VectorNode {
  private:
   int _mask_size;
  protected:
   uint size_of() const { return sizeof(*this); }
< prev index next >