diff options
author | dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-27 17:45:21 +0000 |
---|---|---|
committer | dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-27 17:45:21 +0000 |
commit | 1bd13ef117738b816e270e9fd9e3d475d92eb4f3 (patch) | |
tree | 36b6b5291cd04acd1807e64b366402dc565251b6 /gcc/tree-ssa-operands.h | |
parent | 746852fec1b23f14c601c2456929ff05f2ff6668 (diff) | |
download | gcc-1bd13ef117738b816e270e9fd9e3d475d92eb4f3.tar.gz |
2004-10-27 Daniel Berlin <dberlin@dberlin.org>
Fix PR tree-optimization/17133
* tree-cfg.c (rewrite_to_new_ssa_names_bb): Also rewrite must
def kill operand.
* tree-flow-inline.h: V_MUST_DEF_OP became V_MUST_DEF_RESULT.
(get_v_must_def_result_ptr): Modify for new structure of
v_must_defs array.
(get_v_must_def_kill_ptr): New.
(op_iter_next_use): Add support for the kill that occurs in V_MUST_DEFs.
(op_iter_next_tree): Ditto. Also V_MAY_DEF_OP became V_MAY_DEF_RESULT.
(op_iter_next_def): V_MAY_DEF_OP became V_MAY_DEF_RESULT.
(op_iter_init): Initialize new mustu members.
(op_iter_next_mustdef): New function.
(op_iter_init_mustdef): Ditto.
* tree-flow.h (rewrite_def_def_chains): New function.
* tree-into-ssa.c (mark_def_sites): Handle mustdefkill operands.
(ssa_mark_def_sites): Ditto.
(rewrite_stmt): Ditto.
(ssa_rewrite_stmt): Ditto.
(rewrite_blocks): Factor out from rewrite_into_ssa.
(mark_def_block_sites): Ditto.
(rewrite_def_def_chains): New function, just rewrites def-def
chains without phi node insertion.
* tree-pass.h (TODO_fix_def_def_chains): New todo flag.
* tree-optimize.c (execute_todo): Handle TODO_fix_def_def_chains.
* tree-pretty-print.c (dump_vops): Print out MUST_DEF's so that
they include the rhs now.
* tree-ssa-ccp.c (visit_assignment): V_MUST_DEF_OP became
V_MUST_DEF_RESULT.
* tree-ssa-dce.c (mark_operand_necessary): Add phionly argument.
Update callers.
(mark_really_necessary_kill_operand_phis): New function.
(perform_tree_ssa_dce): Call it.
(pass_dce): Add TODO_fix_def_def_chains.
(pass_cd_dce): Ditto.
* tree-ssa-loop-im.c (determine_max_movement): Look at kills as
well.
(rewrite_mem_refs): Ditto.
* tree-ssa-loop-manip.c (find_uses_to_rename_stmt): Look at kills
as well.
* tree-ssa-operands.c (allocate_v_may_def_optype):
v_may_def_operand_type_t became v_def_use_operand_type_t.
(allocate_v_must_def_optype) Ditto.
(finalize_ssa_v_must_defs): Update for new operand type, as well
as setting the use portion as well.
(copy_virtual_operands): Copy the kill operand as well.
(create_ssa_artficial_load_stmt): V_MUST_DEF_OP became
V_MUST_DEF_RESULT.
* tree-ssa-operands.h (v_may_def_operand_type): Renamed to
v_def_use_operand_type.
(v_must_def_optype_d): Use v_def_use_operand_type.
(V_MUST_DEF_OP_*): Renamed to V_MUST_DEF_RESULT_*
(V_MUST_DEF_KILL_*): New macros.
(struct ssa_operand_iterator_d): Add num_v_mustu and v_mustu_i
members.
Rename existing must_i and num_v_must members to mustd_i and
num_v_mustd.
(SSA_OP_VMUSTDEFKILL): New flag.
(SSA_OP_VIRTUAL_KILLS): New flag.
(SSA_OP_ALL_OPERANDS): Add in SSA_OP_ALL_KILLS.
(SSA_OP_ALL_KILLS): New flag.
(FOR_EACH_SSA_MUSTDEF_OPERAND): New macro.
* tree-ssa.c (verify_ssa): Verify virtual kills as well.
* tree-vectorizer.c (vect_create_data_ref_ptr): V_MUST_DEF_OP
became V_MUST_DEF_RESULT.
(rename_variables_in_bb): Rename kill pointer as well.
* tree-dfa.c (compute_immediate_uses_for_stmt): Add kills into the
immediate uses.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89695 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-operands.h')
-rw-r--r-- | gcc/tree-ssa-operands.h | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/gcc/tree-ssa-operands.h b/gcc/tree-ssa-operands.h index ad0a916f9ba..521845ff215 100644 --- a/gcc/tree-ssa-operands.h +++ b/gcc/tree-ssa-operands.h @@ -58,17 +58,17 @@ typedef struct use_optype_d GTY(()) typedef use_optype_t *use_optype; /* Operand type which stores a def and a use tree. */ -typedef struct v_may_def_operand_type GTY(()) +typedef struct v_def_use_operand_type GTY(()) { tree def; tree use; -} v_may_def_operand_type_t; +} v_def_use_operand_type_t; /* This represents the MAY_DEFS for a stmt. */ typedef struct v_may_def_optype_d GTY(()) { unsigned num_v_may_defs; - struct v_may_def_operand_type GTY((length ("%h.num_v_may_defs"))) + struct v_def_use_operand_type GTY((length ("%h.num_v_may_defs"))) v_may_defs[1]; } v_may_def_optype_t; @@ -87,7 +87,7 @@ typedef vuse_optype_t *vuse_optype; typedef struct v_must_def_optype_d GTY(()) { unsigned num_v_must_defs; - tree GTY((length("%h.num_v_must_defs"))) v_must_defs[1]; + v_def_use_operand_type_t GTY((length("%h.num_v_must_defs"))) v_must_defs[1]; } v_must_def_optype_t; typedef v_must_def_optype_t *v_must_def_optype; @@ -157,12 +157,14 @@ typedef stmt_operands_t *stmt_operands_p; #define V_MUST_DEF_OPS(ANN) get_v_must_def_ops (ANN) #define STMT_V_MUST_DEF_OPS(STMT) get_v_must_def_ops (stmt_ann (STMT)) #define NUM_V_MUST_DEFS(OPS) ((OPS) ? (OPS)->num_v_must_defs : 0) -#define V_MUST_DEF_OP_PTR(OPS, I) get_v_must_def_op_ptr ((OPS), (I)) -#define V_MUST_DEF_OP(OPS, I) \ - (DEF_FROM_PTR (V_MUST_DEF_OP_PTR ((OPS), (I)))) -#define SET_V_MUST_DEF_OP(OPS, I, V) \ - (SET_DEF (V_MUST_DEF_OP_PTR ((OPS), (I)), (V))) - +#define V_MUST_DEF_RESULT_PTR(OPS, I) get_v_must_def_result_ptr ((OPS), (I)) +#define V_MUST_DEF_RESULT(OPS, I) \ + (DEF_FROM_PTR (V_MUST_DEF_RESULT_PTR ((OPS), (I)))) +#define SET_V_MUST_DEF_RESULT(OPS, I, V) \ + (SET_DEF (V_MUST_DEF_RESULT_PTR ((OPS), (I)), (V))) +#define V_MUST_DEF_KILL_PTR(OPS, I) get_v_must_def_kill_ptr ((OPS), (I)) +#define V_MUST_DEF_KILL(OPS, I) (USE_FROM_PTR (V_MUST_DEF_KILL_PTR ((OPS), (I)))) +#define SET_V_MUST_DEF_KILL(OPS, I, V) (SET_USE (V_MUST_DEF_KILL_PTR ((OPS), (I)), (V))) #define PHI_RESULT_PTR(PHI) get_phi_result_ptr (PHI) #define PHI_RESULT(PHI) DEF_FROM_PTR (PHI_RESULT_PTR (PHI)) @@ -199,13 +201,15 @@ typedef struct ssa_operand_iterator_d int num_vuse; int num_v_mayu; int num_v_mayd; - int num_v_must; + int num_v_mustu; + int num_v_mustd; int use_i; int def_i; int vuse_i; int v_mayu_i; int v_mayd_i; - int v_must_i; + int v_mustu_i; + int v_mustd_i; stmt_operands_p ops; bool done; } ssa_op_iter; @@ -218,13 +222,17 @@ typedef struct ssa_operand_iterator_d #define SSA_OP_VMAYUSE 0x08 /* USE portion of V_MAY_DEFS. */ #define SSA_OP_VMAYDEF 0x10 /* DEF portion of V_MAY_DEFS. */ #define SSA_OP_VMUSTDEF 0x20 /* V_MUST_DEF definitions. */ +#define SSA_OP_VMUSTDEFKILL 0x40 /* V_MUST_DEF kills. */ /* These are commonly grouped operand flags. */ #define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE | SSA_OP_VMAYUSE) #define SSA_OP_VIRTUAL_DEFS (SSA_OP_VMAYDEF | SSA_OP_VMUSTDEF) +#define SSA_OP_VIRTUAL_KILLS (SSA_OP_VMUSTDEFKILL) +#define SSA_OP_ALL_VIRTUALS (SSA_OP_VIRTUAL_USES | SSA_OP_VIRTUAL_KILLS | SSA_OP_VIRTUAL_DEFS) #define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE) #define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF) -#define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS) +#define SSA_OP_ALL_KILLS (SSA_OP_VIRTUAL_KILLS) +#define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS | SSA_OP_ALL_KILLS) /* This macro executes a loop over the operands of STMT specified in FLAG, returning each operand as a 'tree' in the variable TREEVAR. ITER is an @@ -258,4 +266,12 @@ typedef struct ssa_operand_iterator_d !op_iter_done (&(ITER)); \ op_iter_next_maydef (&(USEVAR), &(DEFVAR), &(ITER))) +/* This macro executes a loop over the V_MUST_DEF operands of STMT. The def + and kill for each V_MUST_DEF is returned in DEFVAR and KILLVAR. + ITER is an ssa_op_iter structure used to control the loop. */ +#define FOR_EACH_SSA_MUSTDEF_OPERAND(DEFVAR, KILLVAR, STMT, ITER) \ + for (op_iter_init_mustdef (&(ITER), STMT, &(KILLVAR), &(DEFVAR)); \ + !op_iter_done (&(ITER)); \ + op_iter_next_mustdef (&(KILLVAR), &(DEFVAR), &(ITER))) + #endif /* GCC_TREE_SSA_OPERANDS_H */ |