Kai Tietz [Thu, 19 May 2011 11:16:20 +0000 (13:16 +0200)]
tree-cfg.c (verify_gimple_assign_binary): Barf on TRUTH_AND_EXPR, TRUTH_OR_EXPR, and TRUTH_XOR_EXPR.
2011-05-19 Kai Tietz <ktietz@redhat.com>
* tree-cfg.c (verify_gimple_assign_binary): Barf on
TRUTH_AND_EXPR, TRUTH_OR_EXPR, and TRUTH_XOR_EXPR.
(gimplify_expr): Move TRUTH_AND|OR|XOR_EXPR to its binary form.
Richard Guenther [Thu, 19 May 2011 10:31:23 +0000 (10:31 +0000)]
gimple.c (gimple_types_compatible_p_1): Compare names of the types themselves.
2011-05-19 Richard Guenther <rguenther@suse.de>
* gimple.c (gimple_types_compatible_p_1): Compare names of
the types themselves.
(iterative_hash_gimple_type): And hash them that way.
(gimple_register_type_1): If we register a main variant properly
initialize the leader to ourselves.
lto/
* lto.c (uniquify_nodes): First register all types before
fixing up the tree SCC.
Tom de Vries [Thu, 19 May 2011 09:03:12 +0000 (09:03 +0000)]
re PR middle-end/45098 (Missed induction variable optimization)
2011-05-19 Tom de Vries <tom@codesourcery.com>
PR target/45098
* tree-ssa-loop-ivopts.c (get_expr_id): Factored new function out of
get_loop_invariant_expr_id.
(get_loop_invariant_expr_id): Use get_expr_id.
(parm_decl_cost): New function.
(determine_use_iv_cost_condition): Use get_expr_id and parm_decl_cost.
Improve bound cost estimation. Use different inv_expr_id for elim and
express cases.
Jonathan Wakely [Wed, 18 May 2011 22:59:17 +0000 (22:59 +0000)]
shared_ptr_base.h: Use noexcept.
2011-05-18 Jonathan Wakely <jwakely.gcc@gmail.com>
* include/bits/shared_ptr_base.h: Use noexcept. Define special member
functions as defaulted/deleted.
* include/bits/shared_ptr.h: Use noexcept.
* 20_util/shared_ptr/cons/43820_neg.cc: Adjust dg-error line numbers.
* 20_util/weak_ptr/comparison/cmp_neg.cc: Likewise.
Joseph Myers [Wed, 18 May 2011 14:54:23 +0000 (15:54 +0100)]
arm-opts.h (enum arm_fp16_format_type, [...]): Move from arm.h.
* config/arm/arm-opts.h (enum arm_fp16_format_type, enum
arm_abi_type, enum float_abi_type, enum arm_tp_type): Move from
arm.h.
* config/arm/arm.c (arm_float_abi, arm_fp16_format, arm_abi,
target_thread_pointer, arm_structure_size_boundary, struct
float_abi, all_float_abis, struct fp16_format, all_fp16_formats,
struct abi_name, arm_all_abis): Remove.
(arm_option_override) Don't process most enumerated option values
here. Don't process target_fpe_name here. Work with integer not
string for structure size boundary; use separate diagnostics for
each case.
* config/arm/arm.h (enum float_abi_type, enum
arm_fp16_format_type, enum arm_abi_type, enum arm_tp_type): Move
to arm-opts.h.
(arm_float_abi, arm_fp16_format, arm_abi, target_thread_pointer,
arm_structure_size_boundary): Remove.
* config/arm/arm.opt (mabi=): Use Enum and Init.
(arm_abi_type): New Enum and EnumValue entries.
(mfloat-abi=): Use Enum and Init.
(float_abi_type): New Enum and EnumValue entries.
(mfp=, mfpe=): Replace by separate Alias entries for each
argument.
(mfp16-format=): Use Enum and Init.
(arm_fp16_format_type): New Enum and EnumValue entries.
(mstructure-size-boundary=): Use UInteger and Init.
(mtp=): Use Enum and Init.
(arm_tp_type): New Enum and EnumValue entries.
Ira Rosen [Wed, 18 May 2011 11:27:51 +0000 (11:27 +0000)]
re PR tree-optimization/41881 (Complete unrolling (inner) versus vectorization of reduction)
PR tree-optimization/41881
* tree-vectorizer.h (struct _loop_vec_info): Add new field
reduction_chains along with a macro for its access.
* tree-vect-loop.c (new_loop_vec_info): Initialize
reduction chains.
(destroy_loop_vec_info): Free reduction chains.
(vect_analyze_loop_2): Return false if
vect_analyze_slp() returns false.
(vect_is_slp_reduction): New function.
(vect_is_simple_reduction_1): Call
vect_is_slp_reduction.
(vect_create_epilog_for_reduction): Support SLP
reduction chains.
* tree-vect-slp.c (vect_get_and_check_slp_defs): Allow
different definition types for reduction chains.
(vect_supported_load_permutation_p): Don't allow
permutations for reduction chains.
(vect_analyze_slp_instance): Support reduction chains.
(vect_analyze_slp): Try to build SLP instance from
reduction chains.
(vect_get_constant_vectors): Handle reduction chains.
(vect_schedule_slp_instance): Mark the first statement
of the reduction chain as reduction.
Ira Rosen [Wed, 18 May 2011 11:09:44 +0000 (11:09 +0000)]
tree-vect-loop-manip.c (vect_create_cond_for_alias_checks): Use new names for group elements access.
* tree-vect-loop-manip.c (vect_create_cond_for_alias_checks): Use new
names for group elements access.
* tree-vectorizer.h (struct _stmt_vec_info): Use interleaving info for
reduction chains as well. Remove data reference and interleaving
related words from the fields names.
* tree-vect-loop.c (vect_transform_loop): Use new names for group
elements access.
* tree-vect-data-refs.c (vect_get_place_in_interleaving_chain,
vect_insert_into_interleaving_chain, vect_update_interleaving_chain,
vect_update_interleaving_chain, vect_same_range_drs,
vect_analyze_data_ref_dependence, vect_update_misalignment_for_peel,
vect_verify_datarefs_alignment, vector_alignment_reachable_p,
vect_peeling_hash_get_lowest_cost, vect_enhance_data_refs_alignment,
vect_analyze_group_access, vect_analyze_data_ref_access,
vect_create_data_ref_ptr, vect_transform_strided_load,
vect_record_strided_load_vectors): Likewise.
* tree-vect-stmts.c (vect_model_simple_cost, vect_model_store_cost,
vect_model_load_cost, vectorizable_store, vectorizable_load,
vect_remove_stores, new_stmt_vec_info): Likewise.
* tree-vect-slp.c (vect_build_slp_tree,
vect_supported_slp_permutation_p, vect_analyze_slp_instance): Likewise.
Jakub Jelinek [Wed, 18 May 2011 09:22:41 +0000 (11:22 +0200)]
re PR tree-optimization/49000 (ICE: verify_ssa failed with -O2 -g)
PR tree-optimization/49000
* tree-ssa.c (execute_update_addresses_taken): Call
maybe_rewrite_mem_ref_base on debug stmt value. If it couldn't
be rewritten and decl has been marked for renaming, reset
the debug stmt.
Kazuhio Inaoka [Tue, 17 May 2011 08:27:40 +0000 (08:27 +0000)]
rx.md: Add peepholes to match a register move followed by a comparison of the moved...
* config/rx/rx.md: Add peepholes to match a register move followed
by a comparison of the moved register. Replace these with an
addition of zero that does both actions in one instruction.
Co-Authored-By: Nick Clifton <nickc@redhat.com>
From-SVN: r173819
Jakub Jelinek [Tue, 17 May 2011 07:37:59 +0000 (09:37 +0200)]
re PR target/48986 (Missed optimization in atomic decrement on x86/x64)
PR target/48986
* config/i386/sync.md (sync_old_add<mode>): Relax operand 2
predicate to allow CONST_INT.
(*sync_old_add_cmp<mode>): New insn and peephole2 for it.
Joseph Myers [Mon, 16 May 2011 21:26:29 +0000 (22:26 +0100)]
opts-common.c (opt_enum_arg_to_value): New.
* opts-common.c (opt_enum_arg_to_value): New.
* opts.h (opt_enum_arg_to_value): Declare.
* config/i386/i386.opt (fpmath): Remove.
(mfpmath=): Use Enum, Init and Save.
(fpmath_unit): New Enum and EnumValue entries.
* config/i386/i386-c.c (ix86_pragma_target_parse): Update field
name for function fpmath state.
* config/i386/i386-opts.h (enum fpmath_unit): Move from i386.h.
* config/i386/i386.c: Include diagnostic.h.
(ix86_fpmath, IX86_FUNCTION_SPECIFIC_FPMATH): Remove.
(ix86_target_string): Take enum fpmath_unit value instead of
string.
(ix86_debug_options): Update call to ix86_target_string.
(ix86_option_override_internal): Don't process fpmath strings
here.
(x86_function_specific_save, ix86_function_specific_restore):
Don't handle fpmath state specially.
(ix86_function_specific_print): Pass fpmath state to
ix86_target_string instead of printing in this function.
(ix86_valid_target_attribute_inner_p): Take gcc_options pointer.
Handle enum attributes.
(IX86_ATTR_ENUM, ix86_opt_enum): New.
(ix86_valid_target_attribute_tree): Update option_strings
handling. Handle fpmath as enum option.
(ix86_can_inline_p): Update field names for function fpmath state.
(ix86_expand_builtin): Update call to ix86_target_string.
* config/i386/i386.h (enum fpmath_unit): Move to i386-opts.h.
(ix86_fpmath): Remove.
* config/i386/t-i386 (i386.o): Update dependencies.
Uros Bizjak [Mon, 16 May 2011 18:08:41 +0000 (20:08 +0200)]
constraints.md (z): New constraint.
* config/i386/constraints.md (z): New constraint.
* config/i386/i386.c (c): New mode attribute.
(*call): Merge insn pattern from *call_0, *call_1, *call_1_rex64 and
*call_1_rex64_large patterns using "P" mode iterator. Use "<c>zm"
constraint for operand 0.
(*call_vzeroupper): Ditto.
(*call_rex64_ms_sysv): Ditto. Use "rzm" constraint for operand 0.
(*call_rex64_ms_sysv_vzeroupper): Ditto.
(*call_pop): Merge insn pattern from *call_pop_0 and *call_pop_1.
Use "lzm" constraint for operand 0.
(*call_pop_vzeroupper): Ditto.
(*sibcall): Merge insn pattern from *sibcall_0, *sibcall_1 and
*sibcall_1_rex64 patterns using "P" mode iterator. Use "Uz"
constraint for operand 0.
(*sibcall_vzeroupper): Ditto.
(*sibcall_rex64_ms_sysv): Ditto.
(*sibcall_rex64_ms_sysv_vzeroupper): Ditto.
(*sibcall_pop): Merge insn pattern from *sibcall_pop_0 and
*sibcall_pop_1. Use "Uz" constraint for operand 0.
(*sibcall_pop_vzeroupper): Ditto.
(*call_value): Merge insn pattern from *call_value_0, *call_value_1,
*call_value_1_rex64 and *call_value_1_rex64_large patterns using "P"
mode iterator. Use "<c>zm" constraint for operand 1.
(*call_value_vzeroupper): Ditto.
(*call_value_rex64_ms_sysv): Ditto. Use "rzm" constraint
for operand 0.
(*call_value_rex64_ms_sysv_vzeroupper): Ditto.
(*call_value_pop): Merge insn pattern from *call_value_pop_0 and
*call_value_pop_1. Use "lzm" constraint for operand 1.
(*call_value_pop_vzeroupper): Ditto.
(*sibcall_value): Merge insn pattern from *sibcall_value_0,
*sibcall_value_1 and *sibcall_value_1_rex64 patterns using "P"
mode iterator. Use "Uz" constraint for operand 1.
(*sibcall_value_vzeroupper): Ditto.
(*sibcall_value_rex64_ms_sysv): Ditto.
(*sibcall_value_rex64_ms_sysv_vzeroupper): Ditto.
(*sibcall_value_pop): Rename from *sibcall_pop_1. Use "Uz"
constraint for operand 1.
(*sibcall_value_pop_vzeroupper): Ditto.
(*tls_global_dynamic_64): Use constant_call_address_operand predicate
and "z" constraint for operand 2.
(*tls_global_dynamic_32_gnu): Ditto.
(*tls_local_dynamic_base_32_gnu): Ditto.
(*tls_local_dynamic_base_64): Ditto.
(*tls_local_dynamic_32_once): Ditto.
* config/i386/i386.c (ix86_output_call_insn): Remove int_addr argument.
Update all callers.
* config/i386/i386-protos.h (ix86_output_call_insn): Update prototype.
Richard Guenther [Mon, 16 May 2011 13:52:56 +0000 (13:52 +0000)]
gimple.c (struct type_hash_pair): New type.
2011-05-16 Richard Guenther <rguenther@suse.de>
* gimple.c (struct type_hash_pair): New type.
(type_hash_pair_compare): New function.
(iterative_hash_gimple_type): Mix in SCC member hashes in
hash-order.
Paolo Carlini [Sun, 15 May 2011 18:21:03 +0000 (18:21 +0000)]
c++config (_GLIBCXX_NOEXCEPT, [...]): Add.
2011-05-15 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/c++config (_GLIBCXX_NOEXCEPT, _GLIBCXX_USE_NOEXCEPT):
Add.
* include/std/limits: Use the latter everywhere.
(numeric_limits<char16_t>, numeric_limits<char32_t>): Simplify
macro usages, the specializations exist only in C++0x mode.
* testsuite/ext/profile/mutex_extensions_neg.cc: Adjust dg-error
line number.
Tobias Burnus [Sun, 15 May 2011 16:20:18 +0000 (18:20 +0200)]
re PR fortran/18918 (Eventually support Fortran 2008's coarrays [co-arrays])
2011-05-15 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
actual argument is not an array; rank mismatch is diagnosted later.
* trans-decl.c (gfc_get_symbol_decl, gfc_trans_deferred_vars):
* Handle
scalar coarrays.
* trans-types.c (gfc_get_array_type_bounds): Ditto.
Uros Bizjak [Sat, 14 May 2011 15:33:02 +0000 (17:33 +0200)]
constraint.md (Yd, Yx): New register constraints.
* config/i386/constraint.md (Yd, Yx): New register constraints.
* config/i386/i386.md (*pushdf): Merge with *pushdf_nointeger. Use
Yd conditional register constraint.
(*movtf_internal): Use standard_sse_constant_opcode.
(*movxf_internal): Merge with *movxf_internal_nointeger. Use
Yx conditional register constraint.
(*movdf_internal): Merge with *movdf_internal_nointeger. Use
Yd conditional register constraint. Use standard_sse_constant_p to
check for valid SSE constants and call standard_sse_constant_opcode to
output SSE insn.
(*movsf_internal): Use standard_sse_constant_p to check for valid SSE
constants and call standard_sse_constant_opcode to output SSE insn.
* config/i386/i386.c (ix86_option_ovverride_internal): Set
TARGET_INTEGER_DFMODE_MOVES for 64bit targets. Clear it when
optimize_size is set.
(standard_sse_constant_opcode): Output conditional AVX insn templates.
Thomas Koenig [Sat, 14 May 2011 09:48:08 +0000 (09:48 +0000)]
re PR fortran/22572 (Double occurrence of matmul intrinsic not optimised)
2011-05-14 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/22572
* frontend-passes.c (cfe_register_funcs): Also register functions
for potential elimination if the rank is > 0, the shape is unknown
and reallocate on assignment is active.
(create_var): For rank > 0 functions with unknown shape, create
an allocatable temporary.
2011-05-14 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/22572
* function_optimize_7.f90: New test case.
Tobias Burnus [Sat, 14 May 2011 06:35:18 +0000 (08:35 +0200)]
re PR libfortran/48961 (EXECUTE_COMMAND_LINE(WAIT=.false.) fails on MinGW)
2011-05-14 Tobias Burnus <burnus@net-b.de>
PR fortran/48961
* intrinsics/execute_command_line.c (set_cmdstat): Don't abort if
synchronously executing with WAIT=.false.
(execute_command_line): Fix setting of cmdstat and exitstat.
Ian Lance Taylor [Fri, 13 May 2011 22:34:56 +0000 (22:34 +0000)]
Fix bug with multiple results returning structs with invalid sizes.
* go-gcc.cc (Gcc_backend::function_type): When building a struct
for multiple results, check that all fields types have a size.
(Gcc_backend::placeholder_pointer_type): Permit name to be empty.
Martin Jambor [Fri, 13 May 2011 22:01:59 +0000 (00:01 +0200)]
ipa-prop.c (ipa_cst_from_jfunc): New function.
2011-05-13 Martin Jambor <mjambor@suse.cz>
* ipa-prop.c (ipa_cst_from_jfunc): New function.
* ipa-prop.h (ipa_cst_from_jfunc): Declare.
* ipa-inline-analysis.c (evaluate_conditions_for_edge): Use it.
(evaluate_conditions_for_ipcp_clone): Removed.
(estimate_ipcp_clone_size_and_time): Accept vector of known constants.
* ipa-cp.c (ipcp_estimate_growth): Build vector of known constants.
* ipa-inline.h (estimate_ipcp_clone_size_and_time): Update.