Commit Graph

166923 Commits

Author SHA1 Message Date
Jakub Jelinek
79e2c811f8 re PR tree-optimization/89268 (r268689 caused FAIL: gcc.dg/vect/pr79887.c)
PR tree-optimization/89268
	* tree-if-conv.c (version_loop_for_if_conversion): Push to preds only
	if preds is non-NULL.

	* gcc.dg/vect/pr89268.c: New test.

From-SVN: r268743
2019-02-10 12:06:58 +01:00
Jan Hubicka
4c0d3f7728 re PR lto/89272 (r268728 caused FAIL: g++.dg/lto/pr65316 cp_lto_pr65316_0.o assemble)
PR lto/89272
	* tree.c (fld_simplified_type_name): Also keep TYPE_DECL for
	polymorphic types.

From-SVN: r268742
2019-02-10 10:46:43 +00:00
Monk Chiang
c5ca5ad070 [NDS32] Add 'trap' pattern for __builtin_trap ().
gcc/
	* config/nds32/nds32.md (trap): New pattern.

From-SVN: r268741
2019-02-10 09:45:55 +00:00
Iain Buclaw
6ba50b2cb9 d/dmd: Merge upstream dmd 39edbe17e
Backported fix from upstream dmd 2.079 for an internal compiler error
that occurred during semantic analysis on a recursive field initializer.

Fixes https://gcc.gnu.org/PR88989

Reviewed-on: https://github.com/dlang/dmd/pull/9284

From-SVN: r268740
2019-02-10 09:13:26 +00:00
Monk Chiang
4b23af6dae [NDS32] Refine register dwarf span.
gcc/
	* config/nds32/nds32.c (nds32_dwarf_register_span): Refine register
	dwarf span.

From-SVN: r268739
2019-02-10 09:09:19 +00:00
Chung-Ju Wu
93c75052c4 [NDS32] Have nds32_spilt_doubleword to split POST_INC.
gcc/
	* config/nds32/nds32-md-auxiliary.c (nds32_spilt_doubleword): Support
	to split POST_INC.

From-SVN: r268738
2019-02-10 09:00:43 +00:00
Rainer Orth
22cdea54ad Don't XPASS gnat.dg/lto19.adb
* gnat.dg/lto19.adb: Remove dg-excess-errors.

From-SVN: r268737
2019-02-10 08:14:07 +00:00
Tom de Vries
c51b2c8ce3 [libbacktrace] Add btest_lto
Add libbacktrace test-case using -flto.

2019-02-10  Tom de Vries  <tdevries@suse.de>

	* Makefile.am (BUILDTESTS): Add btest_lto.
	* Makefile.in: Regenerate.
	* btest.c (test1, f2, f3, test3, f22, f23): Declare with
	__attribute__((noclone)).

From-SVN: r268736
2019-02-10 03:16:09 +00:00
GCC Administrator
d21cac18ae Daily bump.
From-SVN: r268735
2019-02-10 00:16:34 +00:00
Jan Hubicka
5873f613cd ipa-visibility.c (localize_node): Also do not localize LDPR_PREVAILING_DEF_IRONLY_EXP.
* ipa-visibility.c (localize_node): Also do not localize
	LDPR_PREVAILING_DEF_IRONLY_EXP.

From-SVN: r268732
2019-02-09 21:54:28 +00:00
Jan Hubicka
f8774677d8 Fix PR number.
From-SVN: r268729
2019-02-09 18:07:12 +00:00
Jan Hubicka
293f35fcd5 re PR lto/87089 (tree check: expected class 'type', have 'declaration' (namespace_decl) in type_with_linkage_p, at ipa-utils.h)
PR lto/87809
	* tree.c (fld_simplified_type_name): Use DECL_ASSEMBLER_NAME_SET_P
	instead of type_with_linkage.

From-SVN: r268728
2019-02-09 18:01:03 +00:00
Jan Hubicka
42fceb01cb re PR ipa/88755 (ICE in compute_fn_summary, at ipa-fnsummary.c:2513 since r267601)
PR ipa/88755
	* params.def (uninlined-function-insns, uninlined-function-time,
	uninlined-thunk-insns, uninlined-thunk-time): Add artificial upper
	bound so we don't get overflows.

