Jakub Jelinek [Thu, 20 Nov 2008 09:42:35 +0000 (10:42 +0100)]
re PR fortran/38181 (calls to SIZE not optimized out of loops)
PR fortran/38181
* trans-intrinsic.c (gfc_conv_intrinsic_size): Inline 2 argument
size if the second argument is not optional and one argument size
for rank 1 arrays.
* gfortran.dg/array_section_2.f90: Adjust pattern to match
the inlined size0 instead of a size0 call.
Zdenek Dvorak [Thu, 20 Nov 2008 08:05:12 +0000 (09:05 +0100)]
re PR rtl-optimization/32283 (Missed induction variable optimization)
PR rtl-optimization/32283
* tree-ssa-loop-niter.c (scev_probably_wraps_p): Use type of the base
of the induction variable to decide whether it may wrap.
* tree-ssa-loop-ivopts.c (rewrite_use_compare): Emit the initialization
of the bound before the loop.
* simplify-rtx.c (simplify_binary_operation_1): Add two simplifications
regarding AND.
(simplify_plus_minus): Only fail if no simplification is possible.
* loop-iv.c (simple_rhs_p): Consider reg + reg and reg << cst simple.
Jakub Jelinek [Thu, 20 Nov 2008 01:47:10 +0000 (02:47 +0100)]
re PR c++/36631 (attribute always_inline -> sorry, unimplemented: recursive inlining)
PR c++/36631
* gimplify.c (gimplify_call_expr): Defer most of the cannot inline
checking until GIMPLE lowering.
* gimple-low.c (check_call_args): New function.
(lower_stmt) <case GIMPLE_CALL>: Call it.
Vladimir Makarov [Wed, 19 Nov 2008 21:25:00 +0000 (21:25 +0000)]
re PR bootstrap/37859 (Bootstrap failure on mips64octeon-unknown-linux-gnu)
2008-11-19 Vladimir Makarov <vmakarov@redhat.com>
PR bootstrap/37859
* ira-int.h (struct ira_loop_tree_node): New member
entered_from_non_parent_p.
* ira-color.c (print_loop_title): Print loop bbs.
* ira-emit.c (entered_from_non_parent_p,
setup_entered_from_non_parent_p): New functions.
(not_modified_p): Rename to store_can_be_removed_p. Check there
is no side entries.
(generate_edge_moves): Use store_can_be_removed_p instead of
not_modified_p.
(ira_emit): Call setup_entered_from_non_parent_p.
* ira-build.c (copy_info_to_removed_store_destinations):
Accumulate CALL_FREQ, CALL_CROSSED_NUM, and
ALLOCNO_EXCESS_PRESSURE_POINTS_NUM.
(ira_flattening): Don't CHECK MEM_OPTIMIZED_DEST[_P], always
update all accumulated attributes.
* ira-conflicts.c (ira_allocno_live_ranges_intersect_p,
ira_pseudo_live_ranges_intersect_p): Rename to
allocnos_have_intersected_live_ranges_p and
pseudos_have_intersected_live_ranges_p. Move them from here to
...
* ira-color.c: ... here
(coalesced_allocno_conflict_p): Use
allocnos_have_intersected_live_ranges_p.
(coalesced_allocnos_living_at_program_points,
coalesced_allocnos_live_at_points_p,
set_coalesced_allocnos_live_points): Remove.
(slot_coalesced_allocnos_live_ranges,
slot_coalesced_allocno_live_ranges_intersect_p,
setup_slot_coalesced_allocno_live_ranges): New.
(coalesce_spill_slots): Use ranges of coalesced allocnos.
(ira_sort_regnos_for_alter_reg): Use
allocnos_have_intersected_live_ranges_p.
(ira_reuse_stack_slot): Use
pseudos_have_intersected_live_ranges_p.
* ira-build.c (copy_allocno_live_range_list): Rename to
ira_copy_allocno_live_range_list. Make it external.
(merge_ranges): Rename to ira_merge_allocno_live_ranges. Make it
external.
(ira_allocno_live_ranges_intersect_p): New.
(ira_finish_allocno_live_range_list): New.
(finish_allocno): Use it.
(remove_unnecessary_allocnos): Use ira_merge_allocno_live_ranges.
(copy_info_to_removed_store_destinations): Ditto. Use
ira_copy_allocno_live_range_list.
(ira_flattening): Use ira_merge_allocno_live_ranges.
* ira.c (too_high_register_pressure_p): New function.
(ira): Switch off sharing spill slots if the pressure is too high.
Richard Guenther [Wed, 19 Nov 2008 17:38:15 +0000 (17:38 +0000)]
tree.c (build2_stat): Allow non-POINTER_PLUS_EXPRs with non-sizetype offsets if...
2008-11-19 Richard Guenther <rguenther@suse.de>
* tree.c (build2_stat): Allow non-POINTER_PLUS_EXPRs with
non-sizetype offsets if their precision matches that of
the pointer.
* expr.c (expand_expr_real_1): Always sign-extend the offset
operand of a POINTER_PLUS_EXPR.
Razya Ladelsky [Wed, 19 Nov 2008 16:08:01 +0000 (16:08 +0000)]
re PR tree-optimization/38156 (gcc.dg/tree-ssa/update-unswitch-1.c fails when compiled with -ftree-parallelize-loops=4)
2008-11-19 Razya Ladelsky <razya@il.ibm.com>
PR target/38156
* tree-parloops.c (loop_parallel_p): NULL vect_dump.
(separate_decls_in_region): Create shared struct even when there
are only reductions.
Andrew Stubbs [Wed, 19 Nov 2008 11:23:28 +0000 (11:23 +0000)]
re PR target/36133 (GCC creates suboptimal ASM : Code includes unneeded TST instructions)
2008-11-19 Andrew Stubbs <ams@codesourcery.com>
gcc/
PR target/36133
* config/m68k/m68k.h (CC_OVERFLOW_UNUSABLE, CC_NO_CARRY): New defines.
* config/m68k/m68k.c (notice_update_cc): Set cc_status properly for
shift instructions.
* config/m68k/m68k.md: Adjust all conditional branches that use the
carry and overflow flags so they understand CC_OVERFLOW_UNUSABLE.
gcc/testsuite/
PR target/36133
* gcc.target/m68k/pr36133.c: New test.
Jakub Jelinek [Tue, 18 Nov 2008 23:01:35 +0000 (00:01 +0100)]
re PR tree-optimization/38051 (Miscompilation of glibc's memcmp)
PR tree-optimization/38051
* gcc.c-torture/execute/pr38051.c (buf): Remove aligned attribute.
(buf2): Removed.
(main): Only run on little endian targets with
sizeof (long) == sizeof (void *). Use just one buffer, align the
pointers at runtime.
Uros Bizjak [Tue, 18 Nov 2008 22:00:12 +0000 (23:00 +0100)]
re PR target/37362 (Bootstrap broken on mipsisa64r2-linux-gcc)
PR target/37362
* config/mips/mips.md (move_doubleword_fpr<mode>): Check that "high"
is a register or zero operand in the correct mode before generating
mtch1 insn or a register operand in the correct mode before generating
mfch1 insn.
(mtch1<mode>): Correct operand 1 predicate to reg_or_0_operand.
testsuite/ChangeLog:
PR target/37362
* gcc.target/mips/pr37362.c: New test.
Adam Nemet [Tue, 18 Nov 2008 02:08:24 +0000 (02:08 +0000)]
expmed.c (extract_bit_field_1): Also use a temporary and convert_extracted_bit_field when...
* expmed.c (extract_bit_field_1): Also use a temporary and
convert_extracted_bit_field when the conversion from ext_mode to
the target mode requires explicit truncation.
testsuite/
* gcc.c-torture/execute/20081117-1.c: New test.
gcc/
* config/mips/mips.h (REG_ALLOC_ORDER): Put accumulators first.
Tweak formatting.
* config/mips/mips.c (mips_ira_cover_classes): Don't use accumulator
registers when not optimizing.
gcc/testsuite/
* gcc.target/mips/dspr2-MULT.c: Just check for $ac1 and $ac2.
* gcc.target/mips/dspr2-MULTU.c: Likewise.
mips.md (*mul_acc_si): Remove middle alternative and its associated define_split.
gcc/
* config/mips/mips.md (*mul_acc_si): Remove middle alternative
and its associated define_split. Expose the all-d alternative
to the register allocator, but mark it with "?". Mark the first
alternative with "*?*?".
(*mul_sub_si): Likewise.
(*mul_acc_si_r3900): New pattern.
Jakub Jelinek [Mon, 17 Nov 2008 20:58:52 +0000 (21:58 +0100)]
re PR middle-end/38140 (ice for C code with -O2)
PR middle-end/38140
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): If
propagating x = &a into *x = b, add a cast if not useless
type conversion or don't optimize if another stmt would be
needed.
Jack Howarth [Mon, 17 Nov 2008 19:39:54 +0000 (19:39 +0000)]
re PR testsuite/38099 (tmpdir-gcc.dg-struct-layout-1/t027 c_compat_x_tst.o-c_compat_y_tst.o execute failure)
2008-11-14 Jack Howarth <howarth@bromo.med.uc.edu>
PR testsuite/38099
* gcc.dg/compat/struct-layout-1_generate.c: Also use -no-mmx on
i?86/x86_64 darwin.
* g++.dg/compat/struct-layout-1_generate.c: Same.
Uros Bizjak [Mon, 17 Nov 2008 11:19:06 +0000 (12:19 +0100)]
re PR middle-end/37908 (atomic NAND op generate wrong code; __sync_nand_and_fetch, __sync_fetch_and_nand)
PR middle-end/37908
* optabs.c (expand_sync_operation): Properly handle NAND case
by calculating ~(t1 & val) instead of (~t1 & val).
* builtins.c (expand_builtin_sync_operation): Warn for changed
semantics in NAND builtins.
* c.opt (Wsync-nand): New warning option. Describe -Wsync-nand.
* doc/invoke.texi (Warning options): Add Wsync-nand.
* doc/extend.texi (Atomic Builtins) [__sync_fetch_and_nand]: Correct
__sync_fetch_and_nand builtin operation in the example. Add a note
about changed semantics in GCC 4.4.
[__sync_nand_and_fetch]: Correct __sync_nand_and_fetch builtin
operation in the example. Add a note about changed semantics in
GCC 4.4.
testsuite/ChangeLog:
PR middle-end/37908
* gcc.dg/pr37908.c: New test.
* gcc.dg/ia64-sync-1.c: Correct __sync_fetch_and_nand and
__sync_nand_and_fetch results. Add dg-message to look for the warning
about changed semantics of NAND builtin.
(init_si, init_di): Change init value for __sync_fetch_and_nand to -1.
(test_si, test_di): Change expected result of
__sync_nand_and_fetch to ~7.
* gcc.dg/ia64-sync-2.c: Correct __sync_fetch_and_nand and
__sync_nand_and_fetch results. Add dg-message to look for the warning
about changed semantics of NAND builtin.
(init_noret_si, init_noret_di): Change init value for
__sync_fetch_and_nand to -1.
(init_noret_si, init_noret_di): Change expected result of
__sync_nand_and_fetch to ~7.
* gcc.dg/sync-2.c: Correct __sync_fetch_and_nand and
__sync_nand_and_fetch results. Add dg-message to look for the warning
about changed semantics of NAND builtin.
(init_qi, init_qi): Change init value for __sync_fetch_and_nand to -1.
(init_hi, init_hi): Change expected result of
__sync_nand_and_fetch to ~7.
* gcc.dg/sync-3.c: Copy from sync-2.c instead of including
the c source file.
* gcc.c-torture/compile/sync-1.c: Add dg-message to look for the
warning about changed semantics of NAND builtin.
* gcc.c-torture/compile/sync-2.c: Ditto.
* gcc.c-torture/compile/sync-3.c: Ditto.
Mikael Morin [Sun, 16 Nov 2008 22:45:10 +0000 (23:45 +0100)]
re PR fortran/35681 (wrong result for vector subscripted array expression in MVBITS)
2008-11-16 Mikael Morin <mikael.morin@tele2.fr>
PR fortran/35681
* dependency.c (gfc_check_argument_var_dependency): Add
elemental check flag. Issue a warning if we find a dependency
but don't generate a temporary. Add the case of an elemental
function call as actual argument to an elemental procedure.
Add the case of an operator expression as actual argument
to an elemental procedure.
(gfc_check_argument_dependency): Add elemental check flag.
Update calls to gfc_check_argument_var_dependency.
(gfc_check_fncall_dependency): Add elemental check flag.
Update call to gfc_check_argument_dependency.
* trans-stmt.c (gfc_trans_call): Make call to
gfc_conv_elemental_dependency unconditional, but with a flag
whether we should check dependencies between variables.
(gfc_conv_elemental_dependency): Add elemental check flag.
Update call to gfc_check_fncall_dependency.
* trans-expr.c (gfc_trans_arrayfunc_assign): Update call to
gfc_check_fncall_dependency.
* resolve.c (find_noncopying_intrinsics): Update call to
gfc_check_fncall_dependency.
* dependency.h (enum gfc_dep_check): New enum.
(gfc_check_fncall_dependency): Update prototype.
2008-11-16 Mikael Morin <mikael.morin@tele2.fr>
PR fortran/35681
* gfortran.dg/elemental_dependency_1.f90: New test.
re PR target/38052 (genautomata segfaults when -O2 is enabled)
gcc/
PR target/38052
* config/mips/mips.c (mips_cfun_call_saved_reg_p)
(mips_cfun_might_clobber_call_saved_reg_p): New functions,
split out from...
(mips_save_reg_p): ...here. Always consult TARGET_CALL_SAVED_GP
rather than call_really_used_regs when handling $gp.
re PR target/38052 (genautomata segfaults when -O2 is enabled)
gcc/
PR target/38052
* config/mips/mips.c (machine_function): Update the comment
above global_pointer.
(mips_global_pointer): Use INVALID_REGNUM rather than 0 to indicate
that a function doesn't need a global pointer.
(mips_current_loadgp_style): Update accordingly.
(mips_restore_gp): Likewise.
(mips_output_cplocal): Likewise.
(mips_expand_prologue): Likewise.
* config/sparc/sparc.c (function_arg_vector_value): Remove 'base_mode'
parameter. Use DImode for computing the number of registers.
(function_arg): Adjust for above change.
(function_value): Likewise.
Paul Thomas [Sun, 16 Nov 2008 12:00:44 +0000 (12:00 +0000)]
re PR fortran/37926 (Program gives wrong output (connected to char len))
2008-11-16 Paul Thomas <pault@gcc.gnu.org>
PR fortran/37926
* trans-expr.c (gfc_free_interface_mapping): Null sym->formal
(gfc_add_interface_mapping): Copy the pointer to the formal
arglist, rather than using copy_formal_args.
Jerry DeLisle [Sat, 15 Nov 2008 19:25:35 +0000 (19:25 +0000)]
re PR libfortran/37294 (Namelist I/O to array character internal units)
2008-11-15 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/37294
* io/write.c (namelist_write_newline): Use array loop specification to
advance to next internal array unit record. (namelist_write): Adjust to
accomodate the internal array unit behavior.
Paul Thomas [Sat, 15 Nov 2008 17:26:13 +0000 (17:26 +0000)]
re PR fortran/37926 (Program gives wrong output (connected to char len))
2008-11-15 Paul Thomas <pault@gcc.gnu.org>
PR fortran/37926
* trans-expr.c (gfc_add_interface_mapping): Transfer the formal
arglist and the always_explicit attribute if the dummy arg is a
procedure.
2008-11-15 Paul Thomas <pault@gcc.gnu.org>
PR fortran/37926
* gfortran.dg/dummy_procedure_3.f90: New test.
Eric Botcazou [Sat, 15 Nov 2008 12:34:00 +0000 (12:34 +0000)]
decl.c (gnat_to_gnu_entity): Force constants initialized to a static constant to be statically allocated...
* gcc-interface/decl.c (gnat_to_gnu_entity) <object>: Force constants
initialized to a static constant to be statically allocated even if
they are of a padding type, provided the original type also has
constant size.
Jerry DeLisle [Sat, 15 Nov 2008 05:03:56 +0000 (05:03 +0000)]
re PR fortran/37988 (Edit descriptor checking (compile time) for "<Holerith>T)")
2008-11-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/37988
* io.c (enum format_token): For readability replace FMT_POS with FMT_T,
FMT_TL, and FMT_TR. (format_lex): Use new enumerators. (check_format):
Add check for missing positive integer.
Paul Thomas [Fri, 14 Nov 2008 18:03:05 +0000 (18:03 +0000)]
re PR fortran/38033 (Bounds of a pointer/allocatable array not stabilized)
2008-10-14 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38033
* trans-array.c (gfc_trans_create_temp_array): Stabilize the
'to' expression.
(gfc_conv_loop_setup): Use the end expression for the loop 'to'
if it is available.
2008-10-14 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38033
* gfortran.dg/array_section_2.f90: New test.
* ira-build.c (ira_create_allocno): Initialize
ALLOCNO_BAD_SPILL_P.
(create_cap_allocno, propagate_allocno_info,
remove_unnecessary_allocnos): Set up or update
ALLOCNO_BAD_SPILL_P.
(update_bad_spill_attribute): New function.
(ira_build): Call it.
* ira-costs.c (record_reg_classes): Set up ALLOCNO_BAD_SPILL_P.