Commit Graph

170249 Commits

Author SHA1 Message Date
Richard Biener ce52e0ffb4 re PR tree-optimization/91257 (Compile-time and memory-hog hog)
2019-07-31  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91257
	* tree-vrp.c (union_ranges): Unify equality and less tests
	by using compare_values.  Re-order cheap tests first.

From-SVN: r273923
2019-07-31 07:53:11 +00:00
Jakub Jelinek c3ac76aa40 re PR middle-end/91301 (ICE in omp_add_variable on random access iterator distribute parallel for private (iterator))
PR middle-end/91301
	* gimplify.c (gimplify_omp_for): If for class iterator on
	distribute parallel for there is no data sharing clause
	on inner_for_stmt, look for private clause on combined
	parallel too and if found, move it to inner_for_stmt.

	* testsuite/libgomp.c++/for-27.C: New test.

From-SVN: r273922
2019-07-31 09:49:56 +02:00
Richard Sandiford a25f3e8efb Make lra use per-alternative earlyclobber info
lra_insn_reg and lra_operand_data have both a bitmask of earlyclobber
alternatives and an overall boolean.  The danger is that we then test
the overall boolean when really we should be testing for a particular
alternative.  This patch gets rid of the boolean and tests the mask
against zero when we really do need to test "any alternative might
be earlyclobber".  (I think the only instance of that is the
LRA_UNKNOWN_ALT handling in lra-lives.c:reg_early_clobber_p.)

This is needed (and tested) by an upcoming SVE patch.

2019-07-31  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* lra-int.h (lra_operand_data): Remove early_clobber field.
	(lra_insn_reg): Likewise.
	* lra.c (debug_operand_data): Update accordingly.
	(setup_operand_alternative): Likewise.
	(new_insn_reg): Likewise.  Remove early_clobber parameter.
	(collect_non_operand_hard_regs): Update call accordingly.
	Don't assign to lra_insn_reg::early_clobber.
	(add_regs_to_insn_regno_info): Remove early_clobber parameter
	and update calls to new_insn_reg.
	(lra_update_insn_regno_info): Update calls accordingly.
	* lra-constraints.c (update_and_check_small_class_inputs): Take the
	alternative number as a parameter and test whether the operand
	is earlyclobbered in that particular alternative.
	(process_alt_operands): Update call accordingly.  Use per-alternative
	checks for earyclobber here too.
	* lra-lives.c (reg_early_clobber_p): Check early_clobber_alts
	against zero for IRA_UNKNOWN_ALT.

From-SVN: r273921
2019-07-31 07:33:11 +00:00
GCC Administrator 68c86af248 Daily bump.
From-SVN: r273920
2019-07-31 00:16:23 +00:00
Martin Sebor 5df20b9095 PR testsuite/91258 - g++.dg/ubsan/vla-1.C and gcc.dg/strlenopt-70.c fail starting with r273783
gcc/testsuite/ChangeLog:
	* g++.dg/ubsan/vla-1.C: Suppress a valid warning.

From-SVN: r273915
2019-07-30 14:42:36 -06:00
Steven G. Kargl f16be16d2d re PR fortran/91296 (ICE when passing complex number %re/%im as a procedure argument with -Waliasing.)
2019-07-30  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/91296
	* interface.c (compare_actual_expr): When checking for aliasing, add
	a case to handle REF_INQUIRY (e.g., foo(x%re, x%im) do not alias).

2019-07-30  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/91296
	* gfortran.dg/pr91296.f90: New test.

From-SVN: r273914
2019-07-30 20:02:27 +00:00
Uros Bizjak 5ec4a44296 alpha.c (alpha_option_override): Quote a C type.
* config/alpha/alpha.c (alpha_option_override): Quote a C type.

From-SVN: r273912
2019-07-30 18:24:59 +02:00
Wilco Dijkstra cefbac6ec7 Adjust literal pool offset in Thumb-2 movsi patterns
My previous change to the Thumb-2 movsi patterns caused a codesize regression
with -Os in large functions.  Fix this by using the literal pool offset of the
16-bit literal load so that the literal pool is dumped earlier, reducing the
number of 32-bit literal loads.

Bootstrap & regress OK on arm-none-linux-gnueabihf --with-cpu=cortex-a57

    gcc/
	* config/arm/thumb2.md (thumb2_movsi_insn): Adjust literal offset.
	* config/arm/vfp.md (thumb2_movsi_vfp): Likewise.