From-SVN: r268727
2019-02-09 17:56:22 +00:00
Harald Anlauf
1fe27030ff re PR fortran/89077 (ICE using * as len specifier for character parameter)
2019-02-09  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/89077
	* resolve.c (gfc_resolve_substring_charlen): Check substring
	length for constantness prior to general calculation of length.

	PR fortran/89077
	* gfortran.dg/substr_simplify.f90: New test.

From-SVN: r268726
2019-02-09 17:25:23 +00:00
Aaron Sawdey
5585759fdb rs6000-string.c (expand_compare_loop, [...]): Insert REG_BR_PROB notes in inline expansion of memcmp/strncmp.
2019-02-09  Aaron Sawdey  <acsawdey@linux.ibm.com>

	* config/rs6000/rs6000-string.c (expand_compare_loop,
	expand_block_compare): Insert REG_BR_PROB notes in inline expansion of
	memcmp/strncmp.

From-SVN: r268724
2019-02-09 11:06:12 -06:00
Jan Hubicka
b9cee23e86 re PR ipa/88711 (scan-ipa-dump inline "Inlined tp_sum/)
PR ipa/88711
	* gfortran.dg/pr79966.f90: Xfail everwyhere.

From-SVN: r268723
2019-02-09 16:28:45 +00:00
Paul Thomas
af3da717d6 re PR fortran/89200 (Erroneous copying of a derived type with a deferred-length character array component)
2019-02-09  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/89200
	* trans-array.c (gfc_trans_create_temp_array): Set the 'span'
	field for derived types.

2019-02-09  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/89200
	* gfortran.dg/array_reference_2.f90 : New test.

From-SVN: r268721
2019-02-09 11:11:33 +00:00
Jakub Jelinek
de3ed9259f re PR middle-end/89246 (LTO produces references to cloned symbols which the compiler failed to clone)
PR middle-end/89246
	* config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen):
	If !node->definition and TYPE_ARG_TYPES is non-NULL, use
	TYPE_ARG_TYPES instead of DECL_ARGUMENTS.

	* gcc.dg/gomp/pr89246-1.c: New test.
	* gcc.dg/gomp/pr89246-2.c: New test.

From-SVN: r268718
2019-02-09 09:55:39 +01:00
Jonathan Wakely
4fe5c8c730 Add noexcept to filesystem::path query functions
In the standard these member functions are specified in terms of the
potentially-throwing path decompositions functions, but we implement
them without constructing any new paths or doing anything else that can
throw.

	PR libstdc++/71044
	* include/bits/fs_path.h (path::has_root_name)
	(path::has_root_directory, path::has_root_path)
	(path::has_relative_path, path::has_parent_path)
	(path::has_filename, path::has_stem, path::has_extension)
	(path::is_absolute, path::is_relative, path::_M_find_extension): Add
	noexcept.
	* src/c++17/fs_path.cc (path::has_root_name)
	(path::has_root_directory, path::has_root_path)
	(path::has_relative_path, path::has_parent_path)
	(path::has_filename, path::_M_find_extension): Add noexcept.

From-SVN: r268713
2019-02-09 00:25:39 +00:00
GCC Administrator
5b0bf81512 Daily bump.
From-SVN: r268712
2019-02-09 00:16:31 +00:00
Alan Modra
9b747072b9 [RS6000] Correct save_reg_p
Fixes lack of r30 save/restore on

// -m32 -fpic -ftls-model=initial-exec
__thread char* p;
char** f1 (void) { return &p; }

and

// -m32 -fpic -msecure-plt
extern int foo (int);
int f1 (int x) { return foo (x); }

These are both caused by save_reg_p returning false when the pic
offset table reg (r30 for ABI_V4) was used, due to the logic not
exactly matching that in rs6000_emit_prologue to set up r30.

