src/share/vm/opto/superword.cpp

changeset 3748
dc682d9431f3
parent 3048
6987871cfb9b
child 3847
5e990493719e
     1.1 --- a/src/share/vm/opto/superword.cpp	Tue Apr 24 12:15:32 2012 -0700
     1.2 +++ b/src/share/vm/opto/superword.cpp	Mon May 07 12:37:46 2012 -0700
     1.3 @@ -1221,12 +1221,11 @@
     1.4        return opd; // input is matching vector
     1.5      }
     1.6      assert(!opd->is_VectorStore(), "such vector is not expected here");
     1.7 -    // Convert scalar input to vector. Use p0's type because it's container
     1.8 -    // maybe smaller than the operand's container.
     1.9 -    const Type* opd_t = velt_type(!in_bb(opd) ? p0 : opd);
    1.10 -    const Type* p0_t  = velt_type(p0);
    1.11 -    if (p0_t->higher_equal(opd_t)) opd_t = p0_t;
    1.12 -    VectorNode* vn    = VectorNode::scalar2vector(_phase->C, opd, vlen, opd_t);
    1.13 +    // Convert scalar input to vector with the same number of elements as
    1.14 +    // p0's vector. Use p0's type because size of operand's container in
    1.15 +    // vector should match p0's size regardless operand's size.
    1.16 +    const Type* p0_t = velt_type(p0);
    1.17 +    VectorNode* vn = VectorNode::scalar2vector(_phase->C, opd, vlen, p0_t);
    1.18  
    1.19      _phase->_igvn.register_new_node_with_optimizer(vn);
    1.20      _phase->set_ctrl(vn, _phase->get_ctrl(opd));
    1.21 @@ -1234,14 +1233,15 @@
    1.22    }
    1.23  
    1.24    // Insert pack operation
    1.25 -  const Type* opd_t = velt_type(!in_bb(opd) ? p0 : opd);
    1.26 -  PackNode* pk = PackNode::make(_phase->C, opd, opd_t);
    1.27 +  const Type* p0_t = velt_type(p0);
    1.28 +  PackNode* pk = PackNode::make(_phase->C, opd, p0_t);
    1.29 +  DEBUG_ONLY( const BasicType opd_bt = opd->bottom_type()->basic_type(); )
    1.30  
    1.31    for (uint i = 1; i < vlen; i++) {
    1.32      Node* pi = p->at(i);
    1.33      Node* in = pi->in(opd_idx);
    1.34      assert(my_pack(in) == NULL, "Should already have been unpacked");
    1.35 -    assert(opd_t == velt_type(!in_bb(in) ? pi : in), "all same type");
    1.36 +    assert(opd_bt == in->bottom_type()->basic_type(), "all same type");
    1.37      pk->add_opd(in);
    1.38    }
    1.39    _phase->_igvn.register_new_node_with_optimizer(pk);

mercurial