From-SVN: r273911
2019-07-30 15:27:04 +00:00
Martin Liska d9c425fb65 Use edge->indirect_unknown_callee in cgraph_edge::make_direct (PR ipa/89330).
2019-07-30  Martin Liska  <mliska@suse.cz>

	PR ipa/89330
	* cgraph.c (cgraph_edge::make_direct): Use
	edge->indirect_unknown_callee as edge->resolve_speculation can
	deallocate edge which is this pointer.

From-SVN: r273910
2019-07-30 14:52:29 +00:00
Richard Biener 0e5b369ef1 re PR tree-optimization/91257 (Compile-time and memory-hog hog)
2019-07-30  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91257
	* bitmap.c (bitmap_ior_and_compl_into): Open-code.

From-SVN: r273909
2019-07-30 14:16:24 +00:00
Martin Liska 200b0e7e82 Deduce automatically number of cores for -flto option.
2019-07-30  Martin Liska  <mliska@suse.cz>

	* doc/invoke.texi: Document new behavior.
	* lto-wrapper.c (cpuset_popcount): New function
	is a copy of libgomp/config/linux/proc.c.
	(init_num_threads): Likewise.
	(run_gcc): Automatically detect core count for -flto.
	(jobserver_active_p): New function.

From-SVN: r273908
2019-07-30 13:45:11 +00:00
Richard Biener 029ca38849 re PR tree-optimization/91257 (Compile-time and memory-hog hog)
2019-07-30  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91257
	* bitmap.h (bitmap_ior_into_and_free): Declare.
	* bitmap.c (bitmap_list_unlink_element): Add defaulted param
	whether to add the unliked element to the freelist.
	(bitmap_list_insert_element_after): Add defaulted param for
	an already allocated element.
	(bitmap_ior_into_and_free): New function.
	* tree-ssa-structalias.c (condense_visit): Reduce the
	ponts-to and edge bitmaps of the SCC members in a
	logarithmic fashion rather than all to one.

From-SVN: r273907
2019-07-30 12:13:01 +00:00
Martin Liska 1da8ab97a1 Mark 2nd argument of delete operator as needed (PR tree-optimization/91270).
2019-07-30  Martin Liska  <mliska@suse.cz>

	PR tree-optimization/91270
	* tree-ssa-dce.c (propagate_necessity): Mark 2nd argument
	of delete operator as needed.
2019-07-30  Martin Liska  <mliska@suse.cz>

	PR tree-optimization/91270
	* g++.dg/torture/pr91270.C: New test.

From-SVN: r273906
2019-07-30 11:00:35 +00:00
Richard Sandiford c1b3d82783 Handle IFN_COND_MUL in tree-ssa-math-opts.c
This patch extends the FMA handling in tree-ssa-math-opts.c so
that it can cope with conditional multiplications as well as
unconditional multiplications.  The addition or subtraction must then
have the same condition as the multiplication (at least for now).

E.g. we can currently fold:

  (IFN_COND_ADD cond (mul x y) z fallback)
    -> (IFN_COND_FMA cond x y z fallback)

This patch also allows:

  (IFN_COND_ADD cond (IFN_COND_MUL cond x y <whatever>) z fallback)
    -> (IFN_COND_FMA cond x y z fallback)

2019-07-30  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-ssa-math-opts.c (convert_mult_to_fma): Add a mul_cond
	parameter.  When nonnull, make sure that the addition or subtraction
	has the same condition.
	(math_opts_dom_walker::after_dom_children): Try convert_mult_to_fma
	for CFN_COND_MUL too.

gcc/testsuite/
	* gcc.dg/vect/vect-cond-arith-7.c: New test.

From-SVN: r273905
2019-07-30 10:59:29 +00:00
Richard Biener 8c955a4b9c re PR tree-optimization/91291 (gcc.dg/20020312-2.c FAILs)
2019-07-30  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91291
	* tree-ssa-sccvn.c (rpo_elim::eliminate_push_avail): Ignore
	constant values.

From-SVN: r273903
2019-07-30 08:57:35 +00:00
Jakub Jelinek 230e2efd78 re PR middle-end/91282 (gcc.dg/type-convert-var.c FAILs)
PR middle-end/91282
	* gcc.dg/type-convert-var.c: Add -fexcess-precision=fast to
	dg-additional-options.

From-SVN: r273899
2019-07-30 09:35:13 +02:00
Jakub Jelinek 03be2d2bb3 re PR middle-end/91216 (OpenMP ICE starting with r265930)
PR middle-end/91216
	* omp-low.c (global_nonaddressable_vars): New variable.
	(use_pointer_for_field): For global decls, if they are non-addressable,
	remember it in the global_nonaddressable_vars bitmap, if they are
	addressable and in the global_nonaddressable_vars bitmap, ignore their
	TREE_ADDRESSABLE bit.
	(omp_copy_decl_2): Clear TREE_ADDRESSABLE also on private copies of
	vars in global_nonaddressable_vars bitmap.
	(execute_lower_omp): Free global_nonaddressable_vars bitmap.

	* gcc.dg/gomp/pr91216.c: New test.

