Bootstrapped / tested on x86_64-unknown-linux-gnu, applied. Richard.
2016-07-15 Richard Biener <rguent...@suse.de> * tree-ssa-pre.c (get_representative_for): Make sure to return the value number of SSA names. (phi_translate_1): get_representative_for cannot return NULL. (do_pre_regular_insertion): Remove redundant call to fully_constant_expression. (do_pre_partial_partial_insertion): Likewise. Index: gcc/tree-ssa-pre.c =================================================================== *** gcc/tree-ssa-pre.c (revision 238369) --- gcc/tree-ssa-pre.c (working copy) *************** get_representative_for (const pre_expr e *** 1365,1371 **** switch (e->kind) { case NAME: ! return PRE_EXPR_NAME (e); case CONSTANT: return PRE_EXPR_CONSTANT (e); case NARY: --- 1365,1371 ---- switch (e->kind) { case NAME: ! return VN_INFO (PRE_EXPR_NAME (e))->valnum; case CONSTANT: return PRE_EXPR_CONSTANT (e); case NARY: *************** get_representative_for (const pre_expr e *** 1380,1386 **** { pre_expr rep = expression_for_id (i); if (rep->kind == NAME) ! return PRE_EXPR_NAME (rep); else if (rep->kind == CONSTANT) return PRE_EXPR_CONSTANT (rep); } --- 1380,1386 ---- { pre_expr rep = expression_for_id (i); if (rep->kind == NAME) ! return VN_INFO (PRE_EXPR_NAME (rep))->valnum; else if (rep->kind == CONSTANT) return PRE_EXPR_CONSTANT (rep); } *************** phi_translate_1 (pre_expr expr, bitmap_s *** 1448,1459 **** leader = find_leader_in_sets (op_val_id, set1, set2); result = phi_translate (leader, set1, set2, pred, phiblock); if (result && result != leader) ! { ! tree name = get_representative_for (result); ! if (!name) ! return NULL; ! newnary->op[i] = name; ! } else if (!result) return NULL; --- 1448,1454 ---- leader = find_leader_in_sets (op_val_id, set1, set2); result = phi_translate (leader, set1, set2, pred, phiblock); if (result && result != leader) ! newnary->op[i] = get_representative_for (result); else if (!result) return NULL; *************** phi_translate_1 (pre_expr expr, bitmap_s *** 1543,1561 **** } op_val_id = VN_INFO (op[n])->value_id; leader = find_leader_in_sets (op_val_id, set1, set2); - if (!leader) - break; opresult = phi_translate (leader, set1, set2, pred, phiblock); ! if (!opresult) ! break; ! if (opresult != leader) { tree name = get_representative_for (opresult); - if (!name) - break; changed |= name != op[n]; op[n] = name; } } if (n != 3) { --- 1538,1552 ---- } op_val_id = VN_INFO (op[n])->value_id; leader = find_leader_in_sets (op_val_id, set1, set2); opresult = phi_translate (leader, set1, set2, pred, phiblock); ! if (opresult && opresult != leader) { tree name = get_representative_for (opresult); changed |= name != op[n]; op[n] = name; } + else if (!opresult) + break; } if (n != 3) { *************** do_pre_regular_insertion (basic_block bl *** 3198,3204 **** break; } - eprime = fully_constant_expression (eprime); vprime = get_expr_value_id (eprime); edoubleprime = bitmap_find_leader (AVAIL_OUT (bprime), vprime); --- 3189,3194 ---- *************** do_pre_partial_partial_insertion (basic_ *** 3357,3363 **** break; } - eprime = fully_constant_expression (eprime); vprime = get_expr_value_id (eprime); edoubleprime = bitmap_find_leader (AVAIL_OUT (bprime), vprime); avail[pred->dest_idx] = edoubleprime; --- 3347,3352 ----