From e54027d92ff3f29c3492ed97db7700692b0c7929 Mon Sep 17 00:00:00 2001 From: kvn Date: Fri, 22 Jun 2012 10:40:48 -0700 Subject: [PATCH] 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 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/share/vm/opto/postaloc.cpp b/src/share/vm/opto/postaloc.cpp index 8e24d353d..912e07704 100644 --- a/src/share/vm/opto/postaloc.cpp +++ b/src/share/vm/opto/postaloc.cpp @@ -308,9 +308,10 @@ int PhaseChaitin::elide_copy( Node *n, int k, Block *current_block, Node_List &v } Node *vv = value[reg]; - if (n_regs > 1) { // Doubles check for aligned-adjacent pair - if( (reg&1)==0 ) continue; // Wrong half of a pair - if( vv != value[reg-1] ) continue; // Not a complete pair + if (n_regs > 1) { // Doubles and vectors check for aligned-adjacent set + uint last = (n_regs-1); // Looking for the last part of a set + if ((reg&last) != last) continue; // Wrong part of a set + if (!register_contains_value(vv, reg, n_regs, value)) continue; // Different value } if( vv == val || // Got a direct hit? (t && vv && vv->bottom_type() == t && vv->is_Mach() && @@ -573,7 +574,6 @@ void PhaseChaitin::post_allocate_copy_removal() { // Record other half of doubles uint def_ideal_reg = def->ideal_reg(); int n_regs = RegMask::num_registers(def_ideal_reg); - bool is_vec = RegMask::is_vector(def_ideal_reg); for (int l = 1; l < n_regs; l++) { OptoReg::Name ureg_lo = OptoReg::add(ureg,-l); if (!value[ureg_lo] && -- GitLab