From-SVN: r273898
2019-07-30 09:28:22 +02:00
Jakub Jelinek fa2987ed8d re PR target/91150 (wrong code with -O -mavx512vbmi due to wrong writemask)
PR target/91150
	* config/i386/i386-expand.c (expand_vec_perm_blend): Change mask type
	from unsigned to unsigned HOST_WIDE_INT.  For E_V64QImode cast
	comparison to unsigned HOST_WIDE_INT before shifting it left.

	* gcc.target/i386/avx512bw-pr91150.c: New test.

From-SVN: r273897
2019-07-30 09:13:04 +02:00
GCC Administrator b867820937 Daily bump.
From-SVN: r273896
2019-07-30 00:16:16 +00:00
Uros Bizjak 82534f65d8 i386.md (movstrict<mode>): Use register_operand predicate for operand 0.
* config/i386/i386.md (movstrict<mode>): Use register_operand
	predicate for operand 0.  Add expander condition.  Assert that
	operand 0 is a SUBREG RTX.
	(*movstrict<mode>_1): Use register_operand predicate for operand 0.
	Update operand constraints and insn condition.
	(zero_extend<mode>si2_and): Do not call gen_movstrict<mode>.
	(zero_extendqihi2_and): Do not call gen_movstrictqi.
	(*setcc_qi_slp): Use register_operand predicate for operand 0.
	Update operand 0 constraints.
	(setcc_qi_slp splitters): Use register_operand predicate for operand 0.

From-SVN: r273891
2019-07-30 00:47:36 +02:00
Jozef Lawrynowicz 49c432df66 MSP430: Disallow use of code/data regions in the small memory model
gcc/ChangeLog:

2019-07-29  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* config/msp430/msp430.h (DRIVER_SELF_SPECS): Define and emit errors
	when -m{code,data}-region are used without -mlarge.
	* config/msp430/msp430.c (msp430_option_override): Error when a
	non-default code or data region is used without -mlarge.
	(msp430_section_attr): Emit a warning and do not add upper/lower/either
	attributes when they are used without -mlarge.

gcc/testsuite/ChangeLog:

2019-07-29  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* gcc.target/msp430/pr78818-data-region.c: Add -mlarge to dg-options.
	* gcc.target/msp430/region-misuse-code.c: New test.
	* gcc.target/msp430/region-misuse-data.c: Likewise.
	* gcc.target/msp430/region-misuse-code-data.c: Likewise.
	* gcc.target/msp430/region-attribute-misuse.c: Likewise.

From-SVN: r273884
2019-07-29 20:23:44 +00:00
Jozef Lawrynowicz 3781698890 Allow both upper and lower case 'r' in register names
2019-07-29  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	PR target/70320
	* config/msp430/msp430.h: Define ADDITIONAL_REGISTER_NAMES.

2019-07-29  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	PR target/70320
	* gcc.target/msp430/asm-register-names-lower-case.c: New test.
	* gcc.target/msp430/asm-register-names-upper-case.c: Likewise.

From-SVN: r273883
2019-07-29 19:21:18 +00:00
Richard Sandiford 2c393dabda Add PR number
From-SVN: r273882
2019-07-29 18:52:37 +00:00
Richard Sandiford 5d5bb9bc26 Fix inchash handling of wide_ints (PR91242)
inchash:#️⃣:add_wide_int operated directly on the raw encoding
of the wide_int, including any redundant upper bits.  The problem
with that is that the upper bits are only defined for some wide-int
storage types (including wide_int itself).  wi::to_wide(tree) instead
returns a value that is extended according to the signedness of the
type (so that wi::to_widest can use the same encoding) while rtxes
have the awkward special case of BI, which can be zero-extended
rather than sign-extended.

In the PR, we computed a hash for a "normal" sign-extended wide_int
while the existing entries hashed wi::to_wide(tree).  This gives
different results for unsigned types that have the top bit set.

The patch fixes that by hashing the canonical sign-extended form even
if the raw encoding happens to be different.

2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* wide-int.h (generic_wide_int::sext_elt): New function.
	* inchash.h (hash::add_wide_int): Use it instead of elt.

