diff options
author | Steven Bosscher <steven@gcc.gnu.org> | 2005-06-05 10:58:34 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2005-06-05 10:58:34 +0000 |
commit | 862e28863e70173f97b4eb3d6af9d3c218878e8b (patch) | |
tree | 22a8bf7f1bbc66bf93f5637f65da4995df3bfb23 | |
parent | 88088c03967bc1ccf78ee8ddd9c0612f565df20a (diff) | |
download | gcc-862e28863e70173f97b4eb3d6af9d3c218878e8b.zip gcc-862e28863e70173f97b4eb3d6af9d3c218878e8b.tar.gz gcc-862e28863e70173f97b4eb3d6af9d3c218878e8b.tar.bz2 |
i386.c (x86_use_loop): Remove.
* config/i386/i386.c (x86_use_loop): Remove.
* config/i386/i386.h (x86_use_loop): Remove extern decl.
(TARGET_USE_LOOP): Remove.
* config/i386/i386.md (doloop_end, doloop_end_internal): Remove.
Also remove related define_splits.
From-SVN: r100618
-rw-r--r-- | gcc/ChangeLog | 128 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 1 | ||||
-rw-r--r-- | gcc/config/i386/i386.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 107 |
4 files changed, 69 insertions, 170 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 47bcfa0..d0a38c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,65 +1,73 @@ +2005-06-05 Steven Bosscher <stevenb@suse.de> + + * config/i386/i386.c (x86_use_loop): Remove. + * config/i386/i386.h (x86_use_loop): Remove extern decl. + (TARGET_USE_LOOP): Remove. + * config/i386/i386.md (doloop_end, doloop_end_internal): Remove. + Also remove related define_splits. + 2005-06-05 Dorit Nuzman <dorit@il.ibm.com> - * tree-flow.h (stmt_ann_d): Move aux to ... - (tree_ann_common_d): ... here. - * tree-ssa-loop-im.c (LIM_DATA, determine_invariantness_stmt, - move_computations_stmt, schedule_sm): Update references to - aux. - * tree-vectorizer.h (set_stmt_info, vinfo_for_stmt): Likewise. - * tree-vect-transform.c (vect_create_index_for_vector_ref): Update - call to set_stmt_info. - (vect_transform_loop): Likewise. - * tree-vectorizer.c (new_loop_vec_info, destroy_loop_vec_info): - Likewise. - - * tree-vect-analyze.c (vect_analyze_scalar_cycles): Made void instead of - bool. - (vect_mark_relevant): Takes two additional arguments - live_p and - relevant_p. Set RELEVANT_P and LIVE_P according to these arguments. - (vect_stmt_relevant_p): Differentiate between a live stmt and a - relevant stmt. Return two values = live_p and relevant_p. - (vect_mark_stmts_to_be_vectorized): Call vect_mark_relevant and - vect_stmt_relevant_p with additional arguments. Phis are no longer - put into the worklist (analyzed seperately in analyze_scalar_cycles). - (vect_determine_vectorization_factor): Also check for LIVE_P, because a - stmt that is marked as irrelevant and live, cause it's only used out - side the loop, may need to be vectorized (e.g. reduction). - (vect_analyze_operations): Examine phis. Call - vectorizable_live_operation for for LIVE_P stmts. Check if - need_to_vectorize. - (vect_analyze_scalar_cycles): Update documentation. Don't fail - vectorization - just classify the scalar cycles created by the loop - phis. Call vect_is_simple_reduction. - (vect_analyze_loop): Call to analyze_scalar_cycles moved earlier. - * tree-vect-transform.c (vect_create_index_for_vector_ref): Update - call to set_stmt_info. - (vect_get_vec_def_for_operand): Code reorganized - the code that - classifies the type of use was factored out to vect_is_simple_use. - (vectorizable_store, vect_is_simple_cond): Call vect_is_simple_use with - additional arguments. - (vectorizable_assignment): Likewise. Also make sure the stmt is relevant - and computes a loop_vec_def. - (vectorizable_operation, vectorizable_load, vectorizable_condition): - Likewise. - (vectorizable_live_operation): New. - (vect_transform_stmt): Handle LIVE_P stmts. - * tree-vectorizer.c (new_stmt_vec_info): Initialize the new fields - STMT_VINFO_LIVE_P and STMT_VINFO_DEF_TYPE. - (new_loop_vec_info, destroy_loop_vec_info): Also handle phis. - (vect_is_simple_use): Determine the type of the def and return it - in a new function argument. Consider vect_reduction_def and - vect_induction_def, but for now these are not supported. - (vect_is_simple_reduction): New. Empty for now. - * tree-vectorizer.h (vect_def_type): New enum type. - (_stmt_vec_info): Added new fields - live and _stmt_vec_info. - (STMT_VINFO_LIVE_P, STMT_VINFO_DEF_TYPE): New accessor macros. - (vect_is_simple_use): New arguments added to function declaration. - (vect_is_simple_reduction): New function declaration. - (vectorizable_live_operation): New function declaration. - - * tree-vect-analyze.c (vect_can_advance_ivs_p): Add debug printout. - (vect_can_advance_ivs_p): Likewise. - * tree-vect-transform.c (vect_update_ivs_after_vectorizer): Likewise. + * tree-flow.h (stmt_ann_d): Move aux to ... + (tree_ann_common_d): ... here. + * tree-ssa-loop-im.c (LIM_DATA, determine_invariantness_stmt, + move_computations_stmt, schedule_sm): Update references to + aux. + * tree-vectorizer.h (set_stmt_info, vinfo_for_stmt): Likewise. + * tree-vect-transform.c (vect_create_index_for_vector_ref): Update + call to set_stmt_info. + (vect_transform_loop): Likewise. + * tree-vectorizer.c (new_loop_vec_info, destroy_loop_vec_info): + Likewise. + + * tree-vect-analyze.c (vect_analyze_scalar_cycles): Made void instead of + bool. + (vect_mark_relevant): Takes two additional arguments - live_p and + relevant_p. Set RELEVANT_P and LIVE_P according to these arguments. + (vect_stmt_relevant_p): Differentiate between a live stmt and a + relevant stmt. Return two values = live_p and relevant_p. + (vect_mark_stmts_to_be_vectorized): Call vect_mark_relevant and + vect_stmt_relevant_p with additional arguments. Phis are no longer + put into the worklist (analyzed seperately in analyze_scalar_cycles). + (vect_determine_vectorization_factor): Also check for LIVE_P, because a + stmt that is marked as irrelevant and live, cause it's only used out + side the loop, may need to be vectorized (e.g. reduction). + (vect_analyze_operations): Examine phis. Call + vectorizable_live_operation for for LIVE_P stmts. Check if + need_to_vectorize. + (vect_analyze_scalar_cycles): Update documentation. Don't fail + vectorization - just classify the scalar cycles created by the loop + phis. Call vect_is_simple_reduction. + (vect_analyze_loop): Call to analyze_scalar_cycles moved earlier. + * tree-vect-transform.c (vect_create_index_for_vector_ref): Update + call to set_stmt_info. + (vect_get_vec_def_for_operand): Code reorganized - the code that + classifies the type of use was factored out to vect_is_simple_use. + (vectorizable_store, vect_is_simple_cond): Call vect_is_simple_use with + additional arguments. + (vectorizable_assignment): Likewise. Also make sure the stmt is relevant + and computes a loop_vec_def. + (vectorizable_operation, vectorizable_load, vectorizable_condition): + Likewise. + (vectorizable_live_operation): New. + (vect_transform_stmt): Handle LIVE_P stmts. + * tree-vectorizer.c (new_stmt_vec_info): Initialize the new fields + STMT_VINFO_LIVE_P and STMT_VINFO_DEF_TYPE. + (new_loop_vec_info, destroy_loop_vec_info): Also handle phis. + (vect_is_simple_use): Determine the type of the def and return it + in a new function argument. Consider vect_reduction_def and + vect_induction_def, but for now these are not supported. + (vect_is_simple_reduction): New. Empty for now. + * tree-vectorizer.h (vect_def_type): New enum type. + (_stmt_vec_info): Added new fields - live and _stmt_vec_info. + (STMT_VINFO_LIVE_P, STMT_VINFO_DEF_TYPE): New accessor macros. + (vect_is_simple_use): New arguments added to function declaration. + (vect_is_simple_reduction): New function declaration. + (vectorizable_live_operation): New function declaration. + + * tree-vect-analyze.c (vect_can_advance_ivs_p): Add debug printout. + (vect_can_advance_ivs_p): Likewise. + * tree-vect-transform.c (vect_update_ivs_after_vectorizer): Likewise. 2005-06-05 Eric Christopher <echristo@redhat.com> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index c63913b..70a3531 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -535,7 +535,6 @@ const int x86_deep_branch = m_PPRO | m_K6 | m_ATHLON_K8 | m_PENT4 | m_NOCONA; const int x86_branch_hints = 0; const int x86_use_sahf = m_PPRO | m_K6 | m_PENT4 | m_NOCONA; const int x86_partial_reg_stall = m_PPRO; -const int x86_use_loop = m_K6; const int x86_use_himode_fiop = m_386 | m_486 | m_K6; const int x86_use_simode_fiop = ~(m_PPRO | m_ATHLON_K8 | m_PENT); const int x86_use_mov0 = m_K6; diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 0a9df5a..49fc607 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -146,7 +146,7 @@ extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and; extern const int x86_use_bit_test, x86_cmove, x86_fisttp, x86_deep_branch; extern const int x86_branch_hints, x86_unroll_strlen; extern const int x86_double_with_add, x86_partial_reg_stall, x86_movx; -extern const int x86_use_loop, x86_use_himode_fiop, x86_use_simode_fiop; +extern const int x86_use_himode_fiop, x86_use_simode_fiop; extern const int x86_use_mov0, x86_use_cltd, x86_read_modify_write; extern const int x86_read_modify, x86_split_long_moves; extern const int x86_promote_QImode, x86_single_stringop, x86_fast_prefix; @@ -180,7 +180,6 @@ extern int x86_prefetch_sse; #define TARGET_USE_SAHF ((x86_use_sahf & TUNEMASK) && !TARGET_64BIT) #define TARGET_MOVX (x86_movx & TUNEMASK) #define TARGET_PARTIAL_REG_STALL (x86_partial_reg_stall & TUNEMASK) -#define TARGET_USE_LOOP (x86_use_loop & TUNEMASK) #define TARGET_USE_HIMODE_FIOP (x86_use_himode_fiop & TUNEMASK) #define TARGET_USE_SIMODE_FIOP (x86_use_simode_fiop & TUNEMASK) #define TARGET_USE_MOV0 (x86_use_mov0 & TUNEMASK) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 9ae0ae9..cae0bc3 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -13066,113 +13066,6 @@ [(set_attr "type" "ibr") (set_attr "length_immediate" "0")]) -;; Loop instruction -;; -;; This is all complicated by the fact that since this is a jump insn -;; we must handle our own reloads. - -(define_expand "doloop_end" - [(use (match_operand 0 "" "")) ; loop pseudo - (use (match_operand 1 "" "")) ; iterations; zero if unknown - (use (match_operand 2 "" "")) ; max iterations - (use (match_operand 3 "" "")) ; loop level - (use (match_operand 4 "" ""))] ; label - "!TARGET_64BIT && TARGET_USE_LOOP" - " -{ - /* Only use cloop on innermost loops. */ - if (INTVAL (operands[3]) > 1) - FAIL; - if (GET_MODE (operands[0]) != SImode) - FAIL; - emit_jump_insn (gen_doloop_end_internal (operands[4], operands[0], - operands[0])); - DONE; -}") - -(define_insn "doloop_end_internal" - [(set (pc) - (if_then_else (ne (match_operand:SI 1 "register_operand" "c,?*r,?*r") - (const_int 1)) - (label_ref (match_operand 0 "" "")) - (pc))) - (set (match_operand:SI 2 "nonimmediate_operand" "=1,1,*m*r") - (plus:SI (match_dup 1) - (const_int -1))) - (clobber (match_scratch:SI 3 "=X,X,r")) - (clobber (reg:CC FLAGS_REG))] - "!TARGET_64BIT && TARGET_USE_LOOP - && (reload_in_progress || reload_completed - || register_operand (operands[2], VOIDmode))" -{ - if (which_alternative != 0) - return "#"; - if (get_attr_length (insn) == 2) - return "%+loop\t%l0"; - else - return "dec{l}\t%1\;%+jne\t%l0"; -} - [(set (attr "length") - (if_then_else (and (eq_attr "alternative" "0") - (and (ge (minus (match_dup 0) (pc)) - (const_int -126)) - (lt (minus (match_dup 0) (pc)) - (const_int 128)))) - (const_int 2) - (const_int 16))) - ;; We don't know the type before shorten branches. Optimistically expect - ;; the loop instruction to match. - (set (attr "type") (const_string "ibr"))]) - -(define_split - [(set (pc) - (if_then_else (ne (match_operand:SI 1 "register_operand" "") - (const_int 1)) - (match_operand 0 "" "") - (pc))) - (set (match_dup 1) - (plus:SI (match_dup 1) - (const_int -1))) - (clobber (match_scratch:SI 2 "")) - (clobber (reg:CC FLAGS_REG))] - "!TARGET_64BIT && TARGET_USE_LOOP - && reload_completed - && REGNO (operands[1]) != 2" - [(parallel [(set (reg:CCZ FLAGS_REG) - (compare:CCZ (plus:SI (match_dup 1) (const_int -1)) - (const_int 0))) - (set (match_dup 1) (plus:SI (match_dup 1) (const_int -1)))]) - (set (pc) (if_then_else (ne (reg:CCZ FLAGS_REG) (const_int 0)) - (match_dup 0) - (pc)))] - "") - -(define_split - [(set (pc) - (if_then_else (ne (match_operand:SI 1 "register_operand" "") - (const_int 1)) - (match_operand 0 "" "") - (pc))) - (set (match_operand:SI 2 "nonimmediate_operand" "") - (plus:SI (match_dup 1) - (const_int -1))) - (clobber (match_scratch:SI 3 "")) - (clobber (reg:CC FLAGS_REG))] - "!TARGET_64BIT && TARGET_USE_LOOP - && reload_completed - && (! REG_P (operands[2]) - || ! rtx_equal_p (operands[1], operands[2]))" - [(set (match_dup 3) (match_dup 1)) - (parallel [(set (reg:CCZ FLAGS_REG) - (compare:CCZ (plus:SI (match_dup 3) (const_int -1)) - (const_int 0))) - (set (match_dup 3) (plus:SI (match_dup 3) (const_int -1)))]) - (set (match_dup 2) (match_dup 3)) - (set (pc) (if_then_else (ne (reg:CCZ FLAGS_REG) (const_int 0)) - (match_dup 0) - (pc)))] - "") - ;; Convert setcc + movzbl to xor + setcc if operands don't overlap. (define_peephole2 |