This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[autovect] [patch] tree-ifcvt enhancements


Implementation of some enhancements to tree-ifcvt


1. Allow loads not only in header but also in any dominator of exit_bb.
2. Allow stores not only in exit_bb but also in any dominator of exit_bb.
3. Allow speculative load motion.
4. Perform a store-motion pass before actual ifcvt pass:

      if (c)
        *out = expr1;
      else
        *out = expr2;

will be converted into:

      if (c)
        tmp1 = expr1;
      else
        tmp2 = expr2;

      # tmp3 = PHI <tmp1, tmp2>
      *out = tmp3;


5. Allow several ifs in a loop body.


Bootstrapped and tested on powerpc-linux.
Committed to autovect-branch.

-- Victor

2006-05-07  Victor Kaplansky   <victork@il.ibm.com>

        * tree-if-conv.c (store_movable_loop_p): New.
        (store_movable_modify_expr_p): New.
        (last_store_found): New.
        (remove_all_phi_uses): New.
        (remove_store): New.
        (sink_store): New.
        (store_motion): New.
        (tree_if_conversion): Add call to store_movable_loop_p,
        store_motion and update_ssa.
        (if_convertible_modify_expr_p): Remove check of tree_could_trap_p
        on loads, Replace call to bb_with_exit_edge_p by dominated_by_p.
        (store_movable_stmt_p): New.
        (if_convertible_loop_p): Single call to calculate_dominance_info.
        (ifc_temp_var): Remove call to is_gimple_reg.
        (main_tree_if_conversion): add call to dump_tree_ssa.

(see attachment file: autovect.ifcvt.patch.txt)
(See attached file: autovect.ifcvt.patch.txt)

Attachment: autovect.ifcvt.patch.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]