From-SVN: r273881
2019-07-29 18:50:25 +00:00
Thomas Koenig 5c6aa9a891 re PR fortran/90813 (gfortran.dg/proc_ptr_51.f90 fails (SIGSEGV) after 272084)
2019-07-29  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/90813
	* dump-parse-tree.c (show_global_symbol): New function.
	(gfc_dump_global_symbols): New function.
	* gfortran.h (gfc_traverse_gsymbol): Add prototype.
	(gfc_dump_global_symbols): Likewise.
	* invoke.texi: Document -fdump-fortran-global.
	* lang.opt: Add -fdump-fortran-global.
	* parse.c (gfc_parse_file): Handle flag_dump_fortran_global.
	* symbol.c (gfc_traverse_gsymbol): New function.
	* trans-decl.c (sym_identifier): New function.
	(mangled_identifier): New function, doing most of the work
	of gfc_sym_mangled_identifier.
	(gfc_sym_mangled_identifier): Use mangled_identifier.  Add mangled
	identifier to global symbol table.
	(get_proc_pointer_decl): Use backend decl from global identifier
	if present.

From-SVN: r273880
2019-07-29 17:45:24 +00:00
Kyrylo Tkachov 9373378901 [arm] Make ACLE builtins use arm_* namespace for expanders
The builtins from <arm_acle.h> use fairly general expander names such as
"crc", "mcr" etc.
These run the risk of being reserved by the midend in the future.
Let's namespace them to arm_* as is convention.

	* config/arm/arm-builtins.c (acle_builtin_data): Expand VAR1 to
	CODE_FOR_arm_##.
	* config/arm/arm.md (<crc_variant>): Rename to...
	(arm_<crc_variant>): ... This.
	(<cdp>): Rename to...
	(arm_<cdp>): ... This.
	(<ldc>): Rename to...
	(arm_<ldc>): ... This.
	(<stc>): Rename to...
	(arm_<stc>): ... This.
	(<mcr>): Rename to...
	(arm_<mcr>): ... This.
	(<mrc>): Rename to...
	(arm_<mrc>): ... This.
	(<mcrr>): Rename to...
	(arm_<mcrr>): ... This.
	(<mrrc>): Rename to...
	(arm_<mrrc>): ... This.

From-SVN: r273879
2019-07-29 15:31:53 +00:00
Jonathan Wakely 50c2df93a6 PR libstdc++/51333 Define recursive_init_error constructor non-inline
The recursive_init_error class is defined in a header, with an inline
constructor, but the definition of the vtable and destructor are not
exported from the shared library. With -fkeep-inline-functions the
constructor gets emitted in user code, and requires the (non-exported)
vtable. This fails to link.

As far as I can tell, the recursive_init_error class definition was
moved into <cxxabi.h> so it could be documented with Doxygen, not for
any technical reason. But now it's there (and documented), somebody
could be relying on it, by catching that type and possibly performing
derived-to-base conversions to the std::exception base class. So the
conservative fix is to leave the class definition in the header but make
the constructor non-inline. This still allows the type to be caught and
still defines its base class. User code can no longer construct objects
of that type, but that's not something we need to support.

	PR libstdc++/51333
	* libsupc++/cxxabi.h (__gnu_cxx::recursive_init_error): Do not define
	constructor inline.
	* libsupc++/guard_error.cc (__gnu_cxx::recursive_init_error): Define
	constructor.
	* testsuite/18_support/51333.cc: New test.

From-SVN: r273878
2019-07-29 15:27:19 +01:00
Richard Biener 390c0dd61d re PR tree-optimization/91257 (Compile-time and memory-hog hog)
2019-07-29  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91257
	* tree-ssa-sccvn.h (struct vn_avail): New.
	(struct vn_ssa_aux): Add avail member.
	* tree-ssa-sccvn.c (class rpo_elim): Remove m_rpo_avail
	member, add m_avail_freelist one.
	(rpo_elim::~rpo_elim): Remove.
	(rpo_elim::eliminate_avail): Adjust to new avail tracking
	data structure.
	(rpo_elim::eliminate_push_avail): Likewise.
	(do_unwind): Likewise.
	(do_rpo_vn): Likewise.

From-SVN: r273877
2019-07-29 14:19:07 +00:00
Richard Biener a55d609123 re PR tree-optimization/91257 (Compile-time and memory-hog hog)
2019-07-29  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91257
	* tree-vrp.c (operand_less_p): Avoid dispatching to fold for
	most cases, instead call compare_values which handles the
	symbolic ranges we handle specially.
	(compare_values_warnv): Do not call operand_less_p but open-code
	the effective fold calls.  Avoid converting so much.

From-SVN: r273876
2019-07-29 11:38:46 +00:00
Martin Liska fc5e7d2ac4 Fix ICE seen in tree-ssa-dce.c for new/delete pair.
2019-07-29  Martin Liska  <mliska@suse.cz>

	* tree-ssa-dce.c (eliminate_unnecessary_stmts): Do not
	remove LHS of operator new call.  It's handled latter.