I also noticed that save_reg_p isn't following the comment regarding
calls_eh_return (since svn 267049, git 0edf78b1b2a0), and the comment
needs tweaking too.  For why the revised comment is correct, grep for
saves_all_registers in lra.c, and yes, we do want to save the pic
offset table reg for eh_return.

	PR target/88343
	* config/rs6000/rs6000.c (save_reg_p): Correct calls_eh_return
	case.  Match logic in rs6000_emit_prologue emitting pic_offset_table
	setup.

From-SVN: r268708
2019-02-09 08:50:58 +10:30
Jakub Jelinek
ddf321918d re PR tree-optimization/88739 (Big-endian union bug)
PR tree-optimization/88739
	* gcc.c-torture/execute/pr88739.c: New test.

From-SVN: r268706
2019-02-08 20:01:37 +01:00
Vladimir Makarov
82396b8cfb re PR middle-end/88560 (armv8_2-fp16-move-1.c and related regressions after r266385)
2019-02-08  Vladimir Makarov  <vmakarov@redhat.com>

	PR middle-end/88560
	* lra-constraints.c (process_alt_operands): Don't increase reject
	for memory when offset memory is required.

From-SVN: r268705
2019-02-08 19:01:10 +00:00
Jozef Lawrynowicz
b74ab8eb42 re PR testsuite/89258 (verify_gimple failed in gimple test pr80887 for 16-bit target)
2019-02-08  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	PR testsuite/89258
	* gcc.dg/tree-ssa/pr80887.c: Require int32plus.

From-SVN: r268704
2019-02-08 16:47:28 +00:00
Robin Dapp
062468db04 S/390: Implement vector copysign.
This patch implements the vector copysign operation using vector select and a
signbit mask.

gcc/ChangeLog:

2019-02-08  Robin Dapp  <rdapp@linux.ibm.com>

	* config/s390/vector.md: Implement vector copysign.

gcc/testsuite/ChangeLog:

2019-02-08  Robin Dapp  <rdapp@linux.ibm.com>

	* gcc.target/s390/vector/vec-copysign-execute.c: New test.
	* gcc.target/s390/vector/vec-copysign.c: New test.

From-SVN: r268697
2019-02-08 14:25:48 +00:00
H.J. Lu
94e35e0b09 expr.c: Correct indentations in expand_constructor
* expr.c (expand_constructor): Correct indentations.

From-SVN: r268696
2019-02-08 06:19:09 -08:00
Richard Biener
a2d0c3bf8c re PR tree-optimization/89247 (ICE in expand_LOOP_VECTORIZED, at internal-fn.c:2409)
2019-02-08  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/89247
	* tree-if-conv.c: Include tree-cfgcleanup.h.
	(version_loop_for_if_conversion): Record LOOP_VECTORIZED call.
	(tree_if_conversion): Pass through predicate vector.
	(pass_if_conversion::execute): Do CFG cleanup and SSA update
	inline, see if any if-converted loops we refrece in
	LOOP_VECTORIZED calls vanished and fixup.
	* tree-if-conv.h (tree_if_conversion): Adjust prototype.

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

From-SVN: r268689
2019-02-08 13:21:36 +00:00
Ilya Leoshkevich
11719d1474 S/390: Introduce jdd constraint
Implementation of section anchors in S/390 back-end added in r266741
broke jump labels in S/390 Linux kernel [1].  Currently jump labels
pass global variable addresses to .quad directive in inline assembly
using "X" constraint.  In the past this used to produce regular symbol
references, however, after r266741 we sometimes get values like
(plus (reg) (const_int)), where (reg) points to a section anchor.
Strictly speaking, this is still correct, since "X" accepts anything.
Thus, now we need another way to support jump labels.

The existing "i" constraint cannot be used, since with -fPIC it must
not accept non-local symbols, however, jump labels do require that,
e.g. __tracepoint_xdp_exception from kernel proper might be referenced
from kernel modules.

The existing "ZL" constraint cannot be used for the same reason.

The existing "b" constraint cannot be used because of the way
expand_asm_stmt works.  It deduces whether the constraint allows
regs, subregs or mems, and processes asm operands differently based on
that.  "b" is supposed to accept values like (mem (symbol_ref)), and
there appears to be no way to explain to expand_asm_stmt that for "b"
mem's address must not be in a register.

