re PR c++/43704 (ICE: tree check: accessed elt 2 of tree_vec with 1 elts in tsubst, at cp/pt.c:10074)
Fix PR c++/43704
gcc/cp/ChangeLog:
PR c++/43704
* typeck.c (structural_comptypes): Test dependent typedefs
incompatibility before testing for their main variant based
equivalence.
gcc/testsuite/ChangeLog:
PR c++/43704
* g++.dg/template/typedef32.C: New test.
Ira Rosen [Mon, 19 Apr 2010 09:10:45 +0000 (09:10 +0000)]
re PR tree-optimization/37027 (SLP loop vectorization missing support for reductions)
PR tree-optimization/37027
* tree-vectorizer.h (struct _loop_vec_info): Add new field reductions
and macro to access it.
(vectorizable_reduction): Add argument.
(vect_get_slp_defs): Likewise.
* tree-vect-loop.c (vect_analyze_scalar_cycles_1): Collect reduction
statements for possible use in SLP.
(new_loop_vec_info): Initialize LOOP_VINFO_REDUCTIONS.
(destroy_loop_vec_info): Free LOOP_VINFO_REDUCTIONS.
(vect_create_epilog_for_reduction): Handle SLP. Modify documentation,
add new argument.
(vectorizable_reduction): Likewise.
* tree-vect-stmts.c (vect_get_vec_defs): Update call to
vect_get_slp_defs.
(vectorizable_type_demotion, vectorizable_type_promotion,
vectorizable_store): Likewise.
(vect_analyze_stmt): Update call to vectorizable_reduction.
(vect_transform_stmt): Likewise.
* tree-vect-slp.c (vect_get_and_check_slp_defs): Handle reduction.
(vect_build_slp_tree): Fix indentation. Check that there are no loads
from different interleaving chains in same node.
(vect_slp_rearrange_stmts): New function.
(vect_supported_load_permutation_p): Allow load permutations for
reductions. Call vect_slp_rearrange_stmts() to rearrange statements
inside SLP nodes if necessary.
(vect_analyze_slp_instance): Handle reductions.
(vect_analyze_slp): Try to build SLP instances originating from groups
of reductions.
(vect_detect_hybrid_slp_stmts): Skip reduction statements.
(vect_get_constant_vectors): Create initial vectors for reductions
according to reduction code. Add new argument.
(vect_get_slp_defs): Add new argument, pass it to
vect_get_constant_vectors.
(vect_schedule_slp_instance): Remove SLP tree root statements.
Eric Botcazou [Sun, 18 Apr 2010 21:49:29 +0000 (21:49 +0000)]
fold-const.c (fold_comparison): Use ssizetype.
2010-04-18 Eric Botcazou <ebotcazou@adacore.com>
* fold-const.c (fold_comparison): Use ssizetype.
* gimple-fold.c (maybe_fold_offset_to_array_ref): Likewise.
* ipa-prop.c (ipa_modify_call_arguments): Use sizetype.
* tree-loop-distribution.c (build_size_arg_loc): Likewise.
* tree-object-size.c (compute_object_sizes): Use size_type_node.
* tree.h (initialize_sizetypes): Remove parameter.
(build_common_tree_nodes): Remove second parameter.
* stor-layout.c (initialize_sizetypes): Remove parameter.
Always create an unsigned type.
(set_sizetype): Assert that the passed type is unsigned and simplify.
* tree.c (build_common_tree_nodes): Remove second parameter.
Adjust call to initialize_sizetypes.
* c-decl.c (c_init_decl_processing): Remove second argument in call to
build_common_tree_nodes.
cp/
* decl.c (cxx_init_decl_processing): Remove second argument in call to
build_common_tree_nodes.
java/
* decl.c (java_init_decl_processing): Remove argument in call to
initialize_sizetypes
fortran/
* f95-lang.c (gfc_init_decl_processing): Remove second argument in call
to build_common_tree_nodes.
ada/
* gcc-interface/misc.c (gnat_init): Remove second argument in call to
build_common_tree_nodes.
lto/
* lto-lang.c (lto_init): Remove second argument in call to
build_common_tree_nodes.
Jan Hubicka [Sun, 18 Apr 2010 10:52:26 +0000 (12:52 +0200)]
i386.md (UNSPEC_SSE_PROLOGUE_SAVE_LOW): New.
* i386.md (UNSPEC_SSE_PROLOGUE_SAVE_LOW): New.
(sse_prologue_save_insn expander): Use new pattern.
(sse_prologue_save_insn1): New pattern and splitter.
(sse_prologue_save_insn): Update to deal also with 64bit aligned
blocks.
* i386.c (setup_incoming_varargs_64): Do not compute jump destination here.
(ix86_gimplify_va_arg): Update alignment needed.
(ix86_local_alignment): Do not align all local arrays
to 128bit.
PR fortran/31538
* fortran/trans-array.c (gfc_conv_ss_startstride): Remove the use of
gfc_msg_bounds by using 'Array bound mismatch' directly.
(gfc_trans_dummy_array_bias): Remove the use of gfc_msg_bounds. Reword
error message to include the mismatch in the extent of array bound.
* fortran/trans.c: Remove gfc_msg_bounds. It is only used in one place.
* fortran/trans.h: Remove extern definition of gfc_msg_bounds.
Eric Botcazou [Sat, 17 Apr 2010 14:16:36 +0000 (14:16 +0000)]
uintp.h (UI_Lt): Declare.
* uintp.h (UI_Lt): Declare.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Do the size
computation in sizetype.
<E_Array_Subtype>: Use unified handling for all index types. Do not
generate MAX_EXPR-based expressions, only COND_EXPR-based ones. Add
bypass for PATs.
(annotate_value): Change test for negative values.
(validate_size): Apply test for negative values on GNAT nodes.
(set_rm_size): Likewise.
* gcc-interface/misc.c (gnat_init): Set unsigned types for sizetypes.
* gcc-interface/utils.c (rest_of_record_type_compilation): Change test
for negative values.
(max_size) <MINUS_EXPR>: Do not reassociate a COND_EXPR on the LHS.
(builtin_type_for_size): Adjust definition of signed_size_type_node.
* gcc-interface/utils2.c (compare_arrays): Optimize comparison of
lengths against zero.
Richard Earnshaw [Sat, 17 Apr 2010 12:43:40 +0000 (12:43 +0000)]
arm-protos.h (tune_params): New structure.
* arm-protos.h (tune_params): New structure.
* arm.c (current_tune): New variable.
(arm_constant_limit): Delete.
(struct processors): Add pointer to the tune parameters.
(arm_slowmul_tune): New tuning option.
(arm_fastmul_tune, arm_xscale_tune, arm_9e_tune): Likewise.
(all_cores): Adjust to pick up the tuning model.
(arm_constant_limit): New function.
(arm_override_options): Select the appropriate tuning model. Delete
initialization of arm_const_limit.
(arm_split_constant): Use the new constant-limit model.
(arm_rtx_costs): Pick up the current tuning model.
* arm.md (is_strongarm, is_xscale): Delete.
* arm-generic.md (load_ldsched_x, load_ldsched): Test explicitly
for Xscale variant architectures.
(mult_ldsched_strongarm, mult_ldsched): Similarly for StrongARM.
Eric Botcazou [Sat, 17 Apr 2010 08:14:08 +0000 (08:14 +0000)]
gigi.h (enum standard_datatypes): Add new values ADT_sbitsize_one_node and ADT_sbitsize_unit_node.
* gcc-interface/gigi.h (enum standard_datatypes): Add new values
ADT_sbitsize_one_node and ADT_sbitsize_unit_node.
(sbitsize_one_node): New macro.
(sbitsize_unit_node): Likewise.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Fix
latent bug in the computation of subrange_p. Fold wider_p predicate.
(cannot_be_superflat_p): Use an explicitly signed 64-bit type to do
the final comparison.
(make_aligning_type): Build real negation and use sizetype throughout
the offset computation.
(maybe_pad_type): Do not issue the warning when the new size expression
is too complex.
(annotate_value) <INTEGER_CST>: Simplify code handling negative values.
* gcc-interface/misc.c (gnat_init): Initialize sbitsize_one_node and
sbitsize_unit_node.
* gcc-interface/trans.c (Attribute_to_gnu) <Attr_Pool_Address>: Fold
double negation.
(gnat_to_gnu) <N_Free_Statement>: Likewise.
* gcc-interface/utils.c (convert): Use sbitsize_unit_node.
* gcc-interface/utils2.c (compare_arrays): Compute real lengths and use
constants in sizetype. Remove dead code and tweak comments. Generate
equality instead of inequality comparisons for zero length tests.
Jeff Law [Sat, 17 Apr 2010 01:30:35 +0000 (19:30 -0600)]
ira-color.c (ira_reassign_pseudos): Collect and sort all the pseudos needing assignment rather than doing a...
* ira-color.c (ira_reassign_pseudos): Collect and sort all the pseudos
needing assignment rather than doing a two-phase assignment. Remove
unused variable 'm'.
tree-ssa-reassoc.c (struct operand_entry): Add new field ID.
2010-04-16 Doug Kwan <dougkwan@google.com>
* tree-ssa-reassoc.c (struct operand_entry): Add new field ID.
(next_operand_entry_id): New static variable.
(sort_by_operand_rank): Stabilize qsort comparator by using unique IDs.
(add_to_ops_vec): Assigned unique ID to operand entry.
(struct oecount_s): New field ID.
(oecount_cmp): Stabilize qsort comparotor by using unique IDs.
(undistribute_ops_list): Assign unique IDs to oecounts.
(init_reassoc): reset next_operand_entry_id.
i386.md (*bt<mode>): Macroize insn from *btsi and *btdi_rex64 using SWI48 mode iterator.
* config/i386/i386.md (*bt<mode>): Macroize insn from *btsi and
*btdi_rex64 using SWI48 mode iterator.
(*jcc_bt<mode>): Ditto from *jcc_btsi and *jcc_btdi_rex64.
(*jcc_bt<mode>_mask): Ditto from *jcc_btsi_mask and
*jcc_btdi_mask_rex64.
Jakub Jelinek [Fri, 16 Apr 2010 15:34:47 +0000 (17:34 +0200)]
re PR debug/43762 (VLA artificial length var loclist is missing DW_OP_stack_value)
PR debug/43762
* dwarf2out.c (add_bound_info): Always call loc_list_from_tree
with want_address 2 and in case a single element list might be
possible, call it again with want_address 0.
Eric Botcazou [Fri, 16 Apr 2010 15:04:26 +0000 (15:04 +0000)]
gigi.h (gnat_init_decl_processing): Delete.
* gcc-interface/gigi.h (gnat_init_decl_processing): Delete.
* gcc-interface/decl.c (gnat_to_gnu_entity): Constify a few variables.
<object>: Do not create the fake PARM_DECL if no debug info is needed.
Do not create the corresponding VAR_DECL of a CONST_DECL for debugging
purposes if no debug info is needed.
Fix formatting. Reorder and add comments.
* gcc-interface/trans.c (gnat_to_gnu) <N_Attribute_Reference>: Constify
variable and remove obsolete comment.
* gcc-interface/utils.c (convert_vms_descriptor64): Tweak comment.
(convert_vms_descriptor32): Likewise.
(convert): Remove dead code.
<UNCONSTRAINED_ARRAY_REF>: Pass the field instead of its name to build
the reference to the P_ARRAY pointer.
<POINTER_TYPE>: Likewise.
(maybe_unconstrained_array) <UNCONSTRAINED_ARRAY_TYPE>: Likewise.
(gnat_init_decl_processing): Delete, move contents to...
* gcc-interface/misc.c (gnat_init): ...here.
Eric Botcazou [Fri, 16 Apr 2010 12:07:02 +0000 (12:07 +0000)]
decl.c (gnat_to_gnu_entity): Use boolean_type_node in lieu of integer_type_node for boolean operations.
* gcc-interface/decl.c (gnat_to_gnu_entity): Use boolean_type_node in
lieu of integer_type_node for boolean operations.
(choices_to_gnu): Likewise.
* gcc-interface/trans.c (Attribute_to_gnu): Likewise.
(Loop_Statement_to_gnu): Likewise.
(establish_gnat_vms_condition_handler): Likewise.
(Exception_Handler_to_gnu_sjlj): Likewise.
(gnat_to_gnu): Likewise.
(build_unary_op_trapv): Likewise.
(build_binary_op_trapv): Likewise.
(emit_range_check): Likewise.
(emit_index_check): Likewise.
(convert_with_check): Likewise.
* gcc-interface/utils.c (convert_vms_descriptor64): Likewise.
(convert_vms_descriptor32): Likewise.
(convert_vms_descriptor): Likewise.
* gcc-interface/utils2.c (nonbinary_modular_operation): Likewise.
(compare_arrays): Use boolean instead of integer constants.
(build_binary_op) <TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR, TRUTH_AND_EXPR,
TRUTH_OR_EXPR, TRUTH_XOR_EXPR>: New case. Check that the result type
is a boolean type.
<GE_EXPR, LE_EXPR, GT_EXPR, LT_EXPR>: Remove obsolete assertion.
<EQ_EXPR, NE_EXPR>: Check that the result type is a boolean type.
<PREINC/PREDECREMENT_EXPR, POSTINC/POSTDECREMENT_EXPR>: Delete.
<TRUTH_NOT_EXPR>: Check that the result type is a boolean type.
(build_unary_op): Use boolean_type_node in lieu of integer_type_node
for boolean operations.
(fill_vms_descriptor): Likewise. Fix formatting nits.
Eric Botcazou [Fri, 16 Apr 2010 11:54:51 +0000 (11:54 +0000)]
ada-tree.def (LOOP_STMT): Change to 4-operand nodes.
* gcc-interface/ada-tree.def (LOOP_STMT): Change to 4-operand nodes.
* gcc-interface/ada-tree.h (LOOP_STMT_TOP_COND, LOOP_STMT_BOT_COND):
Merge into...
(LOOP_STMT_COND): ...this.
(LOOP_STMT_BOTTOM_COND_P): New flag.
(LOOP_STMT_TOP_UPDATE_P): Likewise.
* gcc-interface/trans.c (can_equal_min_or_max_val_p): New function.
(can_equal_min_val_p): New static inline function.
(can_equal_max_val_p): Likewise.
(Loop_Statement_to_gnu): Use build4 in lieu of build5 and adjust to
new LOOP_STMT semantics. Use two different strategies depending on
whether optimization is enabled to translate the loop.
(gnat_gimplify_stmt) <LOOP_STMT>: Adjust to new LOOP_STMT semantics.
arm.md (addsi3_cbranch): If destination is a high register...
* config/arm/arm.md (addsi3_cbranch): If destination is a high
register, inputs must be low registers and we need a low register
scratch. Handle alternative 2 like alternative 3.
re PR target/41514 (redundant compare instruction of consecutive conditional branches)
PR target/41514
* config/arm/arm.md (cbranchsi4_insn): Renamed from "*cbranchsi4_insn".
If the previous insn is a cbranchsi4_insn with the same arguments,
omit the compare instruction.
PR target/41514
gcc.target/arm/thumb-comparisons.c: New test.
recog.h (struct recog_data): New field is_operator.
* recog.h (struct recog_data): New field is_operator.
(struct insn_operand_data): New field is_operator.
* recog.c (extract_insn): Set recog_data.is_operator.
* genoutput.c (output_operand_data): Emit code to set the
is_operator field.
* reload.c (find_reloads): Use it rather than testing for an
empty constraint string.
Jakub Jelinek [Fri, 16 Apr 2010 09:26:43 +0000 (11:26 +0200)]
alias.c (memrefs_conflict_p): If x and y are the same VALUE, don't call get_addr on both.
* alias.c (memrefs_conflict_p): If x and y are the same VALUE,
don't call get_addr on both. If one expression is a VALUE and
the other a REG, check VALUE's locs if the REG isn't among them.
Eric Botcazou [Fri, 16 Apr 2010 06:58:43 +0000 (06:58 +0000)]
decl.c (make_type_from_size): Just copy TYPE_NAME.
* gcc-interface/decl.c (make_type_from_size) <INTEGER_TYPE>: Just copy
TYPE_NAME.
* gcc-interface/trans.c (smaller_packable_type_p): Rename into...
(smaller_form_type_p): ...this. Change parameter and variable names.
(call_to_gnu): Use the nominal type of the parameter to create the
temporary if it's a smaller form of the actual type.
(addressable_p): Return false if the actual type is integral and its
size is greater than that of the expected type.
Kaz Kojima [Thu, 15 Apr 2010 21:51:14 +0000 (21:51 +0000)]
re PR target/43741 (sh-elf ICEs for libstdc++-v3/src/ios_init.cc with -m2a)
PR target/43471
* config/sh/sh.c (sh_legitimize_reload_address): Use
MAYBE_BASE_REGISTER_RTX_P instead of BASE_REGISTER_RTX_P.
Remove a unneeded check for offset_base.
Steven G. Kargl [Thu, 15 Apr 2010 21:32:21 +0000 (21:32 +0000)]
re PR fortran/30073 (Array out of bounds gives name of RHS array not LHS array)
PR fortran/30073
* trans-array.c (gfc_trans_array_bound_check): Eliminate a redundant
block of code. Set name to the variable associated with the descriptor.
Eric Botcazou [Thu, 15 Apr 2010 21:15:47 +0000 (21:15 +0000)]
cuintp.c (UI_To_gnu): Fix long line.
* gcc-interface/cuintp.c (UI_To_gnu): Fix long line.
* gcc-interface/gigi.h (MARK_VISITED): Skip objects of constant class.
(process_attributes): Delete.
(post_error_ne_num): Change parameter name.
* gcc-interface/decl.c (gnat_to_gnu_entity): Do not force debug info
with -g3. Remove a couple of obsolete lines. Minor tweaks.
If type annotating mode, operate on trees to compute the adjustment to
the sizes of tagged types. Fix long line.
(cannot_be_superflat_p): Tweak head comment.
(annotate_value): Fold local constant.
(set_rm_size): Fix long line.
* gcc-interface/trans.c (Identifier_to_gnu): Rework comments.
(Attribute_to_gnu): Fix long line.
<Attr_Size>: Remove useless assertion.
Reorder statements. Use size_binop routine.
(Loop_Statement_to_gnu): Use build5 in lieu of build_nt.
Create local variables for the label and the test. Tweak comments.
(Subprogram_Body_to_gnu): Reset cfun to NULL.
(Compilation_Unit_to_gnu): Use the Sloc of the Unit node.
(process_inlined_subprograms): Integrate into...
(Compilation_Unit_to_gnu): ...this.
(gnat_to_gnu): Fix long line.
(post_error_ne_num): Change parameter name.
* gcc-interface/utils.c (process_attributes): Static-ify.
<ATTR_MACHINE_ATTRIBUTE>: Set input_location before proceeding.
(create_type_decl): Add comment.
(create_var_decl_1): Process the attributes after adding the VAR_DECL
to the current binding level.
(create_subprog_decl): Likewise for the FUNCTION_DECL.
(end_subprog_body): Do not reset cfun to NULL.
(build_vms_descriptor32): Fix long line.
(build_vms_descriptor): Likewise.
(handle_nonnull_attribute): Likewise.
(convert_vms_descriptor64): Likewise.
* gcc-interface/utils2.c (fill_vms_descriptor): Fix long line.
(gnat_protect_expr): Fix thinko.
Eric Botcazou [Thu, 15 Apr 2010 20:21:08 +0000 (20:21 +0000)]
trans.c (gigi): Set DECL_IGNORED_P on EH functions.
* gcc-interface/trans.c (gigi): Set DECL_IGNORED_P on EH functions.
(gnat_to_gnu) <N_Op_Eq>: Restore the value of input_location
before translating the top-level node.
(lvalue_required_p) <N_Function_Call>: Return 1 if !constant.
<N_Object_Declaration>: Likewise.
<N_Assignment_Statement>: Likewise.
<N_Unchecked_Type_Conversion>: Likewise.
(call_to_gnu): Remove kludge.
(gnat_to_gnu) <N_Return_Statement>: When not optimizing, force labels
associated with user returns to be preserved.
(gnat_to_gnu): Add special code to deal with boolean rvalues.
* gcc-interface/utils2.c (compare_arrays): Set input_location on all
comparisons.
(build_unary_op) <ADDR_EXPR>: Call build_fold_addr_expr.
<INDIRECT_REF>: Call build_fold_indirect_ref.
Joel Sherrill [Thu, 15 Apr 2010 15:39:47 +0000 (15:39 +0000)]
g-socket.adb: A target can have multiple missing errno's.
2010-04-15 Joel Sherrill <joel.sherrill@oarcorp.com>
* g-socket.adb: A target can have multiple missing errno's. This
will result in multiple errno's being defined as -1. Because of this
we can not use a case but must use a series of if's to avoid
a duplicate case error in GNAT.Sockets.Resolve_Error.
Joel Sherrill [Thu, 15 Apr 2010 15:35:27 +0000 (15:35 +0000)]
gsocket.h: Run-time can no longer be built without network OS headers available.
2010-04-13 Joel Sherrill <joel.sherrill@oarcorp.com>
* gsocket.h: Run-time can no longer be built without network
OS headers available. Changing RTEMS GNAT build procedure to
reflect this and letting run-time build use network .h files.
Mark Shinwell [Thu, 15 Apr 2010 14:39:22 +0000 (14:39 +0000)]
thumb2.md (thumb2_movsi_insn): Split ldr and str alternatives according to use of high and low regs.
gcc/
* config/arm/thumb2.md (thumb2_movsi_insn): Split ldr and str
alternatives according to use of high and low regs.
* config/arm/vfp.md (thumb2_movsi_vfp): Likewise.
* config/arm/arm.h (CONDITIONAL_REGISTER_USAGE): Use high regs when
optimizing for size on Thumb-2.
Co-Authored-By: Julian Brown <julian@codesourcery.com>
From-SVN: r158378
Eric Botcazou [Thu, 15 Apr 2010 12:40:15 +0000 (12:40 +0000)]
trans.c (call_to_gnu): Open a nesting level if this is a statement.
* gcc-interface/trans.c (call_to_gnu): Open a nesting level if this is
a statement. Otherwise, if at top-level, push the processing of the
elaboration routine. In the misaligned case, issue the error messages
again on entry and create the temporary explicitly. Do not issue them
for CONSTRUCTORs.
For a function call, emit the range check if necessary.
In the copy-in copy-out case, create the temporary for the return
value explicitly.
Do not unnecessarily convert by-ref parameters to the formal's type.
Remove obsolete guards in conditions.
(gnat_to_gnu) <N_Assignment_Statement>: For a function call, pass the
target to call_to_gnu in all cases.
(gnat_gimplify_expr) <ADDR_EXPR>: Remove handling of SAVE_EXPR.
(addressable_p) <CONSTRUCTOR>: Return false if not static.
<COMPOUND_EXPR>: New case.
* gcc-interface/utils2.c (build_unary_op) <ADDR_EXPR>: Fold a compound
expression if it has unconstrained array type.
(gnat_mark_addressable) <COMPOUND_EXPR>: New case.
(gnat_stabilize_reference) <COMPOUND_EXPR>: Stabilize operands on an
individual basis.
Eric Botcazou [Thu, 15 Apr 2010 10:38:36 +0000 (10:38 +0000)]
trans.c (gigi): Do not start statement group.
* gcc-interface/trans.c (gigi): Do not start statement group.
(Compilation_Unit_to_gnu): Set current_function_decl to NULL.
Start statement group and push binding level here...
(gnat_to_gnu) <N_Compilation_Unit>: ...and not here.
Do not push fake contexts at top level. Remove redundant code.
(call_to_gnu): Rename a local variable and constify another.
* gcc-interface/utils.c (gnat_pushlevel): Fix formatting nits.
(set_current_block_context): Set it as the group's block.
(gnat_init_decl_processing): Delete unrelated init code.
(end_subprog_body): Use NULL_TREE.