2019-07-29  Martin Liska  <mliska@suse.cz>

	* g++.dg/cpp1y/new1.C (test_unused): Add new case that causes
	ICE.

From-SVN: r273875
2019-07-29 10:39:46 +00:00
Richard Biener 3c2f6fae59 re PR middle-end/91267 (SEGV in value_range_base::equal_p)
2019-07-29  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91267
	* vr-values.c (vr_values::update_value_range): Add early return
	for effectively VARYING lattice entry.

	* gcc.dg/torture/pr91267.c: New testcase.

From-SVN: r273874
2019-07-29 10:10:15 +00:00
Richard Sandiford f33b9c40b9 Prevent tree-ssa-dce.c from deleting stores at -Og
DCE tries to delete dead stores to local data and also tries to insert
debug binds for simple cases:

  /* If this is a store into a variable that is being optimized away,
     add a debug bind stmt if possible.  */
  if (MAY_HAVE_DEBUG_BIND_STMTS
      && gimple_assign_single_p (stmt)
      && is_gimple_val (gimple_assign_rhs1 (stmt)))
    {
      tree lhs = gimple_assign_lhs (stmt);
      if ((VAR_P (lhs) || TREE_CODE (lhs) == PARM_DECL)
	  && !DECL_IGNORED_P (lhs)
	  && is_gimple_reg_type (TREE_TYPE (lhs))
	  && !is_global_var (lhs)
	  && !DECL_HAS_VALUE_EXPR_P (lhs))
	{
	  tree rhs = gimple_assign_rhs1 (stmt);
	  gdebug *note
	    = gimple_build_debug_bind (lhs, unshare_expr (rhs), stmt);
	  gsi_insert_after (i, note, GSI_SAME_STMT);
	}
    }

But this doesn't help for things like "print *ptr" when ptr points
to the local variable (tests Og-dce-1.c and Og-dce-2.c).  It can
also introduce wrong debug info for earlier references (second test
in Og-dce-3.c) or make earlier references unavailable (first test
in Og-dce-3.c).

So for -Og I think it'd be better not to delete any stmts with
vdefs for now.  This also means that we can avoid the potentially
expensive vop walks (which already have a cut-off, but still).

The patch also fixes the Og failures in gcc.dg/guality/pr54970.c
(PR 86638).

2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	PR debug/86638
	* tree-ssa-dce.c (keep_all_vdefs_p): New function.
	(mark_stmt_if_obviously_necessary): Mark all stmts with vdefs as
	necessary if keep_all_vdefs_p is true.
	(mark_aliased_reaching_defs_necessary): Add a gcc_checking_assert
	that keep_all_vdefs_p is false.
	(mark_all_reaching_defs_necessary): Likewise.
	(propagate_necessity): Skip the vuse scan if keep_all_vdefs_p is true.

gcc/testsuite/
	* c-c++-common/guality/Og-dce-1.c: New test.
	* c-c++-common/guality/Og-dce-2.c: Likewise.
	* c-c++-common/guality/Og-dce-3.c: Likewise.

From-SVN: r273872
2019-07-29 08:52:56 +00:00
Richard Sandiford c0fe6bce2a Don't run DSE at -Og
This patch stops gimple and rtl DSE from running by default at -Og.
The idea is both to improve compile time and to stop us from deleting
stores that we can't track in debug info.

We could rein this back in future for stores to local variables
with is_gimple_reg_type, but at the moment we don't have any
infrastructure for switching between binds to specific values
and binds to evolving memory locations.  Even then, location
tracking only works for direct references to the variables, and doesn't
for example help with printing dereferenced pointers (see the next patch
in the series for an example).

I'm also not sure that DSE is important enough for -Og to justify the
compile time cost --  especially in the case of RTL DSE, which is pretty
expensive.

2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* common.opt (Og): Change the initial value of flag_dse to 0.
	* opts.c (default_options_table): Move OPT_ftree_dse from
	OPT_LEVELS_1_PLUS to OPT_LEVELS_1_PLUS_NOT_DEBUG.  Also add
	OPT_fdse to OPT_LEVELS_1_PLUS_NOT_DEBUG.  Put the OPT_ftree_pta
	entry before the OPT_ftree_sra entry.
	* doc/invoke.texi (Og): Add -fdse and -ftree-dse to the list
	of flags disabled by Og.

gcc/testsuite/
	* c-c++-common/guality/Og-global-dse-1.c: New test.