This patch introduces the new machine-specific constraint named "jdd" -
"j" prefix is already used for constants, and "d" stands for "data".
It accepts anything that fits into the data section, whether or not
this might require a relocation, that is, anything that passes
CONSTANT_P check.

[1] https://lkml.org/lkml/2019/1/23/346

gcc/ChangeLog:

2019-02-08  Ilya Leoshkevich  <iii@linux.ibm.com>

	* config/s390/constraints.md (jdd): New constraint.

gcc/testsuite/ChangeLog:

2019-02-08  Ilya Leoshkevich  <iii@linux.ibm.com>

	* gcc.target/s390/jump-label.c: New test.

From-SVN: r268688
2019-02-08 12:39:27 +00:00
Richard Biener
5f5d88d82b re PR testsuite/89250 (gcc.dg/vect/vect-24.c XPASSes)
2019-02-08  Richard Biener  <rguenther@suse.de>

	PR testsuite/89250
	* gcc.dg/vect/vect-24.c: Remove XFAIL on vect_condition targets.

From-SVN: r268680
2019-02-08 11:56:28 +00:00
Eric Botcazou
14cc7b26a9 trans.c (gnat_to_gnu): Minor tweak.
* gcc-interface/trans.c (gnat_to_gnu) <N_Aggregate>: Minor tweak.
	* gcc-interface/utils.c (convert): Do not pad when doing an unchecked
	conversion here.  Use TREE_CONSTANT throughout the function.
	(unchecked_convert): Also pad if the source is a CONSTRUCTOR and the
	destination is a more aligned array type or a larger aggregate type,
	but not between original and packable versions of a type.

From-SVN: r268679
2019-02-08 11:37:40 +00:00
H.J. Lu
694b3bb3c3 i386: Use OI/TImode in *mov[ot]i_internal_avx with AVX512VL
OImode and TImode moves must be done in XImode to access upper 16
vector registers without AVX512VL.  With AVX512VL, we can access
upper 16 vector registers in OImode and TImode.

	PR target/89229
	* config/i386/i386.md (*movoi_internal_avx): Set mode to XI for
	upper 16 vector registers without TARGET_AVX512VL.
	(*movti_internal): Likewise.

From-SVN: r268678
2019-02-08 03:30:53 -08:00
Eric Botcazou
cc26a3bdef utils.c (max_size): Be prepared for an operand with VOID_TYPE.
* gcc-interface/utils.c (max_size) <tcc_unary>: Be prepared for an
	operand with VOID_TYPE.

From-SVN: r268675
2019-02-08 11:20:23 +00:00
Eric Botcazou
0850f23b69 trans.c (elaborate_all_entities): Do not elaborate the entities of a package renaming another one.
* gcc-interface/trans.c (elaborate_all_entities): Do not elaborate the
	entities of a package renaming another one.

From-SVN: r268674
2019-02-08 11:19:51 +00:00
Eric Botcazou
3bdf0b644a trans.c (Regular_Loop_to_gnu): Replace tests on individual flag_unswitch_loops and flag_tree_loop_vectorize...
* gcc-interface/trans.c (Regular_Loop_to_gnu): Replace tests on
	individual flag_unswitch_loops and flag_tree_loop_vectorize switches
	with test on global optimize switch.
	(Raise_Error_to_gnu): Likewise.

From-SVN: r268671
2019-02-08 11:07:08 +00:00
Jakub Jelinek
89cfdb7e5b re PR rtl-optimization/89234 (ICE in get_eh_region_and_lp_from_rtx at gcc/except.c:1824)
PR rtl-optimization/89234
	* except.c (copy_reg_eh_region_note_forward): Return if note_or_insn
	is a NOTE, CODE_LABEL etc. - rtx_insn * other than INSN_P.
	(copy_reg_eh_region_note_backward): Likewise.

	* g++.dg/ubsan/pr89234.C: New test.

From-SVN: r268669
2019-02-08 11:26:33 +01:00
Tom de Vries
4af50e13a0 [libbacktrace] Declare external backtrace fns noinline
The backtrace functions backtrace_full, backtrace_print and backtrace_simple
walk the call stack, but make sure to skip the first entry, in order to skip
over the functions themselves, and start the backtrace at the caller of the
functions.

