hopefully fixed registerhypertony at bb end
authorAdam Szalkowski <adam@ipd.info.uni-karlsruhe.de>
Wed, 30 Aug 2006 12:27:46 +0000 (12:27 +0000)
committerAdam Szalkowski <adam@ipd.info.uni-karlsruhe.de>
Wed, 30 Aug 2006 12:27:46 +0000 (12:27 +0000)
ir/be/bespillremat.c

index bd50b97..b576509 100644 (file)
@@ -1751,9 +1751,9 @@ luke_blockwalker(ir_node * bb, void * data)
                op->attr.live_range.op = bb;
 
                ir_snprintf(buf, sizeof(buf), "reg_out_%N_%N", bb, irn);
-               cst = lpp_add_cst_uniq(si->lpp, buf, lpp_less, 0.0);
+               cst = lpp_add_cst_uniq(si->lpp, buf, lpp_equal, 0.0);
 
-               /* reg_out - reload - remat - live_range <= 0 */
+               /* reg_out = reload + remat + live_range */
                lpp_set_factor_fast(si->lpp, cst, spill->reg_out, 1.0);
                if(reload != ILP_UNDEF) lpp_set_factor_fast(si->lpp, cst, reload, -1.0);
                lpp_set_factor_fast(si->lpp, cst, op->attr.live_range.ilp, -1.0);
@@ -1763,46 +1763,11 @@ luke_blockwalker(ir_node * bb, void * data)
                                lpp_set_factor_fast(si->lpp, cst, remat_op->attr.remat.ilp, -1.0);
                        }
                }
-               /* maybe we should also assure that reg_out >= live_range etc. */
        }
 
        if(opt_memcopies)
                insert_mem_copy_position(si, live, bb);
 
-       /* allow only one argument to die at pre remat. If two value die check_pre does
-        * not ensure a correct register pressure FIXME (verify this is really necessary!) */
-       foreach_pre_remat(si, bb, tmp) {
-               pset    *remat_args = pset_new_ptr(get_irn_arity(tmp));
-               int      n;
-               ir_node  *remat_arg;
-               op_t     *remat_op = get_irn_link(tmp);
-
-               for(n=get_irn_arity(tmp)-1; n>=0; --n) {
-                       remat_arg = get_irn_n(tmp, n);
-
-                       if(has_reg_class(si, remat_arg)) {
-                               pset_insert_ptr(remat_args, remat_arg);
-                       }
-               }
-
-               if(pset_count(remat_args)) {
-                       /* \sum_args reg_out >= #args * remat - 1 */
-                       ir_snprintf(buf, sizeof(buf), "one_may_die_%N", tmp);
-                       cst = lpp_add_cst_uniq(si->lpp, buf, lpp_greater, -1.0);
-                       lpp_set_factor_fast(si->lpp, cst, remat_op->attr.remat.ilp, -pset_count(remat_args));
-
-                       pset_foreach(remat_args, remat_arg) {
-                               spill = set_find_spill(spill_bb->ilp, remat_arg);
-
-                               if(spill) {
-                                       lpp_set_factor_fast(si->lpp, cst, spill->reg_out, 1.0);
-                               }
-                       }
-               }
-
-               del_pset(remat_args);
-       }
-
        /*
         * start new live ranges for values used by remats at end of block
         * and assure the remat args are available
@@ -2096,40 +2061,6 @@ skip_one_must_die:
                        }
                }
 
-               /* allow only one argument to die at pre remat. If two value die check_pre does
-                * not ensure a correct register pressure FIXME (verify this is really necessary!) */
-               foreach_pre_remat(si, irn, tmp) {
-                       pset    *remat_args = pset_new_ptr(get_irn_arity(tmp));
-                       int      n;
-                       ir_node  *remat_arg;
-                       op_t     *remat_op = get_irn_link(tmp);
-
-                       for(n=get_irn_arity(tmp)-1; n>=0; --n) {
-                               remat_arg = get_irn_n(tmp, n);
-
-                               if(has_reg_class(si, remat_arg)) {
-                                       pset_insert_ptr(remat_args, remat_arg);
-                               }
-                       }
-
-                       if(pset_count(remat_args)) {
-                               /* \sum_args next(lr) >= #args * remat - 1 */
-                               ir_snprintf(buf, sizeof(buf), "one_may_die_%N", tmp);
-                               cst = lpp_add_cst_uniq(si->lpp, buf, lpp_greater, -1.0);
-                               lpp_set_factor_fast(si->lpp, cst, remat_op->attr.remat.ilp, -pset_count(remat_args));
-
-                               pset_foreach(remat_args, remat_arg) {
-                                       op_t  *arg_op = get_irn_link(remat_arg);
-
-                                       if(arg_op->attr.live_range.ilp != ILP_UNDEF) {
-                                               lpp_set_factor_fast(si->lpp, cst, arg_op->attr.live_range.ilp, 1.0);
-                                       }
-                               }
-                       }
-
-                       del_pset(remat_args);
-               }
-
                /***********************************************************
                 *  I T E R A T I O N  O V E R  U S E S  F O R  E P I L O G
                 **********************************************************/