From-SVN: r273871
2019-07-29 08:47:20 +00:00
Richard Sandiford ec8ac265ff Prevent -Og from deleting stores to write-only variables
This patch prevents -Og from deleting stores to write-only variables,
so that the values are still available when debugging.  This seems
more convenient than forcing users to use __attribute__((used))
(probably conditionally, if it's not something they want in release
builds).

2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-cfg.c (execute_fixup_cfg): Don't delete stores to write-only
	variables for -Og.

gcc/testsuite/
	* c-c++-common/guality/Og-static-wo-1.c: New test.
	* g++.dg/guality/guality.exp: Separate the c-c++-common tests into
	"Og" and "general" tests.  Run the latter at -O0 and -Og only.
	* gcc.dg/guality/guality.exp: Likewise.

From-SVN: r273870
2019-07-29 08:46:54 +00:00
Richard Sandiford 4d706ff86e Add dg test for matching function bodies
There isn't a 1:1 mapping from SVE intrinsics to SVE instructions,
but the intrinsics are still close enough to the instructions for
there to be a specific preferred sequence (or sometimes choice of
preferred sequences) for a given combination of operands.  Sometimes
these sequences will be one instruction, sometimes they'll be several.

I therefore wanted a convenient way of matching the exact assembly
implementation of a given function.  It's possible to do that using
single scan-assembler lines, but:

(a) they become hard to read for multiline matches
(b) the PASS/FAIL lines tend to be overly long
(c) it's useful to have a single place that skips over uninteresting
    lines, such as entry block labels and .cfi_* directives, without
    being overly broad

This patch therefore adds a new check-function-bodies dg-final test
that looks for specially-formatted comments.  As a demo, the patch
converts the SVE vec_init tests to use the new harness instead of
scan-assembler.

The regexps in parse_function_bodies are fairly general, but might
still need to be extended in future for targets like Darwin or AIX.

2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* doc/sourcebuild.texi (check-function-bodies): Document.

gcc/testsuite/
	* lib/scanasm.exp (parse_function_bodies, check_function_body)
	(check-function-bodies): New procedures.
	* gcc.target/aarch64/sve/init_1.c: Use check-function-bodies
	instead of scan-assembler.
	* gcc.target/aarch64/sve/init_2.c: Likewise.
	* gcc.target/aarch64/sve/init_3.c: Likewise.
	* gcc.target/aarch64/sve/init_4.c: Likewise.
	* gcc.target/aarch64/sve/init_5.c: Likewise.
	* gcc.target/aarch64/sve/init_6.c: Likewise.
	* gcc.target/aarch64/sve/init_7.c: Likewise.
	* gcc.target/aarch64/sve/init_8.c: Likewise.
	* gcc.target/aarch64/sve/init_9.c: Likewise.
	* gcc.target/aarch64/sve/init_10.c: Likewise.
	* gcc.target/aarch64/sve/init_11.c: Likewise.
	* gcc.target/aarch64/sve/init_12.c: Likewise.

From-SVN: r273869
2019-07-29 08:46:46 +00:00
Richard Sandiford 708cc6132b Generalise VEC_DUPLICATE folding for variable-length vectors
This patch uses the constant vector encoding scheme to handle
more cases of a VEC_DUPLICATE of another vector.  Duplicating
any fixed-length vector is fine, and duplicating a variable-length
vector is OK as long as that vector is also a duplicate of a
fixed-length sequence.

Other cases fell through to:

  if (VECTOR_MODE_P (mode) && GET_CODE (op) == CONST_VECTOR)

which was only expecting to deal with elementwise operations.

2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* simplify-rtx.c (simplify_const_unary_operation): Fold a
	VEC_DUPLICATE of a fixed-length vector even if the result
	is variable-length.  Likewise fold a duplicate of a
	variable-length vector if the variable-length vector is
	itself a duplicate of a fixed-length sequence.
	(test_vector_ops_duplicate): Test more cases.

From-SVN: r273868
2019-07-29 08:42:19 +00:00
Richard Sandiford 4ce6ab6889 Implement more rtx vector folds on variable-length vectors
This patch extends the tree-level folding of variable-length vectors
so that it can also be used on rtxes.  The first step is to move
the tree_vector_builder new_unary/binary_operator routines to the
parent vector_builder class (which in turn means adding a new
template parameter).  The second step is to make simplify-rtx.c
use a direct rtx analogue of the VECTOR_CST handling in fold-const.c.

