* cgraphunit.c (ipa_passes, compile): Reshedule
symtab_remove_unreachable_nodes passes; update comments.
* ipa-inline.c (pass_data_ipa_inline): Do not schedule
TODO_remove_functions before the pass; the functions ought to be
already removed.
* ipa.c (pass_data_ipa_free_inline_summary): Enable dump; schedule
TODO_remove_functions.
* passes.c (pass_data_early_local_passes): Do not schedule function
removal.
(execute_one_pass): Fix call of symtab_remove_unreachable_nodes.
* lto.c (read_cgraph_and_symbols): Fix symtab_remove_unreachable_nodes
call.
(do_whole_program_analysis): Only sanity check that IPA passes cleans up.
Kyrylo Tkachov [Wed, 20 Aug 2014 09:28:25 +0000 (09:28 +0000)]
[testsuite] Mark tests unsupported when relocation truncation occurs on tiny memory targets
* lib/gcc-defs.exp (${tool}_check_unsupported_p):
Return memory full when we have a tiny target and relocation
truncation occurs.
* lib/gcc-dg.exp (gcc-dg-prune): Likewise.
* lib/objc.exp (${tool}_check_unsupported_p): Likewise.
* lib/target-supports.exp (check_effective_target_tiny): New function.
David Malcolm [Tue, 19 Aug 2014 21:22:25 +0000 (21:22 +0000)]
Return types of unlink_insn_chain and duplicate_insn_chain
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* rtl.h (unlink_insn_chain): Strengthen return type from rtx to
rtx_insn *.
(duplicate_insn_chain): Likewise.
* cfgrtl.c (unlink_insn_chain): Strengthen return type from rtx to
rtx_insn *, also for locals "prevfirst" and "nextlast". Add a
checked cast for now (until we can strengthen the params in the
same way).
(duplicate_insn_chain): Likewise.
David Malcolm [Tue, 19 Aug 2014 20:51:09 +0000 (20:51 +0000)]
emit_move et al return rtx_insn *
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* expr.h (emit_move_insn): Strengthen return type from rtx to
rtx_insn *.
(emit_move_insn_1): Likewise.
(emit_move_complex_push): Likewise.
(emit_move_complex_parts): Likewise.
* expr.c (emit_move_via_integer): Strengthen return type from rtx
to rtx_insn *. Replace use of NULL_RTX with NULL when working
with insns.
(emit_move_complex_push): Strengthen return type from rtx to
rtx_insn *.
(emit_move_complex): Likewise, also for local "ret".
(emit_move_ccmode): Likewise.
(emit_move_multi_word): Likewise for return type and locals
"last_insn", "seq".
(emit_move_insn_1): Likewise for return type and locals "result",
"ret".
(emit_move_insn): Likewise for return type and local "last_insn".
(compress_float_constant): Likewise.
(emit_barrier_before): Strengthen return type from rtx to
rtx_barrier *.
(emit_barrier_after): Likewise.
(emit_barrier): Likewise.
* emit-rtl.c (emit_pattern_before_noloc): Strengthen return type
from rtx to rtx_insn *. Add checked casts for now when converting
"last" from rtx to rtx_insn *.
(emit_insn_before_noloc): Likewise for return type.
(emit_jump_insn_before_noloc): Likewise.
(emit_call_insn_before_noloc): Likewise.
(emit_debug_insn_before_noloc): Likewise.
(emit_barrier_before): Strengthen return type and local "insn"
from rtx to rtx_barrier *.
(emit_label_before): Strengthen return type from rtx to
rtx_insn *. Add checked cast for now when returning param
(emit_pattern_after_noloc): Strengthen return type from rtx to
rtx_insn *. Add checked casts for now when converting "last" from
rtx to rtx_insn *.
(emit_insn_after_noloc): Strengthen return type from rtx to
rtx_insn *.
(emit_jump_insn_after_noloc): Likewise.
(emit_call_insn_after_noloc): Likewise.
(emit_debug_insn_after_noloc): Likewise.
(emit_barrier_after): Strengthen return type from rtx to
rtx_barrier *.
(emit_label_after): Strengthen return type from rtx to rtx_insn *.
Add checked cast for now when converting "label" from rtx to
rtx_insn *.
(emit_pattern_after_setloc): Strengthen return type from rtx to
rtx_insn *. Add checked casts for now when converting "last" from
rtx to rtx_insn *.
(emit_pattern_after): Strengthen return type from rtx to
rtx_insn *.
(emit_insn_after_setloc): Likewise.
(emit_insn_after): Likewise.
(emit_jump_insn_after_setloc): Likewise.
(emit_jump_insn_after): Likewise.
(emit_call_insn_after_setloc): Likewise.
(emit_call_insn_after): Likewise.
(emit_debug_insn_after_setloc): Likewise.
(emit_debug_insn_after): Likewise.
(emit_pattern_before_setloc): Likewise. Add checked casts for now
when converting "last" from rtx to rtx_insn *.
(emit_pattern_before): Strengthen return type from rtx to
rtx_insn *.
(emit_insn_before_setloc): Likewise.
(emit_insn_before): Likewise.
(emit_jump_insn_before_setloc): Likewise.
(emit_jump_insn_before): Likewise.
(emit_call_insn_before_setloc): Likewise.
(emit_call_insn_before): Likewise.
(emit_debug_insn_before_setloc): Likewise.
(emit_debug_insn_before): Likewise.
(emit_insn): Strengthen return type and locals "last", "insn",
"next" from rtx to rtx_insn *. Add checked cast to rtx_insn
within cases where we know we have an insn.
(emit_debug_insn): Likewise.
(emit_jump_insn): Likewise.
(emit_call_insn): Strengthen return type and local "insn" from rtx
to rtx_insn *.
(emit_label): Strengthen return type from rtx to rtx_insn *. Add
a checked cast to rtx_insn * for now on "label".
(emit_barrier): Strengthen return type from rtx to rtx_barrier *.
(emit_clobber): Strengthen return type from rtx to rtx_insn *.
(emit_use): Likewise.
(gen_use): Likewise, also for local "seq".
(emit): Likewise for return type and local "insn".
(rtx_insn): Likewise for return type and local "new_rtx".
* cfgrtl.c (emit_barrier_after_bb): Strengthen local "barrier"
from rtx to rtx_barrier *.
* config/sh/sh.c (output_stack_adjust): Since emit_insn has
changed return type from rtx to rtx_insn *, we must update
"emit_fn" type, and this in turn means updating...
(frame_insn): ...this. Strengthen return type from rtx to
rtx_insn *. Introduce a new local "insn" of the appropriate type.
David Malcolm [Tue, 19 Aug 2014 20:22:09 +0000 (20:22 +0000)]
emit_jump_table_data returns an rtx_jump_table_data *
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* emit-rtl.c (emit_jump_table_data): Strengthen return type from
rtx to rtx_jump_table_data *. Also for local.
* rtl.h (emit_jump_table_data): Likewise.
David Malcolm [Tue, 19 Aug 2014 20:08:20 +0000 (20:08 +0000)]
Convert various rtx to rtx_note *
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* basic-block.h (create_basic_block_structure): Strengthen third
param "bb_note" from rtx to rtx_note *.
* rtl.h (emit_note_before): Strengthen return type from rtx to
rtx_note *.
(emit_note_after): Likewise.
(emit_note): Likewise.
(emit_note_copy): Likewise. Also, strengthen param similarly.
* function.h (struct rtl_data): Strengthen field
"x_stack_check_probe_note" from rtx to rtx_note *.
* cfgexpand.c (expand_gimple_basic_block): Strengthen local "note"
from rtx to rtx_note *.
* cfgrtl.c (create_basic_block_structure): Strengthen third param
"bb_note" from rtx to rtx_note *.
(duplicate_insn_chain): Likewise for local "last". Add a checked cast
when calling emit_note_copy.
* emit-rtl.c (make_note_raw): Strengthen return type from rtx to
rtx_note *.
(emit_note_after): Likewise.
(emit_note_before): Likewise.
(emit_note_copy): Likewise. Also, strengthen param similarly.
(emit_note): Likewise.
* except.c (emit_note_eh_region_end): Likewise for return type.
Strengthen local "next" from rtx to rtx_insn *.
(convert_to_eh_region_ranges): Strengthen local "note"
from rtx to rtx_note *.
* final.c (change_scope): Likewise.
(reemit_insn_block_notes): Likewise, for both locals named "note".
Also, strengthen local "insn" from rtx to rtx_insn *.
* haifa-sched.c (sched_extend_bb): Strengthen local "note" from
rtx to rtx_note *.
* reg-stack.c (compensate_edge): Likewise for local "after". Also,
strengthen local "seq" from rtx to rtx_insn *.
* reload1.c (reload_as_needed): Strengthen local "marker" from rtx
to rtx_note *.
* sel-sched-ir.c (bb_note_pool): Strengthen from rtx_vec_t to
vec<rtx_note *>.
(get_bb_note_from_pool): Strengthen return type from rtx to
rtx_note *.
(sel_create_basic_block): Strengthen local "new_bb_note" from
insn_t to rtx_note *.
* var-tracking.c (emit_note_insn_var_location): Strengthen local
"note" from rtx to rtx_note *.
(emit_notes_in_bb): Likewise.
David Malcolm [Tue, 19 Aug 2014 19:57:18 +0000 (19:57 +0000)]
rtl_data.x_parm_birth_insn is an insn
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* function.h (struct rtl_data): Strengthen field
"x_parm_birth_insn" from rtx to rtx_insn *.
* function.c (struct assign_parm_data_all): Strengthen fields
"first_conversion_insn" and "last_conversion_insn" from rtx to
rtx_insn *.
David Malcolm [Tue, 19 Aug 2014 19:52:55 +0000 (19:52 +0000)]
cfgexpand.c: Use rtx_insn
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* cfgexpand.c (expand_used_vars): Strengthen return type from rtx
to rtx_insn *; also for local "var_end_seq".
(maybe_dump_rtl_for_gimple_stmt): Likewise for param "since".
(maybe_cleanup_end_of_block): Likewise for param "last" and local
"insn".
(expand_gimple_cond): Likewise for locals "last2" and "last".
(mark_transaction_restart_calls): Likewise for local "insn".
(expand_gimple_stmt): Likewise for return type and locals "last"
and "insn".
(expand_gimple_tailcall): Likewise for locals "last2" and "last".
(avoid_complex_debug_insns): Likewise for param "insn".
(expand_debug_locations): Likewise for locals "insn", "last",
"prev_insn" and "insn2".
(expand_gimple_basic_block): Likewise for local "last".
(construct_exit_block): Likewise for locals "head", "end",
"orig_end".
(pass_expand::execute): Likewise for locals "var_seq",
"var_ret_seq", "next".
David Malcolm [Tue, 19 Aug 2014 19:48:08 +0000 (19:48 +0000)]
asan_emit_stack_protection returns an insn
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* asan.h (asan_emit_stack_protection): Strengthen return type from
rtx to rtx_insn *.
* asan.c (asan_emit_stack_protection): Likewise. Add local
"insns" to hold the return value.
David Malcolm [Tue, 19 Aug 2014 19:38:12 +0000 (19:38 +0000)]
make_insn_raw returns an rtx_insn
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* rtl.h (make_insn_raw): Strengthen return type from rtx to
rtx_insn *.
* emit-rtl.c (make_insn_raw): Strengthen return type and local
"insn" from rtx to rtx_insn *.
(make_debug_insn_raw): Strengthen return type from rtx to
rtx_insn *; strengthen local "insn" from rtx to rtx_debug_insn *.
(make_jump_insn_raw): Strengthen return type from rtx to
rtx_insn *; strengthen local "insn" from rtx to rtx_jump_insn *.
(make_call_insn_raw): Strengthen return type from rtx to
rtx_insn *; strengthen local "insn" from rtx to rtx_call_insn *.
(emit_pattern_before_noloc): Strengthen return type of "make_raw"
callback from rtx to rtx_insn *; likewise for local "insn" and
"next", adding a checked cast to rtx_insn in the relevant cases of
the switch statement.
(emit_pattern_after_noloc): Strengthen return type of "make_raw"
callback from rtx to rtx_insn *.
(emit_pattern_after_setloc): Likewise.
(emit_pattern_after): Likewise.
(emit_pattern_before_setloc): Likewise.
(emit_pattern_before): Likewise.
David Malcolm [Tue, 19 Aug 2014 19:33:21 +0000 (19:33 +0000)]
last_call_insn returns an rtx_call_insn *
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* emit-rtl.c (last_call_insn): Strengthen return type from rtx to
rtx_call_insn *.
* rtl.h (is_a_helper <rtx_call_insn *>::test): New overload,
accepting an rtx_insn *.
(last_call_insn): Strengthen return type from rtx to
rtx_call_insn *.
David Malcolm [Tue, 19 Aug 2014 19:27:29 +0000 (19:27 +0000)]
delete_trivially_dead_insns works on insns
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* rtl.h (delete_trivially_dead_insns): Strengthen initial param
"insns" from rtx to rtx_insn *.
* cse.c (delete_trivially_dead_insns): Likewise, also do it for
locals "insn" and "prev".
David Malcolm [Tue, 19 Aug 2014 19:19:13 +0000 (19:19 +0000)]
Make tablejump_p accept a rtx_jump_table_data **
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* rtl.h (tablejump_p): Strengthen third param from rtx * to
rtx_jump_table_data **.
* cfgbuild.c (make_edges): Introduce local "table", using it in
place of "tmp" for jump table data.
(find_bb_boundaries): Strengthen local "table" from rtx to
rtx_jump_table_data *.
* cfgcleanup.c (merge_blocks_move_successor_nojumps): Likewise.
(outgoing_edges_match): Likewise for locals "table1" and "table2".
(try_crossjump_to_edge): Likewise.
* cfgrtl.c (try_redirect_by_replacing_jump): Likewise for local
"table".
(patch_jump_insn): Introduce local "table", using it in place of
"tmp" for jump table data.
(force_nonfallthru_and_redirect): Introduce local "table", so that
call to tablejump_p can receive an rtx_jump_table_data **. Update
logic around the call to overwrite "note" appropriately if
tablejump_p returns non-zero.
(get_last_bb_insn): Introduce local "table", using it in place of
"tmp" for jump table data.
* dwarf2cfi.c (create_trace_edges): Likewise.
* config/arm/arm.c (get_jump_table_size): Strengthen param "insn"
from rtx to rtx_jump_table_data *.
(create_fix_barrier): Strengthen local "tmp" from rtx to
rtx_jump_table_data *.
(arm_reorg): Likewise for local "table".
* jump.c (delete_related_insns): Strengthen local "lab_next" from
rtx to rtx_jump_table_data *.
* rtlanal.c (tablejump_p): Strengthen param "tablep" from rtx * to
rtx_jump_table_data **. Add a checked cast when writing through
the pointer: we know there that local "table" is non-NULL and that
JUMP_TABLE_DATA_P (table) holds.
(label_is_jump_target_p): Introduce local "table", using it in
place of "tmp" for jump table data.
Marek Polacek [Tue, 19 Aug 2014 18:50:00 +0000 (18:50 +0000)]
re PR c++/62153 (warn for bool expression compared with integer different from 0/1)
PR c++/62153
* doc/invoke.texi: Document -Wbool-compare.
c-family/
* c-common.c (maybe_warn_bool_compare): New function.
* c-common.h (maybe_warn_bool_compare): Declare.
* c.opt (Wbool-compare): New option.
c/
* c-typeck.c (build_binary_op): If either operand of a comparison
is a boolean expression, call maybe_warn_bool_compare.
cp/
* call.c (build_new_op_1): Remember the type of arguments for
a comparison. If either operand of a comparison is a boolean
expression, call maybe_warn_bool_compare.
testsuite/
* c-c++-common/Wbool-compare-1.c: New test.
* config/sh/sh-protos.h (sh_find_set_of_reg): Convert function ptr
param "stepfunc" so that it returns an rtx_insn * rather than an
rtx, to track the change to prev_nonnote_insn_bb, which is the
only function this is called with.
* config/sh/sh.c (sh_find_set_of_reg): Likewise.
* rtl.h (class rtx_debug_insn): New, a subclass of rtx_insn,
adding the invariant DEBUG_INSN_P (X).
(class rtx_nonjump_insn): New, a subclass of rtx_insn, adding
the invariant NONJUMP_INSN_P (X).
(class rtx_jump_insn): New, a subclass of rtx_insn, adding
the invariant JUMP_P (X).
(class rtx_call_insn): New, a subclass of rtx_insn, adding
the invariant CALL_P (X).
(class rtx_jump_table): New, a subclass of rtx_insn, adding the
invariant JUMP_TABLE_DATA_P (X).
(class rtx_barrier): New, a subclass of rtx_insn, adding the
invariant BARRIER_P (X).
(class rtx_code_label): New, a subclass of rtx_insn, adding
the invariant LABEL_P (X).
(class rtx_note): New, a subclass of rtx_insn, adding
the invariant NOTE_P(X).
(is_a_helper <rtx_debug_insn *>::test): New.
(is_a_helper <rtx_nonjump_insn *>::test): New.
(is_a_helper <rtx_jump_insn *>::test): New.
(is_a_helper <rtx_call_insn *>::test): New.
(is_a_helper <rtx_jump_table_data *>::test): New functions,
overloaded for both rtx and rtx_insn *.
(is_a_helper <rtx_barrier *>::test): New.
(is_a_helper <rtx_code_label *>::test): New functions, overloaded
for both rtx and rtx_insn *.
(is_a_helper <rtx_note *>::test): New.
Marek Polacek [Tue, 19 Aug 2014 16:45:07 +0000 (16:45 +0000)]
alpha.h (CLZ_DEFINED_VALUE_AT_ZERO, [...]): Return 0/1 rather than bool.
* config/alpha/alpha.h (CLZ_DEFINED_VALUE_AT_ZERO,
CTZ_DEFINED_VALUE_AT_ZERO): Return 0/1 rather than bool.
* config/i386/i386.h (CLZ_DEFINED_VALUE_AT_ZERO,
CTZ_DEFINED_VALUE_AT_ZERO): Return 0/1 rather than bool.
David Malcolm [Tue, 19 Aug 2014 16:39:52 +0000 (16:39 +0000)]
BND_TO scaffolding
gcc/
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* sel-sched-ir.h (BND_TO): insn_t will eventually be an
rtx_insn *. To help with transition, for now, convert from an
access macro into a pair of functions: BND_TO, returning an
rtx_insn *, and...
(SET_BND_TO): New function, for use where BND_TO is used as an
lvalue.
* sel-sched-ir.c (blist_add): Update lvalue usage of BND_TO to
SET_BND_TO.
(BND_TO): New function, adding a checked cast.
(SET_BND_TO): New function.
* sel-sched.c (move_cond_jump): Update lvalue usage of BND_TO to
SET_BND_TO.
(compute_av_set_on_boundaries): Likewise.
H.J. Lu [Tue, 19 Aug 2014 16:26:35 +0000 (16:26 +0000)]
Don't clear destination if it is used in source
* config/i386/i386.md (*ctz<mode>2_falsedep_1): Don't clear
destination if it is used in source.
(*clz<mode>2_lzcnt_falsedep_1): Likewise.
(*popcount<mode>2_falsedep_1): Likewise.
David Malcolm [Tue, 19 Aug 2014 16:00:59 +0000 (16:00 +0000)]
BB_NOTE_LIST scaffolding
gcc/
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* sel-sched-ir.h (BB_NOTE_LIST): struct sel_region_bb_info_def's
"note_list" field will eventually be an rtx_insn *. To help with
transition, for now, convert from an access macro into a pair of
functions: BB_NOTE_LIST, returning an rtx_insn *, and...
(SET_BB_NOTE_LIST): New function, for use where BB_NOTE_LIST is
used as an lvalue.
* sel-sched.c (create_block_for_bookkeeping): Update lvalue usage
of BB_NOTE_LIST to SET_BB_NOTE_LIST.
* sel-sched-ir.c (init_bb): Likewise.
(sel_restore_notes): Likewise.
(move_bb_info): Likewise.
(BB_NOTE_LIST): New function, adding a checked cast to rtx_insn *.
(SET_BB_NOTE_LIST): New function.
David Malcolm [Tue, 19 Aug 2014 15:42:24 +0000 (15:42 +0000)]
VINSN_INSN_RTX scaffolding
gcc/
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* sel-sched-ir.h (VINSN_INSN_RTX): struct vinsn_def's "insn_rtx"
field will eventually be an rtx_insn *. To help with transition,
for now, convert from an access macro into a pair of functions:
VINSN_INSN_RTX, returning an rtx_insn *, and...
(SET_VINSN_INSN_RTX): New function, for use where VINSN_INSN_RTX
is used as an lvalue.
* sel-sched-ir.c (vinsn_init): Replace VINSN_INSN_RTX with
SET_VINSN_INSN_RTX where it's used as an lvalue.
(VINSN_INSN_RTX): New function.
(SET_VINSN_INSN_RTX): New function.
David Malcolm [Tue, 19 Aug 2014 15:31:23 +0000 (15:31 +0000)]
DEP_PRO/DEP_CON scaffolding
gcc/
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* sched-int.h (DEP_PRO): struct _dep's "pro" and "con" fields will
eventually be rtx_insn *, but to help with transition, for now,
convert from an access macro into a pair of functions: DEP_PRO
returning an rtx_insn * and...
(SET_DEP_PRO): New function, for use where DEP_PRO is used as an
lvalue, returning an rtx&.
(DEP_CON): Analogous changes to DEP_PRO above.
(SET_DEP_CON): Likewise.
* haifa-sched.c (create_check_block_twin): Replace DEP_CON used as
an lvalue to SET_DEP_CON.
* sched-deps.c (init_dep_1): Likewise for DEP_PRO and DEP_CON.
(sd_copy_back_deps): Likewise for DEP_CON.
(DEP_PRO): New function, adding a checked cast for now.
(DEP_CON): Likewise.
(SET_DEP_PRO): New function.
(SET_DEP_CON): Likewise.
David Malcolm [Tue, 19 Aug 2014 15:18:42 +0000 (15:18 +0000)]
Convert DF_REF_INSN to a function for now
gcc/
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* df-core.c (DF_REF_INSN): New, using a checked cast for now.
* df.h (DF_REF_INSN): Convert from a macro to a function, so
that we can return an rtx_insn *.
Yaakov Selkowitz [Tue, 19 Aug 2014 15:03:42 +0000 (15:03 +0000)]
cygwin.h (LINK_SPEC): Pass --tsaware flag only when building executables, not DLLs.
2014-08-19 Yaakov Selkowitz <yselkowi@redhat.com>
* config/i386/cygwin.h (LINK_SPEC): Pass --tsaware flag only
when building executables, not DLLs. Add --large-address-aware
under the same conditions.
* config/i386/cygwin-w64.h (LINK_SPEC): Pass --tsaware flag only
when building executables, not DLLs. Add --large-address-aware
under the same conditions when using -m32.
David Malcolm [Tue, 19 Aug 2014 14:47:55 +0000 (14:47 +0000)]
Replace PREV_INSN et al macros with functions
gcc/
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* rtl.h (PREV_INSN): Convert to an inline function. Strengthen
the return type from rtx to rtx_insn *, which will enable various
conversions in followup patches. For now this is is done by a
checked cast.
(NEXT_INSN): Likewise.
(SET_PREV_INSN): Convert to an inline function. This is intended
for use as an lvalue, and so returns an rtx& to allow in-place
modification.
(SET_NEXT_INSN): Likewise.
Mark Wielaard [Tue, 19 Aug 2014 11:00:37 +0000 (11:00 +0000)]
dwarf2out.c: Pass one cv_quals argument instead of two for const and volatile.
modified_type_die and add_type_attribute take two separate arguments
for whether the type should be const and/or volatile. To help add
more type modifiers pass the requested modifiers as one cv_quals argument
to these functions. And introduce helper function decl_quals to extract
additional cv_quals from declaration trees.
DWARFv3 added restrict_type [PR debug/59051] and DWARFv5 has proposals
for atomic_type and aligned_type. Which will be easier to implement based
on this change.
gcc/ChangeLog
* dwarf2out.c (decl_quals): New function.
(modified_type_die): Take one cv_quals argument instead of two,
one for const and one for volatile.
(add_type_attribute): Likewise.
(generic_parameter_die): Call add_type_attribute with one modifier
argument.
(base_type_for_mode): Likewise.
(add_bounds_info): Likewise.
(add_subscript_info): Likewise.
(gen_array_type_die): Likewise.
(gen_descr_array_type_die): Likewise.
(gen_entry_point_die): Likewise.
(gen_enumeration_type_die): Likewise.
(gen_formal_parameter_die): Likewise.
(gen_subprogram_die): Likewise.
(gen_variable_die): Likewise.
(gen_const_die): Likewise.
(gen_field_die): Likewise.
(gen_pointer_type_die): Likewise.
(gen_reference_type_die): Likewise.
(gen_ptr_to_mbr_type_die): Likewise.
(gen_inheritance_die): Likewise.
(gen_subroutine_type_die): Likewise.
(gen_typedef_die): Likewise.
(force_type_die): Likewise.
Mark Wielaard [Tue, 19 Aug 2014 10:30:07 +0000 (10:30 +0000)]
Add guality [p]type test.
Add a new type:var variant to the guality.exp testsuite to check that
gdb gets the correct type for a variable or function. To use it in a
guality test add something like:
Which will put a breakpoint at line 50 and check that the type of "main"
equals "int (int, char **)" according to gdb. The test harness will make
sure to squash all extra whitespace/newlines that gdb might use to make
comparisons of large structs easy.
gcc/testsuite/ChangeLog
* lib/gcc-gdb-test.exp (gdb-test): Handle type:var for gdb ptype
matching. Catch '<unknown type in ' to recognize older gdb versions.
* gcc.dg/guality/const-volatile.c: New test.
re PR c/52952 (Wformat location info is bad (wrong column number))
gcc/c-family/ChangeLog:
2014-08-19 Manuel López-Ibáñez <manu@gcc.gnu.org>
Steven Bosscher <steven@gcc.gnu.org>
PR c/52952
* c-format.c: Add extra_arg_loc and format_string_loc to struct
format_check_results.
(check_function_format): Use true and add comment for boolean
argument.
(finish_dollar_format_checking): Use explicit location when warning.
(check_format_info): Likewise.
(check_format_arg): Set extra_arg_loc and format_string_loc.
(check_format_info_main): Use explicit location when warning.
(check_format_types): Pass explicit location.
(format_type_warning): Likewise.
gcc/testsuite/ChangeLog:
2014-08-19 Manuel López-Ibáñez <manu@gcc.gnu.org>
Steven Bosscher <steven@gcc.gnu.org>
gcc/
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* rtl.h (PREV_INSN): Split macro in two: the existing one,
for rvalues, and...
(SET_PREV_INSN): New macro, for use as an lvalue.
(NEXT_INSN, SET_NEXT_INSN): Likewise.
David Malcolm [Tue, 19 Aug 2014 00:26:56 +0000 (00:26 +0000)]
Replace BB_HEAD et al macros with functions
gcc/
2014-08-19 David Malcolm <dmalcolm@redhat.com>
* basic-block.h (BB_HEAD): Convert to a function. Strengthen the
return type from rtx to rtx_insn *.
(BB_END): Likewise.
(BB_HEADER): Likewise.
(BB_FOOTER): Likewise.
(SET_BB_HEAD): Convert to a function.
(SET_BB_END): Likewise.
(SET_BB_HEADER): Likewise.
(SET_BB_FOOTER): Likewise.
* cfgrtl.c (BB_HEAD): New function, from macro of same name.
Strengthen the return type from rtx to rtx_insn *. For now, this
is done by adding a checked cast, but this will eventually
become a field lookup.
(BB_END): Likewise.
(BB_HEADER): Likewise.
(BB_FOOTER): Likewise.
(SET_BB_HEAD): New function, from macro of same name. This is
intended for use as an lvalue, and so returns an rtx& to allow
in-place modification.
(SET_BB_END): Likewise.
(SET_BB_HEADER): Likewise.
(SET_BB_FOOTER): Likewise.
David Malcolm [Mon, 18 Aug 2014 20:48:17 +0000 (20:48 +0000)]
Split BB_HEAD et al into BB_HEAD/SET_BB_HEAD variants
gcc/
2014-08-18 David Malcolm <dmalcolm@redhat.com>
* basic-block.h (BB_HEAD): Split macro in two: the existing one,
for rvalues, and...
(SET_BB_HEAD): New macro, for use as a lvalue.
(BB_END, SET_BB_END): Likewise.
(BB_HEADER, SET_BB_HEADER): Likewise.
(BB_FOOTER, SET_BB_FOOTER): Likewise.
* rtl.h: Include is-a.h.
(struct rtx_def): Add dummy "desc" and "tag" GTY options as a
workaround to ensure gengtype knows inheritance is occurring,
whilst continuing to use the pre-existing special-casing for
rtx_def.
(class rtx_insn): New subclass of rtx_def, adding the
invariant that we're dealing with something we can sanely use
INSN_UID, NEXT_INSN, PREV_INSN on.
(is_a_helper <rtx_insn *>::test): New.
(is_a_helper <const rtx_insn *>::test): New.
Uros Bizjak [Mon, 18 Aug 2014 18:00:52 +0000 (20:00 +0200)]
re PR target/62011 (False Data Dependency in popcnt instruction)
PR target/62011
* config/i386/x86-tune.def (X86_TUNE_AVOID_FALSE_DEP_FOR_BMI):
New tune flag.
* config/i386/i386.h (TARGET_AVOID_FALSE_DEP_FOR_BMI): New define.
* config/i386/i386.md (unspec) <UNSPEC_INSN_FALSE_DEP>: New unspec.
(ffs<mode>2): Do not expand with tzcnt for
TARGET_AVOID_FALSE_DEP_FOR_BMI.
(ffssi2_no_cmove): Ditto.
(*tzcnt<mode>_1): Disable for TARGET_AVOID_FALSE_DEP_FOR_BMI.
(ctz<mode>2): New expander.
(*ctz<mode>2_falsedep_1): New insn_and_split pattern.
(*ctz<mode>2_falsedep): New insn.
(*ctz<mode>2): Rename from ctz<mode>2.
(clz<mode>2_lzcnt): New expander.
(*clz<mode>2_lzcnt_falsedep_1): New insn_and_split pattern.
(*clz<mode>2_lzcnt_falsedep): New insn.
(*clz<mode>2): Rename from ctz<mode>2.
(popcount<mode>2): New expander.
(*popcount<mode>2_falsedep_1): New insn_and_split pattern.
(*popcount<mode>2_falsedep): New insn.
(*popcount<mode>2): Rename from ctz<mode>2.
(*popcount<mode>2_cmp): Remove.
(*popcountsi2_cmp_zext): Ditto.
Ajit Agarwal [Mon, 18 Aug 2014 17:04:41 +0000 (17:04 +0000)]
Add Init_priority support.
Added TARGET_ASM_CONSTRUCTOR and TARGET_ASM_DESTRUCTOR macros. These
macros allows users to control the order of initialization of objects
defined at namespace scope with the init_priority attribute by
specifying a relative priority.
Richard Biener [Mon, 18 Aug 2014 14:51:04 +0000 (14:51 +0000)]
re PR middle-end/62090 (ice in compute_may_aliases)
2014-08-18 Richard Biener <rguenther@suse.de>
PR tree-optimization/62090
* builtins.c (fold_builtin_snprintf): Move to gimple-fold.c.
(fold_builtin_3): Do not fold snprintf.
(fold_builtin_4): Likewise.
* gimple-fold.c (gimple_fold_builtin_snprintf): New function
moved from builtins.c.
(gimple_fold_builtin_with_strlen): Fold snprintf and sprintf.
(gimple_fold_builtin): Do not fold sprintf here.
Richard Biener [Mon, 18 Aug 2014 14:30:30 +0000 (14:30 +0000)]
gimple-fold.c (maybe_fold_reference): Move re-gimplification code to ...
2014-08-18 Richard Biener <rguenther@suse.de>
* gimple-fold.c (maybe_fold_reference): Move re-gimplification
code to ...
(maybe_canonicalize_mem_ref_addr): ... this function.
(fold_stmt_1): Apply it here before all simplification.
Ilya Enkovich [Mon, 18 Aug 2014 13:26:06 +0000 (13:26 +0000)]
re PR ipa/61800 (ICE: Segmentation fault during Firefox build)
PR ipa/61800
gcc/
* cgraph.h (cgraph_node::create_indirect_edge): Add
compute_indirect_info param.
* cgraph.c (cgraph_node::create_indirect_edge): Compute
indirect_info only when it is required.
* cgraphclones.c (cgraph_clone_edge): Do not recompute
indirect_info fore cloned indirect edge.