When compiling with -flto, the functions may be inlined, causing them to skip
over the caller instead.

Fix this by declaring the functions with __attribute__((noinline)).

2019-02-08  Tom de Vries  <tdevries@suse.de>

	* backtrace.c (backtrace_full): Declare with __attribute__((noinline)).
	* print.c (backtrace_print): Same.
	* simple.c (backtrace_simple): Same.

From-SVN: r268668
2019-02-08 09:49:06 +00:00
Richard Biener
2536d696a3 re PR tree-optimization/89223 (internal compiler error: in int_cst_value, at tree.c:11226)
2019-02-08  Richard Biener  <rguenther@suse.de>

	PR middle-end/89223
	* tree-data-ref.c (initialize_matrix_A): Fail if constant
	doesn't fit in HWI.
	(analyze_subscript_affine_affine): Handle failure from
	initialize_matrix_A.

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

From-SVN: r268666
2019-02-08 08:18:09 +00:00
Jakub Jelinek
1c93f6ce59 cfganal.c (pre_and_rev_post_order_compute_fn): Use fn instead of cfun everywhere.
* cfganal.c (pre_and_rev_post_order_compute_fn): Use fn instead of
	cfun everywhere.

From-SVN: r268664
2019-02-08 08:14:57 +01:00
Tom de Vries
2bd0a246c6 [libbacktrace] Handle DW_FORM_ref_addr
Add handling of the DW_FORM_ref_addr encoding to libbacktrace.

2019-02-08  Tom de Vries  <tdevries@suse.de>

	PR libbacktrace/78063
	* dwarf.c (build_address_map): Keep all parsed units.
	(read_referenced_name_from_attr): Handle DW_FORM_ref_addr.

From-SVN: r268663
2019-02-08 05:55:44 +00:00
GCC Administrator
0dc1a7f1dd Daily bump.
From-SVN: r268662
2019-02-08 00:16:26 +00:00
David Malcolm
25b67546a1 Fix more ICEs in -fsave-optimization-record (PR tree-optimization/89235)
PR tree-optimization/89235 reports an ICE inside -fsave-optimization-record
whilst reporting the inlining chain of of the location_t in the
vect_location global.

This is very similar to PR tree-optimization/86637, fixed in r266821.

The issue is that the inlining chains are read from the location_t's
ad-hoc data, referencing GC-managed tree blocks, but the former are
not GC roots; it's simply assumed that old locations referencing dead
blocks never get used again.

The fix is to reset the "vect_location" global in more places.  Given
that is a somewhat subtle detail, the patch adds a sentinel class to
reset vect_location at the end of a scope.  Doing it as a class
simplifies the task of ensuring that the global is reset on every
exit path from a function, and also gives a good place to signpost
the above subtlety (in the documentation for the class).

The patch also adds test cases for both of the PRs mentioned above.

gcc/testsuite/ChangeLog:
	PR tree-optimization/86637
	PR tree-optimization/89235
	* gcc.c-torture/compile/pr86637-1.c: New test.
	* gcc.c-torture/compile/pr86637-2.c: New test.
	* gcc.c-torture/compile/pr86637-3.c: New test.
	* gcc.c-torture/compile/pr89235.c: New test.

gcc/ChangeLog:
	PR tree-optimization/86637
	PR tree-optimization/89235
	* tree-vect-loop.c (optimize_mask_stores): Add an
	auto_purge_vect_location sentinel to ensure that vect_location is
	purged on exit.
	* tree-vectorizer.c
	(auto_purge_vect_location::~auto_purge_vect_location): New dtor.
	(try_vectorize_loop_1): Add an auto_purge_vect_location sentinel
	to ensure that vect_location is purged on exit.
	(pass_slp_vectorize::execute): Likewise, replacing the manual
	reset.
	* tree-vectorizer.h (class auto_purge_vect_location): New class.

From-SVN: r268659
2019-02-07 23:00:18 +00:00
Kyrylo Tkachov
8544ed6eea [AArch64] Change representation of SABD in RTL
Richard raised a concern about the RTL we use to represent the AdvSIMD SABD
(vector signed absolute difference) instruction.
We currently represent it as ABS (MINUS op1 op2).

