David Malcolm [Mon, 5 Jun 2017 20:53:06 +0000 (20:53 +0000)]
libcpp: add callback for comment-handling
gcc/testsuite/ChangeLog:
* g++.dg/plugin/comment_plugin.c: New test plugin.
* g++.dg/plugin/comments-1.C: New test file.
* g++.dg/plugin/plugin.exp (plugin_test_list): Add the above.
libcpp/ChangeLog:
* include/cpplib.h (struct cpp_callbacks): Add "comment"
callback.
* lex.c (_cpp_lex_direct): Call the comment callback if non-NULL.
Jan Hubicka [Mon, 5 Jun 2017 17:41:32 +0000 (19:41 +0200)]
cfgexpand.c (expand_gimple_tailcall): Initialize profile of new edge.
* cfgexpand.c (expand_gimple_tailcall): Initialize profile of
new edge.
* ipa-inline.c (want_inline_self_recursive_call_p): Watch for missing
profile in callgraph edge.
* profile-count.h (apply_probability): If THIS is 0, then result is 0
(apply_scale): Likewise.
* tree-inline.c (copy_bb, copy_edges_for_bb, copy_cfg_body):
Also scale profile when inlining function with zero profile.
(initialize_cfun): Update exit block profile even when it is zero.
* tree-ssa-threadupdate.c (clear_counts_path): Handle correctly case
when profile is read.
[gcc]
2017-06-05 Michael Meissner <meissner@linux.vnet.ibm.com>
* config/rs6000/rs6000.c (toplevel): Include attribs.h.
(CLONE_*): New constants to define the processors we can generate
code for with the target_clone attribute.
(rs6000_clone_map): New array to identify which clone processors
the current program is running on.
(TARGET_COMPARE_VERSION_PRIORITY): Define to enable the
target_clone attribute.
(TARGET_GENERATE_VERSION_DISPATCHER_BODY): Likewise.
(TARGET_GET_FUNCTION_VERSIONS_DISPATCHER): Likewise.
(TARGET_OPTION_FUNCTION_VERSIONS): Likewise.
(cpu_expand_builtin): Add support for target_clone attribute.
(rs6000_valid_attribute_p): Allow "default" attribute.
(get_decl_name): New debug function to simplify printing the
current function name in debugging statements.
(rs6000_clone_priority): New functions to support the target_clone
attribute, and be able to generate code to switch between ISA 2.05
through ISA 3.0 (power6 through power9).
(rs6000_compare_version_priority): Likewise.
(rs6000_get_function_versions_dispatcher): Likewise.
(make_resolver_func): Likewise.
(add_condition_to_bb): Likewise.
(dispatch_function_versions): Likewise.
(rs6000_generate_version_dispatcher_body): Likewise.
(rs6000_can_inline_p): Call get_decl_name for debugging usage.
(fusion_gpr_load_p): Fix a spacing issue.
* doc/extend.texi (Common Function Attributes): Document that the
PowerPC supports the target_clone attribute.
[gcc/testsuite]
2017-06-05 Michael Meissner <meissner@linux.vnet.ibm.com>
Nicolas Koenig [Mon, 5 Jun 2017 12:35:11 +0000 (14:35 +0200)]
re PR fortran/35339 (Improve translation of implied do loop in transfer)
2017-06-05 Nicolas Koenig <koenigni@student.ethz.ch>
PR fortran/35339
* frontend-passes.c (traverse_io_block): New function.
(simplify_io_impl_do): New function.
(optimize_namespace): Invoke gfc_code_walker with
simplify_io_impl_do.
2017-06-05 Nicolas Koenig <koenigni@student.ethz.ch>
PR fortran/35339
* gfortran.dg/implied_do_io_1.f90: New Test.
* gfortran.dg/implied_do_io_2.f90: New Test.
Jonathan Wakely [Mon, 5 Jun 2017 10:34:13 +0000 (11:34 +0100)]
Optimize std::advance for single increments
* include/bits/stl_iterator_base_funcs.h
(__advance<_RandomAccessIterator, _Distance>): Optimize for next/prev
cases where incrementing or decrementing a single step.
Kyrylo Tkachov [Mon, 5 Jun 2017 08:49:59 +0000 (08:49 +0000)]
[AArch64] Use SUBS for parallel subtraction and comparison with immediate
* config/aarch64/aarch64.md (sub<mode>3_compare1_imm): New define_insn.
(peephole2): New peephole2 to emit the above.
* config/aarch64/predicates.md (aarch64_sub_immediate): New predicate.
Will Schmidt [Fri, 2 Jun 2017 15:02:25 +0000 (15:02 +0000)]
rs6000.c (rs6000_gimple_fold_builtin): Add handling for early expansion of vec_min and vec_max builtins.
[gcc]
2017-06-02 Will Schmidt <will_schmidt@vnet.ibm.com>
* config/rs6000/rs6000.c (rs6000_gimple_fold_builtin): Add handling
for early expansion of vec_min and vec_max builtins.
(builtin_function_type): Add min/max unsigned variants to those
identified as having unsigned arguments.
[gcc/testsuite]
2017-06-02 Will Schmidt <will_schmidt@vnet.ibm.com>
Kyrylo Tkachov [Fri, 2 Jun 2017 14:41:52 +0000 (14:41 +0000)]
[AArch64] Emit tighter strong atomic compare-exchange loop when comparing against zero
* config/aarch64/aarch64.c (aarch64_split_compare_and_swap):
Emit CBNZ inside loop when doing a strong exchange and comparing
against zero. Generate the CC flags after the loop.
* gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c: New test.
David Edelsohn [Fri, 2 Jun 2017 14:27:15 +0000 (14:27 +0000)]
dwarf2out.c (DWARF_INITIAL_LENGTH_SIZE_STR): New.
* dwarf2out.c (DWARF_INITIAL_LENGTH_SIZE_STR): New.
(dl_section_ref): New.
(dwarf2out_finish): Copy debug_line_section_label to dl_section_ref.
On AIX, append an expression to subtract the size of the
section length to dl_section_ref.
Jonathan Wakely [Fri, 2 Jun 2017 11:49:04 +0000 (12:49 +0100)]
Remove libsupc++ makefile targets setting -std=gnu++11 or -std=gnu++14
* libsupc++/Makefile.am: Remove custom targets for files that need to
be compiled as C++11 or C++14.
* libsupc++/Makefile.in: Regenerate.
* libsupc++/del_ops.cc: Use pragma to disable -Wsized-deallocation
warnings.
* libsupc++/del_opvs.cc: Likewise.
* name-lookup.h (cp_binding_level): Lose namespaces field.
* name-lookup.c (add_decl_to_level): Chain namespaces on the names
list.
(suggest_alternatives_for): Adjust for namespace list. Do
breadth-first search.
* decl2.c (collect_source_refs): Namespaces are on the regulr
list.
(collect_ada_namespace): Likewise.
Richard Biener [Fri, 2 Jun 2017 10:26:10 +0000 (10:26 +0000)]
tree-vect-loop.c (vect_analyze_loop_operations): Not relevant PHIs are ok.
2017-06-02 Richard Biener <rguenther@suse.de>
* tree-vect-loop.c (vect_analyze_loop_operations): Not relevant
PHIs are ok.
* tree-vect-stmts.c (process_use): Do not mark backedge defs
for inductions as relevant.
Eric Botcazou [Fri, 2 Jun 2017 09:57:40 +0000 (09:57 +0000)]
* builtins. (expand_builtin_alloca): Remove second parameter and
infer its value from the first parameter instead.
(expand_builtin) <BUILT_IN_ALLOCA>: Adjust call to above.
* c-parser.c (c_parser_binary_expression): Implement the
-Wsizeof_pointer_div warning.
(c_parser_postfix_expression): Allow SIZEOF_EXPR as expr.original_code
from a parenthesized expression.
(c_parser_expr_list): Use c_last_sizeof_loc.
* c-tree.h (c_last_sizeof_loc): New external.
* c-typeck.c (c_last_sizeof_loc): New variable.
(c_expr_sizeof_expr, c_expr_sizeof_type): Assign c_last_sizeof_loc.
DWARF: add DW_AT_location for global decls with DECL_VALUE_EXPR
In GNAT, we materialize renamings that cannot be described in standard
DWARF as synthetic variables that describe how to fetch the renamed
object. Look for "___XR" in gcc/ada/exp_dbug.ads for more details about
this convention.
In order to have a location for these variables in the debug info (GDB
requires it not to discard the variable) but also to avoid allocating
runtime space for them, we make these variable hold a DECL_VALUE_EXPR
tree. However, since GCC 7, the DWARF back-end no longer generates a
DW_AT_location attribute for those. This patch is an attempt to restore
this attribute.
gcc/
* dwarf2out.c (dwarf2out_late_global_decl): Add locations for
symbols that hold a DECL_VALUE_EXPR.
Martin Jambor [Thu, 1 Jun 2017 12:14:29 +0000 (14:14 +0200)]
[PR 80898] Propagate grp_write from disqualified SRA candidates
2017-06-01 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/80898
* tree-sra.c (process_subtree_disqualification): Removed.
(disqualify_candidate): Do not acll
process_subtree_disqualification.
(subtree_mark_written_and_enqueue): New function.
(propagate_all_subaccesses): Set grp_write of LHS subtree if the
RHS has been disqualified and re-queue LHS if necessary. Apart
from that, ignore disqualified RHS.
testsuite/
* gcc.dg/tree-ssa/pr80898.c: New test.
* gcc.dg/tree-ssa/pr80898-2.c: Likewise.
Andreas Krebbel [Thu, 1 Jun 2017 11:30:36 +0000 (11:30 +0000)]
S/390: Don't fetch the return address early with ooo
We used to load the return address slot some time in advance. This
helped on older machines to resolve the data dependencies in time.
However, it is pointless on out of order CPUs. Disabled with that
patch.
gcc/ChangeLog:
2017-06-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/s390.c (s390_emit_epilogue): Disable early return
address fetch for z10 or later.
[ARC] Test against frame_pointer_needed in arc_can_eliminate.
arc_can_eliminate is using arc_frmae_pointer_required() which is wrong
as the frame_pointer_needed can be set on different conditions. Fix it
by calling arc_frame_pointer_needed().
[ARC] Prevent moving stores to the frame before the stack adjustment.
If the stack pointer is needed, emit a special barrier that will prevent
the scheduler from moving stores to the frame before the stack adjustment.
For example:
[snip]
mov_s fp,sp ; frame pointer is set here
[snip]
st r1,[fp,-24] ; frame pointer is used here
[snip]
sub_s sp,sp,0x20 ; stack pointer adjusted
So we can easily see that any interrupt between the `st` and `sub`
instruction will lead to faulty code as the interrupt routine will use
a faulty sp register, and, potentially, overwriting the value stored
by 'st' instruction. Thus, adding a scheduler barrier will force the
compiler to emit the `sub` instruction before the store one.
* config/arc/arc.c (arc_expand_prologue): Emit a special barrier
to prevent store reordering.
* config/arc/arc.md (UNSPEC_ARC_STKTIE): Define.
(type): Add block type.
(stack_tie): Define special instruction to be used in
expand_prologue.
* config/arc/arc.md (commutative_binary_comparison): Remove 'I'
constraint. It is not valid for the pattern.
(noncommutative_binary_comparison): Likewise.
* config/arc/arc.md (mulsi3): Avoid use of hard registers before
reg-alloc when having mul64 or mul32x16 instructions.
(mulsidi3): Likewise.
(umulsidi3): Likewise.
(mulsi32x16): New pattern.
(mulsi64): Likewise.
(mulsidi64): Likewise.
(umulsidi64): Likewise.
(MUL32x16_REG): Define.
(mul64_600): Use MUL32x16_REG.
(mac64_600): Likewise.
(umul64_600): Likewise.
(umac64_600): Likewise.
DWARF: for variants, produce unsigned discr. when debug type is unsigned
In Ada, the Character type is supposed to be unsigned. However,
depending on the sign of C char types, GNAT can materialize it as a
signed type for code generation purposes. When this is the case, GNAT
also attach a debug type to it so it is represented as an unsigned base
type in the debug information.
This change adapts record variant parts processing in the DWARF back-end
so that when the debug type of discriminant is unsigned while
discriminant values are signed themselves, we output unsigned
discriminant values in DWARF.
gcc/
* dwarf2out.c (get_discr_value): Call the get_debug_type hook on
the type of the input discriminant value. Convert the
discriminant value of signedness vary.
Richard Biener [Thu, 1 Jun 2017 08:05:24 +0000 (08:05 +0000)]
re PR middle-end/66313 (Unsafe factorization of a*b+a*c)
2017-06-01 Richard Biener <rguenther@suse.de>
PR middle-end/66313
* fold-const.c (fold_plusminus_mult_expr): If the factored
factor may be zero use a wrapping type for the inner operation.
* tree-tailcall.c (independent_of_stmt_p): Pass in to_move bitmap
and handle moved defs.
(process_assignment): Properly guard the unary op case. Return a
tri-state indicating that moving the stmt before the call may allow
to continue. Pass through to_move.
(find_tail_calls): Handle moving unrelated defs before
the call.
* c-c++-common/ubsan/pr66313.c: New testcase.
* gcc.dg/tree-ssa/loop-15.c: Adjust.
Steven Munroe [Thu, 1 Jun 2017 00:15:51 +0000 (00:15 +0000)]
Fix up dg options to resolve make check failures Bill Seurer found
when compiling --with-cpu=power6.
2017-05-31 Steven Munroe <munroesj@gcc.gnu.org>
* gcc.target/powerpc/bmi2-pdep32-1.c: Add -mcpu=power7 to
dg-options. Change dg-require-effective-target powerpc_vsx_ok
to vsx_hw. Add dg-skip-if directive to disable this test if
-mcpu overridden.
* gcc.target/powerpc/bmi2-pdep64-1.c: Likewise.
* gcc.target/powerpc/bmi2-pext32-1.c: Likewise.
* gcc.target/powerpc/bmi2-pext64-1.c: Likewise.
* gcc.target/powerpc/bmi2-pext64-1a.c: Add -mcpu=power7
to dg-option. Add dg-skip-if directive to disable this test
for darwin. Add dg-skip-if directive to disable this test if
-mcpu overridden.
rs6000: Don't write "nor" as (not (ior () ())) (PR80618)
The canonical RTL for "nor" is (and (not ()) (not ())), and that is
indeed what we use in boolccv2df3_internal1. So, the splitter for
*vector_uneq<mode> should use that form, not (not (ior () ())), which
does not match any pattern.
PR target/80618
* config/rs6000/rs6000.md (*vector_uneq<mode>): Write the nor in the
splitter result in the canonical way.
Uros Bizjak [Wed, 31 May 2017 18:33:30 +0000 (20:33 +0200)]
i386.md (*zero_extendsidi2): Enable alternative (?r, *Yj) also for 32bit target.
* config/i386/i386.md (*zero_extendsidi2): Enable alternative (?r, *Yj)
also for 32bit target. Update insn attributes.
(zero-extendsidi2 splitter): Allow all registers for operand 1.
* gcc.target/i386/avx512f-vmaxsd-1.c (_mm_mask_max_sd)
(_mm_maskz_max_sd): Test new intrinsics.
* gcc.target/i386/avx512f-vmaxsd-2.c (_mm_mask_max_sd)
(_mm_maskz_max_sd): Test new intrinsics.
* gcc.target/i386/avx512f-vmaxss-1.c (_mm_mask_max_ss)
(_mm_maskz_max_ss): Test new intrinsics.
* gcc.target/i386/avx512f-vmaxss-2.c (_mm_mask_max_ss)
(_mm_maskz_max_ss): Test new intrinsics.
* gcc.target/i386/avx512f-vminsd-1.c (_mm_mask_min_sd)
(_mm_maskz_min_sd): Test new intrinsics.
* gcc.target/i386/avx512f-vminsd-2.c (_mm_mask_min_sd)
(_mm_maskz_min_sd): Test new intrinsics.
* gcc.target/i386/avx512f-vminss-1.c (_mm_mask_min_ss)
(_mm_maskz_min_ss): Test new intrinsics.
* gcc.target/i386/avx512f-vminss-2.c (_mm_mask_min_ss)
(_mm_maskz_min_ss): Test new intrinsics.
Nathan Sidwell [Wed, 31 May 2017 16:46:58 +0000 (16:46 +0000)]
cp-tree.h (lang_decl_slector): New enum.
* cp-tree.h (lang_decl_slector): New enum.
(lang_decl_base): Make selector an enum. Drop decomposition_p
field.
(lang_decl): Use enum for discrimination.
(LANG_DECL_FN_CHECK, LANG_DECL_NS_CHECK, LANG_DECL_PARM_CHECK,
LANG_DECL_DEOMP_CHECK): Use enum.
(DECL_DECOMPOSITION_P): Use selector value.
(SET_DECL_DECOMPOSITION_P): Delete.
(retrofit_lang_decl): Lose SEL parm.
(fit_decomposition_lang_decl): Declare.
* decl.c (cp_finish_decomp, grokdeclarator): Use
fit_decomposition_lang_decl.
* lex.c (maybe_add_lang_decl_raw): New. Broken out of
retrofit_lang_decl.
(set_decl_linkage): New. Broken out of retrofit_lang_decl. Use
enum.
(fit_decomposition_lang_decl): Likewise.
(retrofit_lang_decl): Use worker functions.
(cxx_dup_lang_specific_decl): Use selector enum.
(maybe_add_lang_type_raw): New. Broken out of ...
(cxx_make_type_name): ... here. Call it.