hotspot/src/share/vm/opto/superword.cpp
changeset 13488 a9ec58a1f613
parent 13485 6c7faa516fc6
child 13490 d19348851d2e
--- a/hotspot/src/share/vm/opto/superword.cpp	Tue Aug 21 10:48:50 2012 -0700
+++ b/hotspot/src/share/vm/opto/superword.cpp	Tue Aug 21 14:50:02 2012 -0700
@@ -1055,6 +1055,9 @@
 // Can code be generated for pack p?
 bool SuperWord::implemented(Node_List* p) {
   Node* p0 = p->at(0);
+  if (VectorNode::is_shift(p0) && in_bb(p0->in(2))) {
+    return false; // vector shift count should be loop's invariant.
+  }
   return VectorNode::implemented(p0->Opcode(), p->size(), velt_basic_type(p0));
 }
 
@@ -1404,6 +1407,7 @@
 
   if (same_opd) {
     if (opd->is_Vector() || opd->is_LoadVector()) {
+      assert(((opd_idx != 2) || !VectorNode::is_shift(p0)), "shift's count can't be vector");
       return opd; // input is matching vector
     }
     if ((opd_idx == 2) && VectorNode::is_shift(p0)) {