Jonathan Wakely [Sun, 4 Jan 2009 13:38:11 +0000 (13:38 +0000)]
extend.texi (Function Attributes): Move @cindex after @item for 'artifical' and 'flatten'.
* doc/extend.texi (Function Attributes): Move @cindex after @item
for 'artifical' and 'flatten'. Fix grammar for 'externally_visible'
and put in alphabetical order. Fix 'target' name and put in order.
* doc/invoke.texi (-Wstrict-null-sentinel, -fipa-matrix-reorg): Fix
typos.
Mikael Morin [Sun, 4 Jan 2009 13:01:12 +0000 (14:01 +0100)]
re PR fortran/38536 (ICE with C_LOC in resolve.c due to not properly going through expr->ref)
2009-01-04 Mikael Morin <mikael.morin@tele2.fr>
PR fortran/38536
* gfortran.h (gfc_is_data_pointer): Added prototype
* resolve.c (gfc_iso_c_func_interface):
Use gfc_is_data_pointer to test for pointer attribute.
* dependency.c (gfc_is_data_pointer):
Support pointer-returning functions.
2009-01-04 Mikael Morin <mikael.morin@tele2.fr>
PR fortran/38536
* gfortran.dg/c_loc_tests_13.f90: New test.
* gfortran.dg/c_loc_tests_14.f90: New test.
Uros Bizjak [Sun, 4 Jan 2009 11:45:50 +0000 (12:45 +0100)]
s390.md (UNSPEC_MB): Rename from UNSPECV_MB.
* config/s390/s390.md (UNSPEC_MB): Rename from UNSPECV_MB.
(memory_barrier): Expand as unspec instead of unspec_volatile.
Remove mem:BLK from insn operands. Use Pmode scratch register.
(*memory_barrier): Define as unspec instead of unspec_volatile.
Use (match_dup 0) as input operand.
* config/sparc/sparc.md (UNSPEC_MEMBAR): Rename from UNSPECV_MEMBAR.
* config/sparc/sync.md (memory_barrier): Expand as unspec instead of
unspec_volatile. Remove mem:BLK from insn operands. Use Pmode
scratch register. Remove operand 1.
(*stbar): Define as unspec instead of unspec_volatile.
Use (match_dup 0) as input operand, remove (const_int 8).
(*membar): Define as unspec instead of unspec_volatile.
Use (match_dup 0) as input operand, remove input operand 2.
* config/xtensa/xtensa.md (UNSPEC_MEMW): Rename from UNSPECV_MEMW.
(memory_barrier): Expand as unspec instead of unspec_volatile.
Remove mem:BLK from insn operands. Use Pmode scratch register.
(*memory_barrier): Define as unspec instead of unspec_volatile.
Use (match_dup 0) as input operand.
* config/ia64/sync.md (memory_barrier): Redefine as expander pattern.
Remove mem:BLK from insn operands. Use Pmode scratch register.
Set volatile flag on operand 0.
(*memory_barrier): New insn pattern.
* config/rs6000/sync.md (memory_barrier): Remove mem:BLK from
insn operands.
(*memory_barrier): Use (match_dup 0) as input operand.
* config/mips/sync.md (memory_barrier): Redefine as expander pattern.
Remove mem:BLK from insn operands. Use Pmode scratch register.
Set volatile flag on operand 0.
(*memory_barrier): New insn pattern.
* config/alpha/sync.md (*memory_barrier): Rename from *mb_internal.
Steven Bosscher [Sun, 4 Jan 2009 00:15:58 +0000 (00:15 +0000)]
re PR middle-end/38586 (quadratic behaviour in find_temp_slot_from_address.)
PR middle-end/38586
* function.c (struct temp_slot): Move to the section of the file
that deals with temp slots. Remove field 'address'.
(temp_slot_address_table): New hash table of address -> temp slot.
(struct temp_slot_address_entry): New struct, items for the table.
(temp_slot_address_compute_hash, temp_slot_address_hash,
temp_slot_address_eq, insert_temp_slot_address): Support functions
for the new table.
(find_temp_slot_from_address): Rewrite to use the new hash table.
(remove_unused_temp_slot_addresses): Remove addresses of temp
slots that have been made available.
(remove_unused_temp_slot_addresses_1): Call-back for htab_traverse,
worker function for remove_unused_temp_slot_addresses.
(assign_stack_temp_for_type): Don't clear the temp slot address list.
Add the temp slot address to the address -> temp slot map.
(update_temp_slot_address): Update via insert_temp_slot_address.
(free_temp_slots): Call remove_unused_temp_slot_addresses.
(pop_temp_slots): Likewise.
(init_temp_slots): Allocate the address -> temp slot map, or empty
the map if it is already allocated.
(prepare_function_start): Initialize temp slot processing.
Steven Bosscher [Sun, 4 Jan 2009 00:15:08 +0000 (00:15 +0000)]
re PR middle-end/38584 (Inline heuristics run even at -O0)
PR middle-end/38584
* cfgexpand.c (estimate_stack_frame_size): Simplify the estimate:
Calculate the size of all stack vars assuming no packing of stack
vars will happen, replacing a quadratic algorithm with a linear one.
Paul Thomas [Sat, 3 Jan 2009 17:47:20 +0000 (17:47 +0000)]
re PR fortran/38594 (module function name mangled improperly if contained function of same name exists)
2009-01-03 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38594
* resolve.c (resolve_call): When searching for proper host
association, use symtree rather than symbol. For everything
except generic subroutines, substitute the symtree in the call
rather than the symbol.
2009-01-03 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38594
* gfortran.dg/host_assoc_call_3.f90: Make sure that the generic
interface still works, in addition to original tests.
* gfortran.dg/host_assoc_call_6.f90: New test.
Jakub Jelinek [Sat, 3 Jan 2009 00:54:40 +0000 (01:54 +0100)]
re PR c++/38705 (ICE: canonical types differ for identical types const int and const AlpsNodeIndex_t)
PR c++/38705
* builtins.c (fold_builtin_memory_op): Give up if either operand
is volatile. Set srctype or desttype to non-qualified version
of the other type.
PR rtl-optimization/35805
* df-problems.c (df_lr_finalize): Add recursive call to resolve lr
problem if fast dce is able to remove any instructions.
* dce.c (dce_process_block): Fix dump message.
Jakub Jelinek [Fri, 2 Jan 2009 14:38:05 +0000 (15:38 +0100)]
re PR middle-end/38690 (Missing parentheses for (a-1)/2 in final_cleanup)
PR middle-end/38690
* tree-flow.h (op_code_prio, op_prio): New prototypes.
* tree-pretty-print.c (op_code_prio): New function.
(op_prio): No longer static. Use op_code_prio.
* gimple-pretty-print.c (dump_unary_rhs, dump_binary_rhs):
Use op_prio and op_code_prio to determine if () should be
printed around operand(s) or not.
* gimple-pretty-print.c (dump_unary_rhs, dump_binary_rhs,
dump_gimple_call, dump_gimple_switch, dump_gimple_cond,
dump_gimple_label, dump_gimple_try, dump_symbols, dump_gimple_phi,
dump_gimple_mem_ops, dump_bb_header, dump_bb_end, pp_cfg_jump): Use
pp_character instead of pp_string for single letter printing.
Jakub Jelinek [Tue, 30 Dec 2008 23:34:28 +0000 (00:34 +0100)]
re PR middle-end/38505 (Revision 142061 caused ICE on __builtin_memcpy)
PR middle-end/38505
* tree-ssa-ccp.c (may_propagate_address_into_dereference): Return
false if ADDR's operand has incomplete type.
Revert:
2008-12-15 Jakub Jelinek <jakub@redhat.com>
PR middle-end/38505
* tree-ssa.c (useless_type_conversion_p_1): Return
false if inner_type is incomplete and outer_type is complete.
Richard Guenther [Tue, 30 Dec 2008 21:20:08 +0000 (21:20 +0000)]
re PR tree-optimization/38645 (ICE with volatile)
2008-12-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/38645
* tree-ssa-ccp.c (fold_gimple_assign): Use the correct pointer
type.
* tree-ssa-dom.c (cprop_operand): Simplify. Do not propagate
volatileness changing operands.
Dorit Nuzman [Tue, 30 Dec 2008 06:58:57 +0000 (06:58 +0000)]
re PR tree-optimization/38529 (ICE with nested loops)
PR tree-optimization/38529
* tree-vect-transform (vect_transform_stmt): Handle inner-loop stmts
whose DEF is used in the loop-nest that is being vectorized, but
outside the immediately enclosing loop.
Co-Authored-By: Ira Rosen <irar@il.ibm.com>
From-SVN: r142959
re PR fortran/31832 (FAIL: gfortran.dg/integer_exponentiation_2.f90 at -O1 and above)
PR fortran/31832
* acinclude.m4 (LIBGFOR_CHECK_FOR_BROKEN_POWF): New autoconf check for
broken powf.
* configure.ac (LIBGFOR_CHECK_FOR_BROKEN_POWF): Use it.
* intrinsics/c99_functions.c: Use internal powf implementation if
HAVE_BROKEN_POWF is defined.
* configure: Rebuilt.
* config.h.in: Rebuilt.
Jakub Jelinek [Mon, 29 Dec 2008 18:25:19 +0000 (19:25 +0100)]
re PR middle-end/36191 (can't use complex in a eh region if non-call-exceptions is enabled)
PR c++/36191
* tree-complex.c (expand_complex_libcall): Call
maybe_clean_or_replace_eh_stmt and gimple_purge_dead_eh_edges
instead of passing true as 3rd argument to gsi_replace.
* gcc.c-torture/execute/builtins/fprintf.x: Disable test for
freestanding targets.
* gcc.c-torture/execute/pr37573.x: Disable test for 16-bit targets.
* gcc.c-torture/execute/20081117-1.x: Disable test for 16-bit targets.
* gcc.c-torture/compile/limits-stringlit.c: Disable test for picochip.
* gcc.dg/array-quals-1.c: Disable test for picochip.
* lib/target-supports.exp: Add support for freestanding ports and
disable picochip for profiling tests.
Jakub Jelinek [Mon, 29 Dec 2008 08:32:21 +0000 (09:32 +0100)]
re PR driver/38381 (-b option seems to be broken)
PR driver/38381
* gcc.c (process_command): Accept also -b with configuration name
in the next argument.
* doc/invoke.texi (-b): Document that no hyphen is required if
configuration name is in the next argument after -b.
Jakub Jelinek [Mon, 22 Dec 2008 23:41:17 +0000 (00:41 +0100)]
re PR middle-end/31150 (Not promoting an whole array to be static const)
PR middle-end/31150
* dse.c (struct store_info): Add const_rhs field.
(clear_rhs_from_active_local_stores): Clear also const_rhs.
(record_store): Try also cselib_expand_value_rtx to get a constant.
(find_shift_sequence, get_stored_val): Use const_rhs instead of
rhs if worthwhile.
* cselib.c (cselib_record_sets): If !cselib_record_memory and
there is just one set from read-only MEM, look at REG_EQUAL or
REG_EQUIV note.
* dse.c (struct store_info): Add redundant_reason field.
(record_store): When storing the same constant as has been
stored by an earlier store, set redundant_reason field
to the earlier store's insn_info_t. Don't delete cannot_delete
insns.
(find_shift_sequence): Remove read_info argument, add read_mode
and require_cst arguments. Return early if require_cst and
constant wouldn't be returned.
(get_stored_val): New function.
(replace_read): Use it.
(scan_insn): Put even cannot_delete insns with exactly 1 store
into active_local_stores.
(dse_step1): Don't delete cannot_delete insns. Remove redundant
constant stores if contains_cselib_groups and earlier store storing
the same value hasn't been eliminated.
(dse_step6): Renamed to dse_step7. New function.
(dse_step7): Renamed from dse_step6.
(rest_of_handle_dse): Call dse_step6 and dse_step7 at the end.
* cselib.c (cselib_expand_value_rtx): Don't wrap CONST_INTs
into CONST unless really necessary. Handle SUBREG, unary,
ternary, bitfield and compares specially, to be able to simplify
operations on constants.
(expand_loc): Try to optimize LO_SUM.
* dse.c (get_call_args): New function.
(scan_insn): Don't handle BUILT_IN_BZERO. For memset, attempt
to get call arguments and if successful and both len and val are
constants, handle the call as (mem:BLK) (const_int) store.
* dse.c (struct store_info): Add is_large bool field, change
positions_needed into a union of a bitmask and bitmap + count.
(free_store_info): Free bitmap if is_large.
(set_usage_bits): Don't look at stores where
offset + width >= MAX_OFFSET.
(set_position_unneeded, set_all_positions_unneeded,
any_positions_needed_p, all_positions_needed_p): New static inline
functions.
(record_store): Handle BLKmode stores of CONST_INT, if
MEM_SIZE is set on the MEM. Use the new positions_needed
accessor inlines.
(replace_read): Handle reads from BLKmode CONST_INT stores.
(check_mem_read_rtx): Use all_positions_needed_p function.
(dse_step1): Free large positions_needed bitmaps and clear is_large.
* dse.c (struct store_info): Change begin and end types to
HOST_WIDE_INT.
* dse.c (record_store): Fix check for unused store.
* expr.c (block_clear_fn): No longer static.
* expr.h (block_clear_fn): Declare.
* dse.c (scan_insn): Memset and bzero can just read their
arguments.
Jakub Jelinek [Mon, 22 Dec 2008 23:34:07 +0000 (00:34 +0100)]
re PR target/38488 (x86_64 generates much larger and slightly slower code for memset)
* config/i386/i386.c (expand_setmem_via_rep_stos): Add ORIG_VALUE
argument. If ORIG_VALUE is const0_rtx and COUNT is constant,
set MEM_SIZE on DESTMEM.
(ix86_expand_setmem): Adjust callers.
PR target/38488
* expr.h (get_mem_align_offset): New prototype.
* emit-rtl.c (get_mem_align_offset): New function.
* config/i386/i386.c (expand_movmem_via_rep_mov): Set MEM_SIZE correctly.
(expand_constant_movmem_prologue, expand_constant_setmem_prologue):
New functions.
(ix86_expand_movmem): Optimize if COUNT_EXP
is constant, desired_align > align and dst & (desired_align - 1)
is computable at compile time.
(ix86_expand_setmem): Likewise.
* builtins.c (get_memory_rtx): Try to derive MEM_ATTRS from not yet
resolved SAVE_EXPR or POINTER_PLUS_EXPR.
* gcc.target/mips/atomic-memory-2.c: Use dg-options instead of
dg-mips-options. Use isa>=2 instead of -mips32.
* gcc.target/mips/branch-cost-1.c: Use dg-options instead of
dg-mips-options. Use isa>=4 instead of -mips64.
* gcc.target/mips/branch-cost-2.c: Likewise.
* gcc.target/mips/cache-1.c: Use dg-options instead of
dg-mips-options. Add isa>=3 and NOMIPS16 attributes.
* gcc.target/mips/call-saved-1.c: Use dg-options instead of
dg-mips-options. Replace the mips16_attribute directives with
a (-mips16) dg-option. Use isa_rev=0 instead of -mips2.
* gcc.target/mips/call-saved-2.c: Likewise.
* gcc.target/mips/call-saved-3.c: Likewise.
* gcc.target/mips/clear-cache-1.c: Use dg-options instead of
dg-mips-options. Use isa_rev>=2 instead of -mips32r2.
* gcc.target/mips/ext_ins.c: Likewise.
* gcc.target/mips/code-readable-1.c: Use dg-options instead of
dg-mips-options. Replace the mips16_attribute directives with
a (-mips16) dg-option. Use addressing=absolute too.
* gcc.target/mips/code-readable-2.c: Likewise.
* gcc.target/mips/code-readable-3.c: Likewise.
* gcc.target/mips/dmult-1.c: Use dg-options instead of
dg-mips-options. Remove the mips16_attribute directives.
* gcc.target/mips/gcc-have-sync-compare-and-swap-4.c: Likewise.
* gcc.target/mips/dpaq_sa_l_w.c: Use dg-options instead of
dg-mips-options. Remove target restrictions from dg-do.
Use -mgp32 instead of -mips32r2.
* gcc.target/mips/dpsq_sa_l_w.c: Likewise.
* gcc.target/mips/dsp-ctrl.c: Use dg-options instead of
dg-mips-options. Remove target restrictions from dg-do.
Remove the !__mips_dsp code and add -mdsp -mgp32 to dg-options
instead. Add NOMIPS16 attributes.
* gcc.target/mips/dspr2-MULT.c: Use dg-options instead of
dg-mips-options. Replace -march=mips32r2 with -mgp32.
* gcc.target/mips/dspr2-MULTU.c: Likewise.
* gcc.target/mips/ext-1.c: Use dg-options instead of
dg-mips-options. Use isa_rev>=2 instead of -mips64r2.
* gcc.target/mips/fixed-scalar-type.c: Use dg-options instead
of dg-mips-options. Remove target restrictions from dg-do.
Remove -march=mips32r2.
* gcc.target/mips/fixed-vector-type.c: Likewise.
* gcc.target/mips/mips32-dsp-run.c: Likewise.
* gcc.target/mips/mips32-dspr2.c: Likewise. Add NOMIPS16 attributes.
* gcc.target/mips/fpr-moves-7.c: Use dg-options instead of
dg-mips-options. Replace the mips16_attribute directives with
a (-mips16) dg-option. Remove -msoft-float.
* gcc.target/mips/fpr-moves-8.c: Likewise.
* gcc.target/mips/int-moves-1.c: Likewise.
* gcc.target/mips/int-moves-2.c: Likewise.
* gcc.target/mips/gcc-have-sync-compare-and-swap-1.c: Use dg-options
instead of dg-mips-options. Use isa>=2 instead of -mips2.
Add -mgp32.
* gcc.target/mips/gcc-have-sync-compare-and-swap-3.c: Likewise.
* gcc.target/mips/ins-1.c: Use dg-options instead of
dg-mips-options. Use "isa_rev>=2 -mgp32" instead of -march=mips32r2.
* gcc.target/mips/loongson-muldiv-1.c: Use dg-options instead of
dg-mips-options. Use isa=loongson instead of -march=loongson2e.
* gcc.target/mips/loongson-muldiv-2.c: Likewise.
* gcc.target/mips/loongson-simd.c: Remove mips_loongson
target requirement and use isa=loongson instead. Add -mhard-float,
-mno-mips16 and -flax-vector-conversions.
* gcc.target/mips/lazy-binding-1.c: Use dg-options instead of
dg-mips-options. Remove target restrictions from dg-do.
Add NOMIPS16 attributes.
* gcc.target/mips/long-calls-pg.c: Use dg-options instead of
dg-mips-options. Remove -march=mips32 and -fno-pic.
Add NOMIPS16 attributes.
* gcc.target/mips/madd-3.c: Use dg-options instead of
dg-mips-options. Use isa_rev>=1 instead of -mips32.
* gcc.target/mips/maddu-3.c: Likewise.
* gcc.target/mips/msub-3.c: Likewise.
* gcc.target/mips/msubu-3.c: Likewise.
* gcc.target/mips/madd-4.c: Use dg-options instead of
dg-mips-options. Remove -mips32r2.
* gcc.target/mips/maddu-4.c: Likewise.
* gcc.target/mips/msub-4.c: Likewise.
* gcc.target/mips/msubu-4.c: Likewise.
* gcc.target/mips/mips-ps-5.c: Use dg-options instead of
dg-mips-options. Remove -mips64.
* gcc.target/mips/mips-ps-type.c: Likewise.
* gcc.target/mips/mips-ps-7.c: Use dg-options instead of
dg-mips-options. Replace -mips32r2 with -mgp32.
* gcc.target/mips/mips-ps-type-2.c: Use dg-options instead of
dg-mips-options. Use "isa_rev>=2 -mgp32" instead of -mips32r2.
* gcc.target/mips/mips16-attributes.c: Use dg-options instead of
dg-mips-options. Replace the mips16_attribute directives with
a (-mips16) dg-option.
* gcc.target/mips/mips16-attributes-2.c: Likewise.
* gcc.target/mips/r10k-cache-barrier-14.c: Likewise.
* gcc.target/mips/scc-3.c: Likewise.
* gcc.target/mips/mips16e-extends.c: Use dg-options instead of
dg-mips-options. Replace the mips16_attribute directives with
a (-mips16) dg-option. Use isa_rev>=1 instead of -march=mips32.
Add -mlong32.
* gcc.target/mips/mips32-dsp.c: Use dg-options instead of
dg-mips-options. Replace -march=mips32 with -mgp32.
* gcc.target/mips/mips32-dsp-type.c: Use dg-options instead of
dg-mips-options. Remove -march=mips32.
* gcc.target/mips/mips32-dspr2-type.c: Use dg-options instead of
dg-mips-options. Remove -march=mips32r2.
* gcc.target/mips/mips32r2-mxhc1.c: Use dg-options instead of
dg-mips-options. Add NOMIPS16 attributes.
* gcc.target/mips/movcc-1.c: Use dg-options instead of
dg-mips-options. Use isa>=4 instead of -mips4.
* gcc.target/mips/movcc-2.c: Likewise.
* gcc.target/mips/movcc-3.c: Likewise.
* gcc.target/mips/octeon-bbit-1.c: Use dg-options instead of
dg-mips-options. Declare foo as a NOMIPS16 function.
Use foo instead of g.
* gcc.target/mips/near-far-1.c: Use dg-options instead of
dg-mips-options. Replace the nonpic directives with an
addressing=absolute option.
* gcc.target/mips/near-far-2.c: Likewise.
* gcc.target/mips/near-far-3.c: Likewise.
* gcc.target/mips/near-far-4.c: Likewise.
* gcc.target/mips/nmadd-1.c: Use dg-options instead of
dg-mips-options. Use isa=4 instead of -mips4.
* gcc.target/mips/nmadd-2.c: Likewise.
* gcc.target/mips/nmadd-3.c: Likewise.
* gcc.target/mips/rsqrt-1.c: Likewise.
* gcc.target/mips/rsqrt-2.c: Likewise.
* gcc.target/mips/rsqrt-3.c: Likewise.
* gcc.target/mips/save-restore-1.c: Use dg-options instead of
dg-mips-options. Replace the mips16_attribute directives with
a (-mips16) dg-option. Use isa_rev>=1 instead of -mips32r2.
* gcc.target/mips/save-restore-2.c: Likewise.
* gcc.target/mips/save-restore-3.c: Likewise.
* gcc.target/mips/save-restore-4.c: Likewise.
* gcc.target/mips/save-restore-5.c: Likewise.
* gcc.target/mips/scc-1.c: Use dg-options instead of
dg-mips-options. Replace the mips16_attribute directives with
a (-mips16) dg-option. Use isa_rev>=1 instead of -mips32.
* gcc.target/mips/timode-2.c: Remove target restrictions from dg-do.
Use -mgp64.
mips-dsp.md (mips_lbux): Turn into a define_expand, changing operand 1 to a pmode_register_operand.
gcc/
* config/mips/mips-dsp.md (mips_lbux): Turn into a define_expand,
changing operand 1 to a pmode_register_operand.
(mips_lhx, mips_lwx): Likewise.
(mips_lbux_<mode>, mips_lhx_<mode>, mips_lwx_<mode>): New patterns.
* config/mips/mips.c (mips_prepare_builtin_arg): Get the mode of
the value from the argument expression.
Jerry DeLisle [Sun, 21 Dec 2008 21:23:52 +0000 (21:23 +0000)]
re PR fortran/38398 (g0.w edit descriptor: Update for F2008 Tokyo meeting changes)
2008-12-21 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/38398
* io/io.h (st_parameter_dt): Add new bit to keep track of when to
suppress blanks for g0 formatting.
* io/transfer.c (formatted_transfer_scalar): Always call write_real_g0
for g0 formatting.
* io.c (write.c): Do not use ES formatting and use new bit to suppress
blanks.
* io/write_float.def (output_float): Adjust the location of setting the
width so that it can be adjusted when suppressing blanks. Set number of
blanks to zero when dtp->u.p.g0_no_blanks is set. Do some minor code
clean-up and add some white space for readability.