Lines Matching defs:pbi

274 /* When PROP_REG_INFO set, array contains pbi->insn_num of instruction
278 pbi->insn_num - reg_deaths[regno].
285 reseting pbi->insn_num to 0. */
1702 propagate_one_insn (struct propagate_block_info *pbi, rtx insn)
1705 int flags = pbi->flags;
1717 insn_is_dead = insn_dead_p (pbi, PATTERN (insn), 0, REG_NOTES (insn));
1719 && libcall_dead_p (pbi, note, insn));
1746 pbi->flags |= PROP_DEAD_INSN;
1747 mark_set_regs (pbi, PATTERN (insn), insn);
1748 pbi->flags &= ~PROP_DEAD_INSN;
1753 pbi->cc0_live = 0;
1816 && try_pre_increment_1 (pbi, insn))
1821 CLEAR_REG_SET (pbi->new_set);
1829 mark_set_regs (pbi, PATTERN (insn), insn);
1846 invalidate_mems_from_set (pbi, stack_pointer_rtx);
1849 mark_set_regs (pbi, PATTERN (insn), insn);
1860 EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i, rsi)
1863 EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i, rsi)
1869 mark_set_regs (pbi, PATTERN (insn), insn);
1887 free_EXPR_LIST_list (&pbi->mem_set_list);
1888 pbi->mem_set_list_len = 0;
1891 invalidate_mems_from_set (pbi, stack_pointer_rtx);
1898 mark_set_1 (pbi, CLOBBER, XEXP (XEXP (note, 0), 0),
1899 cond, insn, pbi->flags);
1917 mark_set_1 (pbi, code, regno_reg_rtx[i], cond, insn,
1918 pbi->flags & ~(PROP_DEATH_NOTES | PROP_REG_INFO));
1925 pbi->cc0_live = 0;
1929 mark_used_regs (pbi, PATTERN (insn), NULL_RTX, insn);
1953 mark_used_regs (pbi, XEXP (XEXP (note, 0), 0), cond, insn);
1957 && !REGNO_REG_SET_P (pbi->reg_live, STACK_POINTER_REGNUM))
1958 reg_deaths[STACK_POINTER_REGNUM] = pbi->insn_num;
1959 SET_REGNO_REG_SET (pbi->reg_live, STACK_POINTER_REGNUM);
1965 mark_used_reg (pbi, regno_reg_rtx[i], cond, insn);
1969 pbi->insn_num++;
1982 struct propagate_block_info *pbi = XNEW (struct propagate_block_info);
1984 pbi->bb = bb;
1985 pbi->reg_live = live;
1986 pbi->mem_set_list = NULL_RTX;
1987 pbi->mem_set_list_len = 0;
1988 pbi->local_set = local_set;
1989 pbi->cond_local_set = cond_local_set;
1990 pbi->cc0_live = 0;
1991 pbi->flags = flags;
1992 pbi->insn_num = 0;
1995 pbi->reg_next_use = XCNEWVEC (rtx, max_reg_num ());
1997 pbi->reg_next_use = NULL;
1999 pbi->new_set = BITMAP_ALLOC (NULL);
2002 pbi->reg_cond_dead = splay_tree_new (splay_tree_compare_ints, NULL,
2004 pbi->reg_cond_reg = BITMAP_ALLOC (NULL);
2077 SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (reg));
2096 splay_tree_insert (pbi->reg_cond_dead, i,
2133 add_to_mem_set_list (pbi, canon_mem);
2137 return pbi;
2143 free_propagate_block_info (struct propagate_block_info *pbi)
2145 free_EXPR_LIST_list (&pbi->mem_set_list);
2147 BITMAP_FREE (pbi->new_set);
2150 splay_tree_delete (pbi->reg_cond_dead);
2151 BITMAP_FREE (pbi->reg_cond_reg);
2154 if (pbi->flags & PROP_REG_INFO)
2156 int num = pbi->insn_num;
2160 EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i, rsi)
2166 if (pbi->reg_next_use)
2167 free (pbi->reg_next_use);
2169 free (pbi);
2194 struct propagate_block_info *pbi;
2198 pbi = init_propagate_block_info (bb, live, local_set, cond_local_set, flags);
2221 IOR_REG_SET (regs_live_at_setjmp, pbi->reg_live);
2223 prev = propagate_one_insn (pbi, insn);
2242 if (pbi->local_set)
2244 CLEAR_REGNO_REG_SET (pbi->cond_local_set, regno);
2245 SET_REGNO_REG_SET (pbi->local_set, regno);
2247 if (REGNO_REG_SET_P (pbi->reg_live, regno))
2248 SET_REGNO_REG_SET (pbi->new_set, regno);
2255 free_propagate_block_info (pbi);
2271 insn_dead_p (struct propagate_block_info *pbi, rtx x, int call_ok,
2291 || REGNO_REG_SET_P (pbi->reg_live, regno))
2306 return ! pbi->cc0_live;
2335 for (temp = pbi->mem_set_list; temp != 0; temp = XEXP (temp, 1))
2370 if (REGNO_REG_SET_P (pbi->reg_live, regno))
2380 if (REGNO_REG_SET_P (pbi->reg_live, regno+n))
2431 && ! insn_dead_p (pbi, XVECEXP (x, 0, i), call_ok, NULL_RTX))
2444 && ! REGNO_REG_SET_P (pbi->reg_live, REGNO (XEXP (x, 0))))
2473 libcall_dead_p (struct propagate_block_info *pbi, rtx note, rtx insn)
2515 if (! insn_dead_p (pbi, call_pat, 1, REG_NOTES (call)))
2522 if (! insn_dead_p (pbi, PATTERN (insn), 0, REG_NOTES (insn)))
2551 add_to_mem_set_list (struct propagate_block_info *pbi, rtx mem)
2560 for (i = pbi->mem_set_list; i ; i = XEXP (i, 1))
2570 if (pbi->flags & PROP_AUTOINC)
2580 if (pbi->mem_set_list_len < PARAM_VALUE (PARAM_MAX_FLOW_MEMORY_LOCATIONS))
2585 if (pbi->flags & PROP_AUTOINC)
2588 pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list);
2589 pbi->mem_set_list_len++;
2601 struct propagate_block_info *pbi = data;
2605 invalidate_mems_from_set (pbi, XEXP (x, 0));
2613 pbi->mem_set_list. */
2616 invalidate_mems_from_set (struct propagate_block_info *pbi, rtx exp)
2618 rtx temp = pbi->mem_set_list;
2636 pbi->mem_set_list = next;
2638 pbi->mem_set_list_len--;
2654 mark_set_regs (struct propagate_block_info *pbi, rtx x, rtx insn)
2659 int flags = pbi->flags;
2665 mark_set_1 (pbi, SET, XEXP (link, 0),
2678 mark_set_1 (pbi, code, SET_DEST (x), cond, insn, flags);
2715 mark_set_1 (pbi, code, SET_DEST (sub), cond, insn, flags);
2741 mark_set_1 (struct propagate_block_info *pbi, enum rtx_code code, rtx reg, rtx cond, rtx insn, int flags)
2759 mark_set_1 (pbi, code, XEXP (XVECEXP (reg, 0, i), 0), cond, insn,
2777 not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live, REGNO (reg));
2822 not_dead = (unsigned long) REGNO_REG_SET_P (pbi->reg_live,
2842 invalidate_mems_from_set (pbi, reg);
2848 for_each_rtx (&PATTERN (insn), invalidate_mems_from_autoinc, pbi);
2853 add_to_mem_set_list (pbi, canon_rtx (reg));
2872 int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
2873 if (pbi->local_set)
2877 CLEAR_REGNO_REG_SET (pbi->cond_local_set, i);
2879 && ! REGNO_REG_SET_P (pbi->local_set, i))
2880 SET_REGNO_REG_SET (pbi->cond_local_set, i);
2882 SET_REGNO_REG_SET (pbi->local_set, i);
2885 SET_REGNO_REG_SET (pbi->new_set, i);
2902 if (! mark_regno_cond_dead (pbi, i, cond))
2912 int blocknum = pbi->bb->index;
2917 y = pbi->reg_next_use[regno_first];
2921 pbi->reg_next_use[i] = 0;
2932 REG_FREQ (i) += REG_FREQ_FROM_BB (pbi->bb);
3028 if (! REGNO_REG_SET_P (pbi->reg_live, i))
3048 if ((pbi->flags & PROP_REG_INFO)
3049 && REGNO_REG_SET_P (pbi->reg_live, i))
3051 REG_LIVE_LENGTH (i) += pbi->insn_num - reg_deaths[i];
3054 CLEAR_REGNO_REG_SET (pbi->reg_live, i);
3063 pbi->reg_next_use[regno_first] = 0;
3095 mark_regno_cond_dead (struct propagate_block_info *pbi, int regno, rtx cond)
3102 if (REGNO_REG_SET_P (pbi->reg_cond_reg, regno))
3103 flush_reg_cond_reg (pbi, regno);
3108 splay_tree_remove (pbi->reg_cond_dead, regno);
3119 node = splay_tree_lookup (pbi->reg_cond_dead, regno);
3129 splay_tree_insert (pbi->reg_cond_dead, regno,
3132 SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
3159 splay_tree_remove (pbi->reg_cond_dead, regno);
3164 SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
3175 /* Called from splay_tree_delete for pbi->reg_cond_life. */
3219 flush_reg_cond_reg (struct propagate_block_info *pbi, int regno)
3225 while (splay_tree_foreach (pbi->reg_cond_dead,
3227 splay_tree_remove (pbi->reg_cond_dead, pair[1]);
3229 CLEAR_REGNO_REG_SET (pbi->reg_cond_reg, regno);
3508 attempt_auto_inc (struct propagate_block_info *pbi, rtx inc, rtx insn,
3569 if (BB_HEAD (pbi->bb) == insn)
3570 BB_HEAD (pbi->bb) = insns;
3579 pbi->reg_next_use[regno] = PREV_INSN (insn);
3581 pbi->reg_next_use[regno] = 0;
3586 if ((pbi->flags & PROP_REG_INFO)
3587 && !REGNO_REG_SET_P (pbi->reg_live, regno))
3588 reg_deaths[regno] = pbi->insn_num;
3594 SET_REGNO_REG_SET (pbi->reg_live, regno);
3638 if ((pbi->flags & PROP_REG_INFO)
3639 && REGNO_REG_SET_P (pbi->reg_live, regno))
3641 REG_LIVE_LENGTH (regno) += pbi->insn_num - reg_deaths[regno];
3644 CLEAR_REGNO_REG_SET (pbi->reg_live, REGNO (XEXP (note, 0)));
3656 REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb);
3668 find_auto_inc (struct propagate_block_info *pbi, rtx x, rtx insn)
3691 incr = pbi->reg_next_use[regno];
3713 attempt_auto_inc (pbi, gen_rtx_POST_INC (Pmode, addr), insn, x,
3717 attempt_auto_inc (pbi, gen_rtx_POST_DEC (Pmode, addr), insn, x,
3721 attempt_auto_inc (pbi, gen_rtx_PRE_INC (Pmode, addr), insn, x,
3725 attempt_auto_inc (pbi, gen_rtx_PRE_DEC (Pmode, addr), insn, x,
3728 attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
3734 attempt_auto_inc (pbi, gen_rtx_PRE_MODIFY (Pmode, addr,
3746 attempt_auto_inc (pbi, gen_rtx_POST_MODIFY (Pmode, addr,
3758 mark_used_reg (struct propagate_block_info *pbi, rtx reg,
3772 int needed_regno = REGNO_REG_SET_P (pbi->reg_live, i);
3780 some_not_set |= ! REGNO_REG_SET_P (pbi->new_set, i);
3782 if (pbi->flags & (PROP_LOG_LINKS | PROP_AUTOINC))
3786 pbi->reg_next_use[regno_first] = insn;
3789 if (pbi->flags & PROP_REG_INFO)
3815 int blocknum = pbi->bb->index;
3822 REG_FREQ (regno_first) += REG_FREQ_FROM_BB (pbi->bb);
3826 if (! REGNO_REG_SET_P (pbi->reg_live, i))
3829 reg_deaths[i] = pbi->insn_num;
3837 if ((pbi->flags & (PROP_DEATH_NOTES | PROP_REG_INFO))
3845 some_was_live |= REGNO_REG_SET_P (pbi->new_set, i);
3851 if ((pbi->flags & PROP_DEATH_NOTES)
3853 && (!(pbi->flags & PROP_POST_REGSTACK)
3860 if (pbi->flags & PROP_REG_INFO)
3868 if (! REGNO_REG_SET_P (pbi->reg_live, i)
3881 int this_was_live = REGNO_REG_SET_P (pbi->reg_live, i);
3884 SET_REGNO_REG_SET (pbi->reg_live, i);
3897 node = splay_tree_lookup (pbi->reg_cond_dead, i);
3914 splay_tree_remove (pbi->reg_cond_dead, i);
3918 SET_REGNO_REG_SET (pbi->reg_cond_reg,
3931 splay_tree_insert (pbi->reg_cond_dead, i,
3934 SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0)));
3943 splay_tree_remove (pbi->reg_cond_dead, i);
3954 mark_used_dest_regs (struct propagate_block_info *pbi, rtx x, rtx cond, rtx insn)
3975 if (pbi->flags & PROP_AUTOINC)
3976 find_auto_inc (pbi, x, insn);
3978 mark_used_regs (pbi, XEXP (x, 0), cond, insn);
3994 if ((pbi->flags & PROP_REG_INFO) && GET_CODE (x) == SUBREG)
4029 mark_used_regs (pbi, dest, cond, insn);
4043 mark_used_regs (struct propagate_block_info *pbi, rtx x, rtx cond, rtx insn)
4046 int flags = pbi->flags;
4067 pbi->cc0_live = 1;
4075 mark_used_regs (pbi, XEXP (XEXP (x, 0), 0), cond, insn);
4091 rtx temp = pbi->mem_set_list;
4104 pbi->mem_set_list = next;
4106 pbi->mem_set_list_len--;
4118 for_each_rtx (&PATTERN (insn), invalidate_mems_from_autoinc, pbi);
4123 find_auto_inc (pbi, x, insn);
4141 mark_used_reg (pbi, x, cond, insn);
4152 ret |= mark_used_dest_regs (pbi, XVECEXP (dest, 0, i), cond, insn);
4154 ret = mark_used_dest_regs (pbi, dest, cond, insn);
4158 mark_used_regs (pbi, SET_SRC (x), cond, insn);
4185 free_EXPR_LIST_list (&pbi->mem_set_list);
4186 pbi->mem_set_list_len = 0;
4198 mark_used_regs (pbi, ASM_OPERANDS_INPUT (x, j), cond, insn);
4206 mark_used_regs (pbi, COND_EXEC_TEST (x), NULL_RTX, insn);
4232 mark_used_regs (pbi, XEXP (x, i), cond, insn);
4238 mark_used_regs (pbi, XVECEXP (x, i, j), cond, insn);
4248 try_pre_increment_1 (struct propagate_block_info *pbi, rtx insn)
4256 rtx y = pbi->reg_next_use[regno];
4274 REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb);
4280 invalidate_mems_from_set (pbi, SET_DEST (x));