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 ----

Reply via email to