* exp_ch5.adb (Controlled_Type): New routine.
(Expand_N_Extended_Return_Statement): When generating a move of the
final list in extended return statements, check the type of the
function and in the case of double expanded return statements, the type
of the returned object.
(Expand_Simple_Function_Return): Perform an interface conversion when
the type of the returned object is an interface and the context is an
extended return statement.
* exp_ch4.adb (Expand_N_And_Then, Expand_N_Or_Else): Improve constant
folding. We were folding things like "False and then ...", but not
"X and then ..." where X is a constant whose value is known at compile
time.
Thomas Quinot [Wed, 20 Aug 2008 14:27:01 +0000 (16:27 +0200)]
exp_strm.adb (Build_Elementary_Input_Call, [...]): Fix incorrect condition in circuitry that selects the stream attribute routines...
2008-08-20 Thomas Quinot <quinot@adacore.com>
* exp_strm.adb (Build_Elementary_Input_Call,
Build_Elementary_Write_Call): Fix incorrect condition in circuitry that
selects the stream attribute routines for long float types.
Arnaud Charlet [Wed, 20 Aug 2008 13:24:40 +0000 (15:24 +0200)]
2008-08-20 Gary Dismukes <dismukes@adacore.com>
* exp_ch11.adb:
(Expand_Exception_Handlers): Call Make_Exception_Handler instead of
Make_Implicit_Exception_Handler when rewriting an exception handler with
a choice parameter, and pass the handler's Sloc instead of that of the
handled sequence of statements. Make_Implicit_Exception_Handler sets the
Sloc to No_Location (unless debugging generated code), which we don't
want for the case of a user handler.
H.J. Lu [Wed, 20 Aug 2008 13:22:30 +0000 (06:22 -0700)]
re PR target/37169 (Inefficent code for _mm_cvtsi64_si128)
gcc/
2008-08-20 H.J. Lu <hongjiu.lu@intel.com>
PR target/37169
* config/i386/i386.c (ix86_expand_vector_init_one_nonzero): In
V2DI mode, for SSE4.1, use movq instead of vector set if the
second element is zero and inter-unit moves are OK.
Richard Guenther [Wed, 20 Aug 2008 12:59:10 +0000 (12:59 +0000)]
passes.c (init_optimization_passes): Move the second forwprop pass before alias computation.
2008-08-20 Richard Guenther <rguenther@suse.de>
* passes.c (init_optimization_passes): Move the second
forwprop pass before alias computation. Remove the second
DCE pass. Remove the first dominator and phi copy/const
prop passes.
Jose Ruiz [Wed, 20 Aug 2008 12:36:24 +0000 (14:36 +0200)]
errno.c (__get_errno for MaRTE): Use the MaRTE function pthread_errno to get access to the per-task errno variable.
2008-08-20 Jose Ruiz <ruiz@adacore.com>
* errno.c (__get_errno for MaRTE): Use the MaRTE function pthread_errno
to get access to the per-task errno variable.
(__set_errno for MaRTE): Do not redefine this function here since it is
already defined in MaRTE.
Ed Schonberg [Wed, 20 Aug 2008 11:02:51 +0000 (11:02 +0000)]
sem_aggr.adb, [...] (Valid_Ancestor): Resolve confusion between partial and full views of an ancestor of the context...
2008-08-20 Ed Schonberg <schonberg@adacore.com>
* sem_aggr.adb, sem_type.adb, exp_ch9.ads, einfo.ads,
exp_ch6.adb, exp_aggr.adb (Valid_Ancestor): Resolve
confusion between partial and full views of an ancestor of the context
type when the parent is a private extension declared in a parent unit,
and full views are available for the context type.
Nick Clifton [Wed, 20 Aug 2008 10:23:08 +0000 (10:23 +0000)]
configure.ac (HAVE_GAS_CFI_DIRECTIVE): Always test for assembler support of this feature.
* configure.ac (HAVE_GAS_CFI_DIRECTIVE): Always test for assembler
support of this feature. Do not assume that a sufficiently new
assembler will support the feature regardless of the target type.
(HAVE_GAS_CFI_PERSONALITY_DIRECTIVE): Likewise.
* configure: Regenerate.
Richard Guenther [Wed, 20 Aug 2008 08:28:17 +0000 (08:28 +0000)]
tree-vrp.c (found_in_subgraph): Remove.
2008-08-20 Richard Guenther <rguenther@suse.de>
* tree-vrp.c (found_in_subgraph): Remove.
(live): New global static.
(live_on_edge): New function.
(blocks_visited): Remove.
(register_edge_assert_for_2): Use live_on_edge.
(find_conditional_asserts): Remove code dealing with
found_in_subgraph. Do not walk the CFG.
(find_switch_asserts): Likewise.
(find_assert_locations_1): Renamed from find_assert_locations.
Move finding assert locations for conditional and switch
statements first. Update live bitmap. Do not walk the CFG.
(find_assert_locations): New function.
(insert_range_assertions): Remove entry of CFG walk.
Adjust call to find_assert_locations.
* tree-ssa-pre.c (do_regular_insertion): Ignore critical edges
that only can appear because of fake exit edges but assert we
never try to insert on those.
(fini_pre): Do not remove fake exit edges here...
(execute_pre): ...but here, before committing edge inserts.
2008-08-19 Rafael Espindola <espindola@google.com>
* varasm.c (weak_decls): Move earlier in the file.
(assemble_external): Add weak decls to the weak_decls list.
(declare_weak): Don't add decls to the weak_decls list.
Richard Guenther [Tue, 19 Aug 2008 09:06:54 +0000 (09:06 +0000)]
re PR tree-optimization/35972 (load-PRE missed opportunities without SFTs)
2008-08-19 Richard Guenther <rguenther@suse.de>
PR tree-optimization/35972
PR tree-optimization/23094
* tree-ssa-sccvn.h (vn_reference_lookup_pieces): Add maywalk
parameter.
* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Properly
handle MISALIGNED_INDIRECT_REF.
(get_ref_from_reference_ops): New helper.
(vn_reference_lookup_pieces): Walk the use-def chain using the
alias-oracle if requested.
* tree-ssa-pre.c (phi_translate_1): Do reference lookup with
walking the use-def chain.
(compute_avail): But not here.
(create_component_ref_by_pieces_1): Properly handle
MISALIGNED_INDIRECT_REF.
(do_regular_insertion): Handle fully redundant
expressions after PHI-translation also for SSA_NAME values, not
only constants. Correctly use edoubleprime for that.
Ira Rosen [Tue, 19 Aug 2008 08:31:41 +0000 (08:31 +0000)]
tree-vectorizer.c (supportable_widening_operation): Support multi-step conversion...
* tree-vectorizer.c (supportable_widening_operation): Support
multi-step conversion, return the number of steps in such conversion
and the required intermediate types.
(supportable_narrowing_operation): Likewise.
* tree-vectorizer.h (vect_pow2): New function.
(supportable_widening_operation): Change argument types.
(supportable_narrowing_operation): Likewise.
(vectorizable_type_promotion): Add an argument.
(vectorizable_type_demotion): Likewise.
* tree-vect-analyze.c (vect_analyze_operations): Call
vectorizable_type_promotion and vectorizable_type_demotion with
additional argument.
(vect_get_and_check_slp_defs): Detect patterns.
(vect_build_slp_tree): Add an argument, don't fail in case of multiple
types.
(vect_analyze_slp_instance): Don't fail in case of multiple types. Call
vect_build_slp_tree with correct arguments. Calculate unrolling factor
according to the smallest type in the loop.
(vect_detect_hybrid_slp_stmts): Include statements from patterns.
* tree-vect-patterns.c (vect_recog_widen_mult_pattern): Call
supportable_widening_operation with correct arguments.
* tree-vect-transform.c (vect_get_slp_defs): Allocate output vector
operands lists according to the number of vector statements in left
or right node, if exists.
(vect_gen_widened_results_half): Remove unused argument.
(vectorizable_conversion): Call supportable_widening_operation,
supportable_narrowing_operation, and vect_gen_widened_results_half
with correct arguments.
(vectorizable_assignment): Change documentation, support multiple
types in SLP.
(vectorizable_operation): Likewise.
(vect_get_loop_based_defs): New function.
(vect_create_vectorized_demotion_stmts): Likewise.
(vectorizable_type_demotion): Support loop-aware SLP and general
multi-step conversion. Call vect_get_loop_based_defs and
vect_create_vectorized_demotion_stmts for transformation.
(vect_create_vectorized_promotion_stmts): New function.
(vectorizable_type_promotion): Support loop-aware SLP and general
multi-step conversion. Call vect_create_vectorized_promotion_stmts
for transformation.
(vectorizable_store): Change documentation, support multiple
types in SLP.
(vectorizable_load): Likewise.
(vect_transform_stmt): Pass SLP_NODE to
vectorizable_type_promotion and vectorizable_type_demotion.
(vect_schedule_slp_instance): Move here the calculation of number
of vectorized statements for each node from...
(vect_schedule_slp): ... here.
(vect_transform_loop): Call vect_schedule_slp without the last
argument.
Paul Yuan [Mon, 18 Aug 2008 19:02:44 +0000 (19:02 +0000)]
cgraph.c (cgraph_edge): Handle inconsistent counts when setting count_scale.
2008-08-18 Paul Yuan <yingbo.com@gmail.com>
Vinodha Ramasamy <vinodha@google.com>
* cgraph.c (cgraph_edge): Handle inconsistent counts when setting
count_scale.
* value-prof.c (check_counter): Fix the counter if
flag_profile_correction is true.
(tree_divmod_fixed_value_transform, tree_mod_pow2_value_transform,
tree_mod_subtract_transform):
Follow check_counter parameter change.
* common.opt (fprofile-correction): New option.
* mcf.c: New file.
* profile.c (edge_info, EDGE_INFO): Moved to new file profile.h.
(sum_edge_counts, is_edge_inconsistent, correct_negative_edge_counts,
is_inconsistent, set_bb_counts, read_profile_edge_counts): New
functions.
(compute_branch_probabilities): Refactored. Invokes mcf_smooth_cfg if
flag_profile_correction is set.
Samuel Tardieu [Mon, 18 Aug 2008 09:09:24 +0000 (09:09 +0000)]
[multiple changes]
2008-08-18 Samuel Tardieu <sam@rfc1149.net>
Robert Dewar <dewar@adacore.com>
gcc/ada/
PR ada/30827
* bindgen.adb (Gen_Output_File_Ada): Zero-terminate the
version string.
Move comment in the right place.
* g-comver.adb (Version): Look for a zero-termination in
addition to a closing parenthesis.
2008-08-18 Robert Dewar <dewar@adacore.com>
gcc/testsuite/
PR ada/30827
* gnat.dg/test_version.adb: New.
Richard Guenther [Mon, 18 Aug 2008 08:42:57 +0000 (08:42 +0000)]
passes.c (init_optimization_passes): Remove cleanup_cfg1, sdse1 and addressables2 passes.
2008-08-18 Richard Guenther <rguenther@suse.de>
* passes.c (init_optimization_passes): Remove cleanup_cfg1,
sdse1 and addressables2 passes. Replace dce1 with cddce1.
Move call_cdce before build_alias. Move copyrename2,
cunrolli and ccp2 beafore build_alias. Re-add addressable2
right after final inlining.
* tree-cfg.c (build_gimple_cfg): Do not dump function here.
(pass_build_cfg): But instead via TODO_dump_func.
Richard Guenther [Mon, 18 Aug 2008 08:40:32 +0000 (08:40 +0000)]
tree-sra.c (generate_element_init_1): Deal with NULL constructor element index.
2008-08-18 Richard Guenther <rguenther@suse.de>
* tree-sra.c (generate_element_init_1): Deal with NULL constructor
element index.
(scalarize_init): If we failed to generate some initializers
do not generate zeros for not instantiated members. Instead
rely on the copy out.
* tree-ssa-operands.c (get_addr_dereference_operands): Warn
about missing flow-sensitive alias info only if we have
aliases computed.
gcc/
2008-08-17 Daniel Jacobowitz <dan@codesourcery.com>
Richard Sandiford <rdsandiford@googlemail.com>
* doc/install.texi (--with-mips-plt): Document.
* doc/invoke.texi (-mplt, -mno-plt): Document.
* config.gcc (mips*-*-*): Add mips-plt to supported_defaults
and handle ${with_mips_plt}.
* config/mips/mips.opt (mplt): New option.
* config/mips/mips.h (TARGET_ABICALLS_PIC0): New macro.
(TARGET_ABICALLS_PIC2): Likewise.
(TARGET_GPWORD): Return false for TARGET_ABSOLUTE_ABICALLS.
(OPTION_DEFAULT_SPECS): Add a mips-plt entry.
(ASM_SPEC): Use !mabi=* instead of !mabi*.
(MIPS_CALL): Use TARGET_ABICALLS_PIC2 instead of TARGET_ABICALLS
to decide whether to output ".option picX" directives.
* config/mips/linux.h (SUBTARGET_ASM_SPEC): Remove -mabi=64 handling.
Pass -call_nonpic rather than -KPIC for -mplt.
(BASE_DRIVER_SELF_SPECS): Remove -mplt if -mno-shared is not present
on the command line. Also remove it when -mabi=64 is used without
-msym32.
* config/mips/linux64.h (SUBTARGET_ASM_SPEC): Delete.
* config/mips/mips.c (mips_use_pic_fn_addr_reg_p): Handle
TARGET_ABICALLS_PIC0.
(mips_classify_symbol): Use TARGET_ABICALLS_PIC2 instead of
TARGET_ABICALLS.
(mips16_build_function_stub): Only output ".option pic" directives
and PIC stubs if TARGET_ABICALLS_PIC2. Call through $25 instead of $1.
(mips16_build_call_stub): Fix comment and remove redundant
".set at"/"set .noat" directives.
(mips_function_rodata_section): Use the default behaviour for
TARGET_ABSOLUTE_ABICALLS.
(mips_file_start): Emit ".option pic0" for TARGET_ABICALLS_PIC0.
(mips_global_pointer): Handle TARGET_ABICALLS_PIC0.
(mips_restore_gp): Do nothing if the current function doesn't use
a global pointer.
(mips_expand_prologue): Only save $gp if the current function uses it.
Use a normal move for TARGET_ABICALLS_PIC0.
(mips_override_options): Only set flag_pic if TARGET_ABICALLS_PIC2.
Co-Authored-By: Richard Sandiford <rdsandiford@googlemail.com>
From-SVN: r139170
Paolo Carlini [Sun, 17 Aug 2008 10:19:34 +0000 (10:19 +0000)]
acinclude.m4 ([GLIBCXX_CHECK_LFS], [...]): Use GCC_TRY_COMPILE_OR_LINK instead of AC_TRY_LINK...
2008-08-17 Paolo Carlini <paolo.carlini@oracle.com>
* acinclude.m4 ([GLIBCXX_CHECK_LFS], [GLIBCXX_CHECK_POLL],
[GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [GLIBCXX_CHECK_WRITEV]):
Use GCC_TRY_COMPILE_OR_LINK instead of AC_TRY_LINK, in C++,
with -fno-exceptions as flags.
* configure.ac: Run unconditionally GLIBCXX_CHECK_LFS,
GLIBCXX_CHECK_POLL, GLIBCXX_CHECK_S_ISREG_OR_S_IFREG,
GLIBCXX_CHECK_WRITEV and commonized AC_CHECK_HEADERS.
* crossconfig.m4: Adjust; remove AC_CHECK_HEADERS commonized
in configure.ac.
* configure: Regenerate.
Eric Botcazou [Sat, 16 Aug 2008 18:40:57 +0000 (18:40 +0000)]
re PR middle-end/20548 (ACATS c52103x c52104x c52104y segfault)
PR ada/20548
* common.opt (-fstack-check): Do not declare the variable here.
(-fstack-check=): New option variant.
* doc/invoke.texi (Code Gen Options): Document it.
* expr.h (STACK_OLD_CHECK_PROTECT): New macro.
(STACK_CHECK_PROTECT): Bump to 3 pages if DWARF-2 EH is used.
(STACK_CHECK_STATIC_BUILTIN): New macro.
* doc/tm.texi (Stack Checking): Document STACK_CHECK_STATIC_BUILTIN.
* opts.c: Include expr.h.
(common_handle_option) <OPT_fold_stack_check_>: New case.
<OPT_fstack_check>: Likewise.
* calls.c (initialize_argument_information): Use TYPE_SIZE_UNIT
consistently in the test for variable-sized types. Adjust for
new behaviour of flag_stack_check.
* explow.c: Include except.h.
(allocate_dynamic_stack_space): Do not take into account
STACK_CHECK_MAX_FRAME_SIZE for static builtin stack checking.
* function.c (gimplify_parameters): Use DECL_SIZE_UNIT in the test
for variable-sized parameters. Treat all parameters whose size is
greater than STACK_CHECK_MAX_VAR_SIZE as variable-sized if generic
stack checking is enabled.
* gimplify.c (gimplify_decl_expr): Treat non-static objects whose
size is greater than STACK_CHECK_MAX_VAR_SIZE as variable-sized
if generic stack checking is enabled.
(expand_function_end): Adjust for new behaviour of flag_stack_check.
* reload1.c (reload): Likewise.
* stmt.c (expand_decl): Assert that all automatic variables have
fixed size at this point and remove dead code.
* flags.h (stack_check_type): New enumeration type.
(flag_stack_check): Declare.
* toplev.c (flag_stack_check): New global variable.
* Makefile.in (opts.o): Add dependency on EXPR_H.
(explow.o): Add dependency on except.h.
ada/
* gcc-interface/decl.c (gnat_to_gnu_entity): Use DECL_SIZE_UNIT in the
setjmp test consistently. Adjust for new behaviour of flag_stack_check.
* gcc-interface/utils2.c (build_call_alloc_dealloc): Remove redundant
test of flag_stack_check. Adjust for new behaviour of flag_stack_check.
Jerry DeLisle [Sat, 16 Aug 2008 03:38:31 +0000 (03:38 +0000)]
re PR libfortran/35863 ([F2003] Implement ENCODING="UTF-8")
2008-08-15 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/35863
* intrinsics/selected_char_kind.c: Enable iso_10646.
* io/read.c (typedef uchar): New type.
(read_utf8): New function to read a single UTF-8 encoded character.
(read_utf8_char1): New function to read UTF-8 into a KIND=1 string.
(read_default_char1): New functio to read default into KIND=1 string.
(read_utf8_char4): New function to read UTF-8 into a KIND=4 string.
(read_default_char4): New function to read UTF-8 into a KIND=4 string.
(read_a): Modify to use the new functions.
(read_a_char4): Modify to use the new functions.
* io/write.c (error.h): Add include. (typedef uchar): New type.
(write_default_char4): New function to default write KIND=4 string.
(write_utf8_char4): New function to UTF-8 write KIND=4 string.
(write_a_char4): Modify to use new functions.
(write_character): Modify to use new functions.
Eric Botcazou [Fri, 15 Aug 2008 22:34:52 +0000 (22:34 +0000)]
expr.c (expand_expr_real_1): When converting to BLKmode, try to fetch an inner memory reference.
* expr.c (expand_expr_real_1) <VIEW_CONVERT_EXPR>: When converting
to BLKmode, try to fetch an inner memory reference. Use 'mode' in
lieu of TYPE_MODE (type) throughout.
Joseph Myers [Fri, 15 Aug 2008 20:12:01 +0000 (21:12 +0100)]
arm.c (add_minipool_backward_ref): Check for 8-byte-aligned entries in second case of forcing insertion after a...
* config/arm/arm.c (add_minipool_backward_ref): Check for
8-byte-aligned entries in second case of forcing insertion after a
particular entry. Change third case to avoid inserting
non-8-byte-aligned entries before 8-byte-aligned ones.