This isn't exactly what SABD does. ABS treats its input as a signed value
and returns the absolute of that.

For example:
(sabd:QI 64 -128) == 192 (unsigned) aka -64 (signed)
whereas
(minus:QI 64 -128) == 192 (unsigned) aka -64 (signed), (abs ...) of that is 64.

A better way to describe the instruction is with MINUS (SMAX (op1 op2) SMIN (op1 op2)).
This patch implements that, and also implements similar semantics for the UABD instruction
that uses UMAX and UMIN.

That way for the example above we'll have:
(minus:QI (smax:QI (64 -128)) (smin:QI (64 -128))) == (minus:QI 64 -128) == 192 (or -64 signed) which matches
what SABD does. 

	* config/aarch64/iterators.md (max_opp): New code_attr.
	(USMAX): New code iterator.
	* config/aarch64/predicates.md (aarch64_smin): New predicate.
	(aarch64_smax): Likewise.
	* config/aarch64/aarch64-simd.md (abd<mode>_3): Rename to...
	(*aarch64_<su>abd<mode>_3): ... Change RTL representation to
	MINUS (MAX MIN).

	* gcc.target/aarch64/abd_1.c: New test.
	* gcc.dg/sabd_1.c: Likewise.

From-SVN: r268658
2019-02-07 18:18:16 +00:00
H.J. Lu
2b99b6c0cc i386: Fix typo in *movoi_internal_avx/movti_internal
PR target/89229
	* config/i386/i386.md (*movoi_internal_avx): Set mode to OI
	for TARGET_AVX512VL.
	(*movti_internal): Set mode to TI for TARGET_AVX512VL.

From-SVN: r268657
2019-02-07 09:58:19 -08:00
Dominique d'Humieres
2a88974cd1 re PR fortran/52789 (gfortran sets -Wunused-parameter in the C sense as well as the Fortran sense)
2019-02-07  Dominique d'Humieres  <dominiq@gcc.gnu.org>

	PR fortran/52789
	* gfortran.dg/wunused-parameter_2.f90: New test.

From-SVN: r268656
2019-02-07 18:40:29 +01:00
Matthew Malcomson
accd3cd688 Only run on arm architecture
My previous patch failed to only run an arm test on arm architecture.
This adds that condition to the test.

gcc/testsuite/ChangeLog:

2019-02-07  Matthew Malcomson  <matthew.malcomson@arm.com>

	* gcc.dg/rtl/arm/ldrd-peepholes.c: Only run on arm

From-SVN: r268655
2019-02-07 16:54:54 +00:00
Eric Botcazou
f15542a4b7 * libgnarl/s-linux__sparc.ads (ETIMEDOUT): Set to correct value.
From-SVN: r268652
2019-02-07 16:28:40 +00:00
Andreas Krebbel
993f9e7d06 S/390: Fix the vec_xl / vec_xst style builtins
This patch fixes several problems with the vec_xl/vec_xst builtins:

- vec_xl/vec_xst needs to use the alignment of the scalar memory
  operand for the vector type reference. This is required to emit the
  proper vl/vst alignment hints.
- vec_xl / vec_xld2 / vec_xlw4 should accept const pointer source operands
- vec_xlw4 / vec_xstw4 needs to accept float memory operands

gcc/ChangeLog:

2019-02-07  Andreas Krebbel  <krebbel@linux.ibm.com>

	* config/s390/s390-builtin-types.def: Add new types.
	* config/s390/s390-builtins.def: (s390_vec_xl, s390_vec_xld2)
	(s390_vec_xlw4): Make the memory operand into a const pointer.
	(s390_vec_xld2, s390_vec_xlw4): Add a variant for single precision
	float.
	* config/s390/s390-c.c (s390_expand_overloaded_builtin): Generate
	a new vector type with the alignment of the scalar memory operand.

gcc/testsuite/ChangeLog:

2019-02-07  Andreas Krebbel  <krebbel@linux.ibm.com>

	* gcc.target/s390/zvector/xl-xst-align-1.c: New test.
	* gcc.target/s390/zvector/xl-xst-align-2.c: New test.

