This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Add virual_operand_p predicate
- From: Richard Guenther <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 8 Aug 2012 15:54:14 +0200 (CEST)
- Subject: [PATCH] Add virual_operand_p predicate
This adds a virual_operand_p predicate and uses it where we currently
use the bit on the decl (VAR_DECL_IS_VIRTUAL_OPERAND) directly.
I suspect most of the is_gimple_reg users in SSA optimizers can
be replaced by this predicate eventually making is_gimple_reg a
private predicate to the gimplifier ...
Bootstrap & regtest pending on x86_64-unknown-linux-gnu.
Richard.
2012-08-08 Richard Guenther <rguenther@suse.de>
* tree-ssa-operands.h (virtual_operand_p): Declare.
* tree-ssa-operands.c (virtual_operand_p): New predicate.
* gimple.c (is_gimple_reg): Use virtual_operand_p.
* tree-into-ssa.c (prepare_block_for_update): Likewise.
* tree-vect-loop-manip.c (adjust_debug_stmts): Likewise.
Index: gcc/gimple.c
===================================================================
*** gcc/gimple.c (revision 190226)
--- gcc/gimple.c (working copy)
*************** is_gimple_id (tree t)
*** 2782,2800 ****
bool
is_gimple_reg (tree t)
{
! if (TREE_CODE (t) == SSA_NAME)
! {
! t = SSA_NAME_VAR (t);
! if (TREE_CODE (t) == VAR_DECL
! && VAR_DECL_IS_VIRTUAL_OPERAND (t))
! return false;
! return true;
! }
!
! if (TREE_CODE (t) == VAR_DECL
! && VAR_DECL_IS_VIRTUAL_OPERAND (t))
return false;
if (!is_gimple_variable (t))
return false;
--- 2782,2793 ----
bool
is_gimple_reg (tree t)
{
! if (virtual_operand_p (t))
return false;
+ if (TREE_CODE (t) == SSA_NAME)
+ return true;
+
if (!is_gimple_variable (t))
return false;
Index: gcc/tree-into-ssa.c
===================================================================
*** gcc/tree-into-ssa.c (revision 190226)
--- gcc/tree-into-ssa.c (working copy)
*************** prepare_block_for_update (basic_block bb
*** 2548,2561 ****
gimple phi = gsi_stmt (si);
tree lhs_sym, lhs = gimple_phi_result (phi);
- lhs_sym = DECL_P (lhs) ? lhs : SSA_NAME_VAR (lhs);
-
if (TREE_CODE (lhs) == SSA_NAME
! && (TREE_CODE (lhs_sym) != VAR_DECL
! || !VAR_DECL_IS_VIRTUAL_OPERAND (lhs_sym)
! || !cfun->gimple_df->rename_vops))
continue;
mark_for_renaming (lhs_sym);
mark_def_interesting (lhs_sym, phi, bb, insert_phi_p);
--- 2568,2579 ----
gimple phi = gsi_stmt (si);
tree lhs_sym, lhs = gimple_phi_result (phi);
if (TREE_CODE (lhs) == SSA_NAME
! && (! virtual_operand_p (lhs)
! || ! cfun->gimple_df->rename_vops))
continue;
+ lhs_sym = DECL_P (lhs) ? lhs : SSA_NAME_VAR (lhs);
mark_for_renaming (lhs_sym);
mark_def_interesting (lhs_sym, phi, bb, insert_phi_p);
Index: gcc/tree-ssa-operands.c
===================================================================
*** gcc/tree-ssa-operands.c (revision 190226)
--- gcc/tree-ssa-operands.c (working copy)
*************** debug_immediate_uses_for (tree var)
*** 1432,1437 ****
--- 1421,1444 ----
}
+ /* Return true if OP, an SSA name or a DECL is a virtual operand. */
+
+ bool
+ virtual_operand_p (tree op)
+ {
+ if (TREE_CODE (op) == SSA_NAME)
+ {
+ op = SSA_NAME_VAR (op);
+ if (!op)
+ return false;
+ }
+
+ if (TREE_CODE (op) == VAR_DECL)
+ return VAR_DECL_IS_VIRTUAL_OPERAND (op);
+
+ return false;
+ }
+
/* Unlink STMTs virtual definition from the IL by propagating its use. */
void
Index: gcc/tree-ssa-operands.h
===================================================================
*** gcc/tree-ssa-operands.h (revision 190226)
--- gcc/tree-ssa-operands.h (working copy)
*************** extern void debug_decl_set (bitmap);
*** 116,121 ****
--- 116,122 ----
extern bool ssa_operands_active (void);
+ extern bool virtual_operand_p (tree);
extern void unlink_stmt_vdef (gimple);
enum ssa_op_iter_type {
Index: gcc/tree-vect-loop-manip.c
===================================================================
*** gcc/tree-vect-loop-manip.c (revision 190226)
--- gcc/tree-vect-loop-manip.c (working copy)
*************** adjust_debug_stmts (tree from, tree to,
*** 205,212 ****
{
adjust_info ai;
! if (MAY_HAVE_DEBUG_STMTS && TREE_CODE (from) == SSA_NAME
! && SSA_NAME_VAR (from) != gimple_vop (cfun))
{
ai.from = from;
ai.to = to;
--- 205,213 ----
{
adjust_info ai;
! if (MAY_HAVE_DEBUG_STMTS
! && TREE_CODE (from) == SSA_NAME
! && ! virtual_operand_p (from))
{
ai.from = from;
ai.to = to;