7178280: Failed new vector regression tests

Fri, 22 Jun 2012 10:40:48 -0700

author
kvn
date
Fri, 22 Jun 2012 10:40:48 -0700
changeset 3888
424142833d10
parent 3887
40782a131183
child 3889
751bd303aa45

7178280: Failed new vector regression tests
Summary: When looking for the same value in an other register check that all parts of that register has the same value.
Reviewed-by: johnc, twisti

src/share/vm/opto/postaloc.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/opto/postaloc.cpp	Thu Jun 21 09:52:38 2012 +0200
     1.2 +++ b/src/share/vm/opto/postaloc.cpp	Fri Jun 22 10:40:48 2012 -0700
     1.3 @@ -308,9 +308,10 @@
     1.4      }
     1.5  
     1.6      Node *vv = value[reg];
     1.7 -    if (n_regs > 1) {             // Doubles check for aligned-adjacent pair
     1.8 -      if( (reg&1)==0 ) continue;  // Wrong half of a pair
     1.9 -      if( vv != value[reg-1] ) continue; // Not a complete pair
    1.10 +    if (n_regs > 1) { // Doubles and vectors check for aligned-adjacent set
    1.11 +      uint last = (n_regs-1); // Looking for the last part of a set
    1.12 +      if ((reg&last) != last) continue; // Wrong part of a set
    1.13 +      if (!register_contains_value(vv, reg, n_regs, value)) continue; // Different value
    1.14      }
    1.15      if( vv == val ||            // Got a direct hit?
    1.16          (t && vv && vv->bottom_type() == t && vv->is_Mach() &&
    1.17 @@ -573,7 +574,6 @@
    1.18              // Record other half of doubles
    1.19              uint def_ideal_reg = def->ideal_reg();
    1.20              int n_regs = RegMask::num_registers(def_ideal_reg);
    1.21 -            bool is_vec = RegMask::is_vector(def_ideal_reg);
    1.22              for (int l = 1; l < n_regs; l++) {
    1.23                OptoReg::Name ureg_lo = OptoReg::add(ureg,-l);
    1.24                if (!value[ureg_lo] &&

mercurial