From-SVN: r268651
2019-02-07 15:53:38 +00:00
Matthew Malcomson
c272bbda1a [Patch] [arm] Fix 88714, Arm LDRD/STRD peepholes.
These peepholes match a pair of SImode loads or stores that can be
implemented with a single LDRD or STRD instruction.
When compiling for TARGET_ARM, these peepholes originally created a set
pattern in DI mode to be caught by movdi patterns.

This approach failed to take into account the possibility that the two
matched insns operated on memory with different aliasing information.
The peepholes lost the aliasing information on one of the insns, which
could then cause the scheduler to make an invalid transformation.

This patch changes the peepholes so they generate a PARALLEL expression
of the two relevant loads or stores, which means the aliasing
information of both is kept.  Such a PARALLEL pattern is what the
peepholes currently produce for TARGET_THUMB2.

In order to match these new insn patterns, we add two new define_insn's.  These
define_insn's use the same checks as the peepholes to find valid insns.

Note that the patterns now created by the peepholes for LDRD and STRD
are very similar to those created by the peepholes for LDM and STM.
Many patterns could be matched by the LDM and STM define_insns, which
means we rely on the order the define_insn patterns are defined in the
machine description, with those for LDRD/STRD defined before those for
LDM/STM.

The difference between the peepholes for LDRD/STRD and those for LDM/STM
are mainly that those for LDRD/STRD have some logic to ensure that the
two registers are consecutive and the first one is even.

Bootstrapped and regtested on arm-none-linux-gnu.
Demonstrated fix of bug 88714 by bootstrapping on armv7l.


gcc/ChangeLog:

2019-02-07  Matthew Malcomson  <matthew.malcomson@arm.com>
	    Jakub Jelinek  <jakub@redhat.com>

	PR bootstrap/88714
	* config/arm/arm-protos.h (valid_operands_ldrd_strd,
	arm_count_ldrdstrd_insns): New declarations.
	* config/arm/arm.c (mem_ok_for_ldrd_strd): Remove broken handling of
	MINUS.
	(valid_operands_ldrd_strd): New function.
	(arm_count_ldrdstrd_insns): New function.
	* config/arm/ldrdstrd.md: Change peepholes to generate PARALLEL SImode
	sets instead of single DImode set and define new insns to match this.

gcc/testsuite/ChangeLog:

2019-02-07  Matthew Malcomson  <matthew.malcomson@arm.com>
	    Jakub Jelinek  <jakub@redhat.com>

	PR bootstrap/88714
	* gcc.c-torture/execute/pr88714.c: New test.
	* gcc.dg/rtl/arm/ldrd-peepholes.c: New test.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>

From-SVN: r268644
2019-02-07 14:54:15 +00:00
Tamar Christina
5eb9ac1e27 AArch64: Fix initializer for array so it's a C initializer instead of C++.
This fixes a missing = that would cause the array initializer to be a C++
initializer instead of a C one, causing a warning when building with pre-C++11
standards compiler.

Committed under the GCC obvious rules.

gcc/ChangeLog:

	* config/aarch64/aarch64-builtins.c (aarch64_fcmla_lane_builtin_data):
	Make it a C initializer.

From-SVN: r268614
2019-02-07 11:05:22 +00:00
Tamar Christina
4fcb52c4ef Arm: Fix NEON REG to REG reload failures. (PR/target 88850)
We currently return cost 2 for NEON REG to REG moves, which would be incorrect
for 64 bit moves.  We currently don't have a pattern for this in the neon_move
alternatives because this is a bit of a special case.  We would almost never
want it to use this r -> r pattern unless it really has no choice.

As such we add a new neon r -> r move pattern but also hide it from being used
to determine register preferences and also disparage it during LRA.

gcc/ChangeLog:

	PR/target 88850
	* config/arm/neon.md (*neon_mov<mode>): Add r -> r case.

gcc/testsuite/ChangeLog:

	PR/target 88850
	* gcc.target/arm/pr88850.c: New test.

From-SVN: r268612
2019-02-07 10:05:57 +00:00