From e3dafdf4d0f85fcf00944975332b43e29d39ca98 Mon Sep 17 00:00:00 2001 From: Torbjorn Granlund Date: Thu, 13 Dec 2007 10:19:11 +0100 Subject: [PATCH] i386.c (ix86_rtx_costs): Check op0 for ZERO_EXTEND when computing costs for widening multiplication. * config/i386/i386.c (ix86_rtx_costs) [MULT]: Check op0 for ZERO_EXTEND when computing costs for widening multiplication. From-SVN: r130809 --- gcc/ChangeLog | 150 +++++++++++++++++++---------------------- gcc/config/i386/i386.c | 2 +- 2 files changed, 69 insertions(+), 83 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 32dbb6e2cfb..00bf7c63fc4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-12-13 Torbjorn Granlund + + * config/i386/i386.c (ix86_rtx_costs) [MULT]: Check op0 for + ZERO_EXTEND when computing costs for widening multiplication. + 2007-12-13 Richard Earnshaw PR target/30192 @@ -92,8 +97,7 @@ to extract the integer from operands[2]. (vec_setv2di_internal): Likewise. - * config/arm/arm.c (arm_size_return_regs): Make return type - unsigned. + * config/arm/arm.c (arm_size_return_regs): Make return type unsigned. (arm_init_neon_builtins): Move code after declarations. 2007-12-10 Hans-Peter Nilsson @@ -535,8 +539,7 @@ * tree-vrp.c (adjust_range_with_scev): Clear scev cache. (record_numbers_of_iterations): New function. (execute_vrp): Cache the numbers of iterations of loops. - * tree-scalar-evolution.c (scev_reset_except_niters): - New function. + * tree-scalar-evolution.c (scev_reset_except_niters): New function. (scev_reset): Use scev_reset_except_niters. * tree-scalar-evolution.h (scev_reset_except_niters): Declare. @@ -1377,9 +1380,9 @@ PR tree-optimization/33953 * tree-vect-transform.c (vectorizable_operation): In case of SLP, allocate vec_oprnds1 according to the number of created vector - statements. In case of shift with scalar argument, store scalar operand - for every vector statement to be created for the SLP node. Fix a - comment. + statements. In case of shift with scalar argument, store scalar + operand for every vector statement to be created for the SLP node. + Fix a comment. 2007-11-10 Steven Bosscher @@ -1445,8 +1448,7 @@ 2007-11-09 Richard Guenther - * tree-flow.h (struct ptr_info_def): Make escape_mask a - ENUM_BITFIELD. + * tree-flow.h (struct ptr_info_def): Make escape_mask a ENUM_BITFIELD. (struct ptr_info_def): Likewise. (enum escape_type): Also use bit zero. @@ -1845,8 +1847,7 @@ (in_safe_group_barrier): New variable. (rws_update): Remove first argument, always set rws_sum array. (rws_access_regno): Use rws_insn_set macro. Only call rws_update - or update rws_sum if !in_safe_group_barrier, adjust rws_update - args. + or update rws_sum if !in_safe_group_barrier, adjust rws_update args. (rtx_needs_barrier): Use rws_insn_test macro. (safe_group_barrier_needed): Don't save/restore rws_sum array, instead set/clear in_safe_group_barrier flag. @@ -1996,8 +1997,8 @@ * config/rs6000/rs6000.opt: Rename -mdfp option to -mhard-dfp. - * config/s390/s390.c: (override_options): Replace -mhard-dfp/-msoft-dfp - with -mhard-dfp/-mno-hard-dfp. + * config/s390/s390.c: (override_options): Replace + -mhard-dfp/-msoft-dfp with -mhard-dfp/-mno-hard-dfp. * config/s390/s390.opt: Likewise. * config/s390/s390.h: Add MASK_HARD_DFP to the TARGET_DEFAULT definition. @@ -2493,7 +2494,7 @@ SSA_NAME pointers. 2007-10-22 Seongbae Park - David S. Miller + David S. Miller * df-scan.c (df_get_call_refs): Mark global registers as both a DF_REF_REG_USE and a non-clobber DF_REF_REG_DEF. @@ -3010,8 +3011,7 @@ 2007-10-19 Richard Guenther PR middle-end/32921 - * tree.c (build_array_type): Do not re-layout unbound array - types. + * tree.c (build_array_type): Do not re-layout unbound array types. 2007-10-19 Richard Sandiford @@ -3765,8 +3765,7 @@ PR middle-end/33669 * ra-conflict.c (record_one_conflict_between_regnos, - set_conflicts_for_earlyclobber, global_conflicts): Improved - logging. + set_conflicts_for_earlyclobber, global_conflicts): Improved logging. (global_conflicts): Removed incorrect check. 2007-10-09 Richard Sandiford @@ -3909,8 +3908,7 @@ PR tree-optimization/33655 PR middle-end/22156 - * tree-sra.c (bitfield_overlaps_p): Handle array and complex - elements. + * tree-sra.c (bitfield_overlaps_p): Handle array and complex elements. 2007-10-06 Alexandre Oliva @@ -4024,8 +4022,7 @@ 2007-10-04 Geoffrey Keating - * cgraphunit.c (cgraph_build_static_cdtor): Don't set - DECL_IGNORED_P. + * cgraphunit.c (cgraph_build_static_cdtor): Don't set DECL_IGNORED_P. 2007-10-04 Anatoly Sokolov @@ -4150,8 +4147,7 @@ 2007-10-02 Richard Sandiford PR middle-end/33617 - * expr.c (expand_expr_addr_expr_1): Pass CONSTRUCTORs to - expand_expr. + * expr.c (expand_expr_addr_expr_1): Pass CONSTRUCTORs to expand_expr. 2007-10-02 David Daney @@ -4263,14 +4259,12 @@ (canon_type_for_field): New. (try_instantiate_multiple_fields): New. Infer widest possible access mode from decl or member type, but clip it at word - size, and only widen it if a field crosses an alignment - boundary. + size, and only widen it if a field crosses an alignment boundary. (instantiate_missing_elements): Use them. (generate_one_element_ref): Handle BIT_FIELD_REFs. (scalar_bitfield_p): New. (sra_build_assignment): Optimize assignments from scalarizable - BIT_FIELD_REFs. Use BITS_BIG_ENDIAN to determine shift - counts. + BIT_FIELD_REFs. Use BITS_BIG_ENDIAN to determine shift counts. (REPLDUP): New. (sra_build_bf_assignment): New. Optimize assignments to scalarizable BIT_FIELD_REFs. @@ -4292,8 +4286,7 @@ BIT_FIELD_REFs. Explode or sync needed members for BIT_FIELD_REFs accesses or assignments. Use REPLDUP. (scalarize_copy): Use REPLDUP. - (scalarize_ldst): Move assert before dereference. Adjust EH - handling. + (scalarize_ldst): Move assert before dereference. Adjust EH handling. (dump_sra_elt_name): Handle BIT_FIELD_REFs. 2007-10-01 Paolo Bonzini @@ -4579,8 +4572,7 @@ 2007-09-25 DJ Delorie PR target/33551 - * config/m32c/m32c.c (m32c_immd_dbl_mov): Use INTVAL instead of - XINT. + * config/m32c/m32c.c (m32c_immd_dbl_mov): Use INTVAL instead of XINT. 2007-09-25 Michael Meissner @@ -4888,8 +4880,7 @@ 2007-09-22 Richard Guenther PR tree-optimization/33146 - * fold-const.c (fold_binary): Use the original tree - for negating. + * fold-const.c (fold_binary): Use the original tree for negating. * tree.h (STRIP_SIGN_NOPS): Converting from or to pointer also changes "sign". @@ -5352,8 +5343,7 @@ * doc/tm.texi (LIBGCC2_UNWIND_ATTRIBUTE): Document. * unwind-generic.h (LIBGCC2_UNWIND_ATTRIBUTE): Define. - (_Unwind_RaiseException): Add LIBGCC2_UNWIND_ATTRIBUTE to - declaration. + (_Unwind_RaiseException): Add LIBGCC2_UNWIND_ATTRIBUTE to declaration. (_Unwind_ForcedUnwind): Likewise. (_Unwind_Resume): Likewise. (_Unwind_Resume_or_Rethrow): Likewise. @@ -5417,8 +5407,7 @@ PR target/32337 * config/ia64/ia64.c (find_gr_spill): Don't decrement - current_frame_info.n_local_regs. Don't return emitted local - regs. + current_frame_info.n_local_regs. Don't return emitted local regs. (ia64_compute_frame_size): Improve unwind hack to put RP, PFS, FP in that order by allowing some of the registers been already emitted, as long as they are emitted to the @@ -5563,19 +5552,15 @@ pointer to hold the argument. (function_args_iter_cond): Inline function to return the next argument. - (function_args_iter_cond_next): Advance the function args - iterator. - (stdarg_p): New function, return true if variable argument - function. - (prototype_p): New function, return true if function is - prototyped. + (function_args_iter_cond_next): Advance the function args iterator. + (stdarg_p): New function, return true if variable argument function. + (prototype_p): New function, return true if function is prototyped. (function_args_count): New function, count the number of arguments of a function. * tree.c (stdarg_p): New function, return true if variable argument function. - (prototype_p): New function, return true if function is - prototyped. + (prototype_p): New function, return true if function is prototyped. * config/i386/i386.h (TARGET_SSE5): New macro for SSE5. (TARGET_ROUND): New macro for the round/ptest instructions which @@ -6067,8 +6052,8 @@ 2007-09-12 Jan Hubicka PR target/33393 - * i386.md (floatsisf2_mixed_memory, floatsisf2_sse_memory): Disable - for !SSE_MATH + * config/i386/i386.md (floatsisf2_mixed_memory, floatsisf2_sse_memory): + Disable for !SSE_MATH 2007-09-12 Christian Bruel @@ -6084,8 +6069,8 @@ 2007-09-12 Ira Rosen - * params.def (PARAM_MIN_VECT_LOOP_BOUND): Change default and minimum - to 1. + * params.def (PARAM_MIN_VECT_LOOP_BOUND): Change default and + minimum to 1. 2007-09-11 James E. Wilson @@ -6285,15 +6270,15 @@ 2007-09-11 Zdenek Dvorak - * fold-const.c (extract_muldiv_1): Do not simplify - var * c * c to var. + * fold-const.c (extract_muldiv_1): Do not simplify var * c * c to var. 2007-09-11 Jan Hubicka - * i386.h (ix86_tune_indices): Add X86_TUNE_INTER_UNIT_CONVERSIONS. + * config/i386/i386.h (ix86_tune_indices): Add + X86_TUNE_INTER_UNIT_CONVERSIONS. (TARGET_INTER_UNIT_CONVERSIONS): New. - * i386.md (floatsi expanders): Remove redundant check for SImode - source; offload to memory when asked for. + * config/i386/i386.md (floatsi expanders): Remove redundant check + for SImode source; offload to memory when asked for. (floatsisf2_mixed, floatsisf2_sse, floatsidf2_mixed, floatsidf2_sse floatdisf2_mixed, floatsisf2_sse, floatsidf2_mixed, floatsidf2_sse): Update conditions; @@ -6581,7 +6566,7 @@ 2007-09-09 H.J. Lu - * i386.md (*floatsisf2_mixed_vector): Use cvtdq2ps instead + * config/i386/i386.md (*floatsisf2_mixed_vector): Use cvtdq2ps instead of cvtpq2ps. (*floatsisf2_sse_vector): Likewise. @@ -6615,10 +6600,10 @@ 2007-09-09 Jan Hubicka Dwarakanath Rajagopal - * i386.h (ix86_tune_indices): Add X86_USE_VECTOR_CONVERTS. + * config/i386/i386.h (ix86_tune_indices): Add X86_USE_VECTOR_CONVERTS. (TARGET_USE_VECTOR_CONVERTS): New. - * i386.md: New post-reload splitters for converting SF to DF and DF to - SF. + * config/i386/i386.md: New post-reload splitters for converting + SF to DF and DF to SF. (floatsi* expander): Special case vector conversions. (floatsisf2_mixed_vector, floatsisf2_sse_vector_nointernunit, floatsisf2_sse_vector_internunit, floatsisf2_sse_vector, @@ -6626,8 +6611,8 @@ (floatsisf2_mixed, floatsisf2_sse, floatsidf2_mixed, floatsidf2_sse): Disable when doing vector converts. (floatsi2_i387): Disable when - * sse.md (vec_dupv2df): Export. - * i386.c (ix86_tune_features): Enable SSE conversions. + * config/i386/sse.md (vec_dupv2df): Export. + * config/i386/i386.c (ix86_tune_features): Enable SSE conversions. 2007-09-09 Richard Guenther @@ -7356,8 +7341,8 @@ 2007-09-06 Jan Hubicka - * i386.c (ix86_expand_lround, ix86_expand_round): Update call of - real_2expN. + * config/i386/i386.c (ix86_expand_lround, ix86_expand_round): + Update call of real_2expN. 2007-09-06 Richard Sandiford @@ -7514,8 +7499,8 @@ 2007-09-06 Jan Hubicka - * i386.c (ix86_expand_lround, ix86_expand_round): Update call of - real_2expN. + * config/i386/i386.c (ix86_expand_lround, ix86_expand_round): + Update call of real_2expN. 2007-09-06 Jan Hubicka @@ -10095,7 +10080,7 @@ 2007-08-19 Jan Hubicka - * i386.md: Replace "rim" and "mri" constraints by "g". + * config/i386/i386.md: Replace "rim" and "mri" constraints by "g". 2007-08-19 Joseph Myers @@ -10547,8 +10532,8 @@ 2007-08-14 Kai Tietz - * i386.c: (legitimize_address): Move dllimported variable check - infront of legitimizing pic address of CONST symbols. + * config/i386/i386.c (legitimize_address): Move dllimported variable + check infront of legitimizing pic address of CONST symbols. 2007-08-14 Steve Ellcey @@ -11924,8 +11909,8 @@ 2007-08-03 Jan Hubicka - * i386.c (setup_incoming_varargs_64): Tolerate 64bit preferred - stack boundary. + * config/i386/i386.c (setup_incoming_varargs_64): Tolerate 64bit + preferred stack boundary. 2007-08-03 David Edelsohn @@ -13673,7 +13658,7 @@ 2007-07-23 Jan Hubicka - * i386.c (ix86_secondary_memory_needed): Break out to... + * config/i386/i386.c (ix86_secondary_memory_needed): Break out to... (inline_secondary_memory_needed): ... here. (ix86_memory_move_cost): Break out to ... (inline_memory_move_cost): ... here; add support for IN value of 2 for @@ -19411,7 +19396,7 @@ extra_headers. (x86_64-*-*): Likewise. - * i386/i386-modes.def (V2QI): New. + * config/i386/i386-modes.def (V2QI): New. * config/i386/i386.c (ix86_handle_option): Handle SSE4.1 and SSE4A. @@ -25875,9 +25860,9 @@ * reg-stack.c (reg_to_stack): Large models don't allow NAN to be loaded for constant large models. Non-large 64bit PIC can do. - * i386.h (CASE_VECTOR_MODE): Large PIC cases are 64bit. + * config/i386/i386.h (CASE_VECTOR_MODE): Large PIC cases are 64bit. * cmodel.h: Add LARGE PIC. - * i386.md (UNSPEC_PLTOFF): New. + * config/i386/i386.md (UNSPEC_PLTOFF): New. (UNSPEC_SET_RIP, UNSPEC_SET_GOT_OFFSET): New; renumber other unspecs as needed. (*call_1_rex64): Disable for large models. @@ -25886,10 +25871,10 @@ (*call_value_1_rex64_large): New. (set_rip_rex4): New. (set_got_offset_rex64): New. - * predicates.md (constant_call_address_operand): For large model - constant calls are not possible. - * i386-protos.h (construct_plt_address): Declare. - * i386.c (override_options): Accept large models. + * config/i386/predicates.md (constant_call_address_operand): For + large model constant calls are not possible. + * config/i386/i386-protos.h (construct_plt_address): Declare. + * config/i386/i386.c (override_options): Accept large models. (ix86_expand_prologue): Expand large PIC GOT pointer load. (legitimate_constant_p): Add new UNSPECs. (legitimate_pic_operand_p): Likewise. @@ -26883,7 +26868,7 @@ Jan Hubicka PR target/30778 - * i386.c (counter_mode): New function. + * cofnig/i386/i386.c (counter_mode): New function. (expand_set_or_movmem_via_loop): Use it. (expand_movmem_epilogue): Likewise; fix pasto. (ix86_expand_movmem): Do emit guard even for constant counts. @@ -30316,7 +30301,8 @@ * Makefile.in (LIBGCOV): Add new constants. * libgcov.c (__gcov_merge_ior, __gcov_average_profiler, __gcov_ior_profiler): New. - * i386.md (movmem/setmem expanders): Add new optional arguments. + * config/i386/i386.md (movmem/setmem expanders): Add new optional + arguments. 2007-01-28 David Edelsohn @@ -31184,8 +31170,8 @@ 2007-01-18 Michael Meissner - * i386.c (ix86_compute_frame_layout): Make fprintf's in #if 0 code - type correct. + * config/i386/i386.c (ix86_compute_frame_layout): Make fprintf's + in #if 0 code type correct. 2007-01-18 Jan Hubicka diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index ebbf48957ba..fcae07758e0 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -22236,7 +22236,7 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) nbits = 7; /* Compute costs correctly for widening multiplication. */ - if ((GET_CODE (op0) == SIGN_EXTEND || GET_CODE (op1) == ZERO_EXTEND) + if ((GET_CODE (op0) == SIGN_EXTEND || GET_CODE (op0) == ZERO_EXTEND) && GET_MODE_SIZE (GET_MODE (XEXP (op0, 0))) * 2 == GET_MODE_SIZE (mode)) {