2019-07-29  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* vector-builder.h (vector_builder): Add a shape template parameter.
	(vector_builder::new_unary_operation): New function, generalizing
	the old tree_vector_builder function.
	(vector_builder::new_binary_operation): Likewise.
	(vector_builder::binary_encoded_nelts): Likewise.
	* int-vector-builder.h (int_vector_builder): Update template
	parameters to vector_builder.
	(int_vector_builder::shape_nelts): New function.
	* rtx-vector-builder.h (rtx_vector_builder): Update template
	parameters to vector_builder.
	(rtx_vector_builder::shape_nelts): New function.
	(rtx_vector_builder::nelts_of): Likewise.
	(rtx_vector_builder::npatterns_of): Likewise.
	(rtx_vector_builder::nelts_per_pattern_of): Likewise.
	* tree-vector-builder.h (tree_vector_builder): Update template
	parameters to vector_builder.
	(tree_vector_builder::shape_nelts): New function.
	(tree_vector_builder::nelts_of): Likewise.
	(tree_vector_builder::npatterns_of): Likewise.
	(tree_vector_builder::nelts_per_pattern_of): Likewise.
	* tree-vector-builder.c (tree_vector_builder::new_unary_operation)
	(tree_vector_builder::new_binary_operation): Delete.
	(tree_vector_builder::binary_encoded_nelts): Likewise.
	* simplify-rtx.c: Include rtx-vector-builder.h.
	(distributes_over_addition_p): New function.
	(simplify_const_unary_operation)
	(simplify_const_binary_operation): Generalize handling of vector
	constants to include variable-length vectors.
	(test_vector_ops_series): Add more tests.

From-SVN: r273867
2019-07-29 08:40:21 +00:00
Jan Hubicka 66fafc3bf6 re PR c++/91222 (507.cactuBSSN_r build fails in warn_types_mismatch at ipa-devirt.c:1006 since r273571)
PR lto/91222
	* ipa-devirt.c (warn_types_mismatch): Compare indentifiers
	than INDENTIFIER_POINTER.

From-SVN: r273866
2019-07-29 08:18:38 +00:00
GCC Administrator a8cc00bfd7 Daily bump.
From-SVN: r273864
2019-07-29 00:16:21 +00:00
Martin Liska fe248a88e5 Release cgraph_{node,edge} via ggc_free (PR ipa/89330).
2019-07-28  Martin Liska  <mliska@suse.cz>

	PR ipa/89330
	* cgraph.c (symbol_table::create_edge): Always allocate
	a cgraph_edge.
	(symbol_table::free_edge): Store summary_id to
	edge_released_summary_ids if != -1;
	* cgraph.h (NEXT_FREE_NODE): Remove.
	(SET_NEXT_FREE_NODE): Likewise.
	(NEXT_FREE_EDGE): Likewise.
	(symbol_table::release_symbol): Store summary_id to
	cgraph_released_summary_ids if != -1;
	(symbol_table::allocate_cgraph_symbol): Always allocate
	a cgraph_node.

From-SVN: r273857
2019-07-28 17:10:26 +00:00
Rainer Orth 4f394a9e1c Fix g++.dg/lto/pr89330 on Solaris
* g++.dg/lto/pr89330_0.C (dg-lto-options): Add -fPIC.
	Require fpic support.

From-SVN: r273856
2019-07-28 12:31:17 +00:00
Alan Modra aef57966f4 [RS6000] rs6000_output_mi_thunk tidy
Since svn r123193 (git 327202e27a) the comment about scratch regs was
no longer correct, and I think gen_sibcall could have been used even
then.

	* gcc/config/rs6000/rs6000-call.c (rs6000_output_mi_thunk): Use
	gen_sibcall.

From-SVN: r273855
2019-07-28 19:00:41 +09:30
Alan Modra 295ac7c79e [RS6000] PR91135, __linux__ not defined with -mcall-aixdesc on 9.x and ppc64
This patch makes the obvious fix for PR91135, and deletes extraneous
copies of GNU_USER_TARGET_D_OS_VERSIONS that appear in rs6000/linux.h
and rs6000/linux64.h.  Since all configurations using either of these
files also include linux.h there is no need to duplicate the macro.

	PR target/91135
	* config/rs6000/linux.h (GNU_USER_TARGET_D_OS_VERSIONS): Don't
	define.
	* config/rs6000/linux64.h (TARGET_OS_CPP_BUILTINS): Invoke
	GNU_USER_TARGET_OS_CPP_BUILTINS for aixdesc abi.
	(GNU_USER_TARGET_D_OS_VERSIONS): Don't define.

From-SVN: r273854
2019-07-28 18:59:11 +09:30
Alan Modra 8d85264514 [RS6000] Make assembler command line cpu match default for gcc
When gcc is configured using --with-cpu=<cpu>, the specified cpu
effectively becomes a default -mcpu=<cpu> passed to gcc.  This then
affects the cpu passed to gas via ASM_CPU_SPEC.  If gcc is not
configured using --with-cpu then the cpu passed to gas is that given
by ASM_DEFAULT_SPEC, which currently does not match the default flags
selected in default64.h.  This patch makes ASM_DEFAULT_SPEC agree with
TARGET_DEFAULT flags.

rs6000/default64.h appears in three places in config.gcc, the first
one immediately followed by rs6000/freebsd64.h in $tm_file, and the
other two immediately followed by rs6000/linux64.h.  To be able to
define ASM_DEFAULT_SPEC in rs6000/default64.h we don't want to
redefine in the other two files.  rs6000/freebsd64.h is easy since
that file is always preceded by rs6000/default64.h, but
rs6000/linux64.h can appear without rs6000/default64.h (a
powerpc*-linux config where the default is -m32).  In that case we
will have TARGET_DEFAULT flags of 0 (from rs6000/sysv4.h) and want to
use -mppc without -m64 and -mppc64 with -m64.  This can be done by
using the rs6000/rtems.h ASM_DEFAULT_SPEC in rs6000/sysv4.h, a change
that won't affect sysv4 configurations where -m64 is invalid.

The patch also introduces ASM_DEFAULT_EXTRA for the altivec variant
targets so as to enable -maltivec by default.

	PR target/91050
	* config/rs6000/sysv4.h (ASM_DEFAULT_SPEC): Modify if -m64.
	* config/rs6000/default64.h (ASM_DEFAULT_SPEC): Define.
	* config/rs6000/freebsd64.h (ASM_DEFAULT_SPEC): Don't define.
	* config/rs6000/linux64.h (ASM_DEFAULT_SPEC): Likewise.
	* config/rs6000/rtems.h (ASM_DEFAULT_SPEC): Likewise.
	* config/rs6000/rs6000.h (ASM_DEFAULT_EXTRA): Define and use
	in asm_default spec.
	* config/rs6000/eabialtivec.h (ASM_DEFAULT_EXTRA): Redefine.
	* config/rs6000/linuxaltivec.h (ASM_DEFAULT_EXTRA): Redefine.

From-SVN: r273853
2019-07-28 18:56:13 +09:30
Gerald Pfeifer c5993c9abc documentation_hacking.xml: Fix broken reference to the Doxygen manual.
* doc/xml/manual/documentation_hacking.xml: Fix broken reference
	to the Doxygen manual. Avoid a "here" link on the way.
	Fix another broken link to Doxygen docblocks.

From-SVN: r273852
2019-07-28 09:10:32 +00:00
Gerald Pfeifer f0350021b8 * doc/include/gpl_v3.texi (Copying): Use https for www.gnu.org.
From-SVN: r273851
2019-07-28 08:41:20 +00:00
GCC Administrator 93ca071285 Daily bump.
From-SVN: r273850
2019-07-28 00:16:59 +00:00
Iain Sandoe 5bca9dd453 [Darwin, PPC, testsuite] Fix fail for bmi2-bzhi64-1a.c
This test is failing with older cpus because the included header needs both
altivec and vsx to be enabled to succeed in compiling.  Without this (if these
are not defaults for the cpu) there are errors like:

In file included from ... x86intrin.h:41,
                 from ... bmi2-bzhi64-1a.c:6:
 ... xmmintrin.h: In function '_mm_loadu_ps':
 ... xmmintrin.h:122:11: 
error: incompatible types when returning type 'int' but '__m128' {aka '__vector(4) float'} was expected
<snip>
 ... xmmintrin.h: In function '_mm_cvtps_pi32':
 ... xmmintrin.h:996:3: 
error: use of 'long long' in AltiVec types is invalid without '-mvsx'
<snip>

Fixed by adding -maltivec -mvsx to the options.

gcc/testsuite/

2019-07-27  Iain Sandoe  <iain@sandoe.co.uk>

	* gcc.target/powerpc/bmi2-bzhi64-1a.c: Add options to enable altivec
	and vsx.

From-SVN: r273844
2019-07-27 07:43:15 +00:00
GCC Administrator eebbac5830 Daily bump.
From-SVN: r273843
2019-07-27 00:16:32 +00:00
Iain Sandoe 4f67cda871 [Darwin, testsuite] Handle Darwin's size command.
Darwin's "size" command has a different header line, reflecting the Mach-O
section naming conventions.  This causes tests using the command to fail
because scanasm.exp expects and checks specific layout of the header line.

gcc/testsuite/

2019-07-26  Iain Sandoe  <iain@sandoe.co.uk>

	* lib/scanasm.exp (object-size): Handle Darwin's size command.

From-SVN: r273839
2019-07-26 18:58:02 +00:00