Vladimir Makarov [Thu, 20 Dec 2018 18:07:51 +0000 (18:07 +0000)]
re PR target/88457 (ICE: Max. number of generated reload insns per insn is achieved (90))
2018-12-20 Vladimir Makarov <vmakarov@redhat.com>
PR target/88457
* ira-color.c (fast_allocation): Choose the best cost hard reg.
2018-12-20 Vladimir Makarov <vmakarov@redhat.com>
PR target/88457
* ira-color.c (fast_allocation): Choose the best cost hard reg.
From-SVN: r267307
Jakub Jelinek [Thu, 20 Dec 2018 17:34:19 +0000 (18:34 +0100)]
re PR c++/88180 (ICE in vec<tree_node*, va_gc, vl_embed>::quick_push(tree_node* const&))
PR c++/88180
* parser.c (cp_parser_class_specifier_1): If
cp_parser_check_type_definition fails, skip default arguments, NSDMIs,
etc. like for erroneous template args.
* g++.dg/parse/pr88180.C: New test.
* g++.dg/pr85039-1.C: Don't expect diagnostics inside of the type
definition's NSDMIs.
From-SVN: r267306
Jakub Jelinek [Thu, 20 Dec 2018 17:31:05 +0000 (18:31 +0100)]
cp-tree.h (cp_fully_fold_init): Declare.
* cp-tree.h (cp_fully_fold_init): Declare.
* cp-gimplify.c (cp_fully_fold_init): New function.
* typeck2.c (split_nonconstant_init, store_init_value): Use it
instead of cp_fully_fold.
From-SVN: r267305
Richard Sandiford [Thu, 20 Dec 2018 16:34:31 +0000 (16:34 +0000)]
[AArch64][SVE] Add ABS support
For some reason we missed ABS out of the list of supported integer
operations when adding the SVE port initially.
2018-12-20 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/iterators.md (SVE_INT_UNARY, fp_int_op): Add abs.
(SVE_FP_UNARY): Sort.
gcc/testsuite/
* gcc.target/aarch64/pr64946.c: Force nosve.
* gcc.target/aarch64/ssadv16qi.c: Likewise.
* gcc.target/aarch64/usadv16qi.c: Likewise.
* gcc.target/aarch64/vect-abs-compile.c: Likewise.
* gcc.target/aarch64/sve/abs_1.c: New test.
From-SVN: r267304
Richard Sandiford [Thu, 20 Dec 2018 16:32:46 +0000 (16:32 +0000)]
[AArch64][SVE] Fix IFN_COND_FMLA movprfx alternative
This patch fixes a cut-&-pasto in the (match_dup 4) version of
"cond_<SVE_COND_FP_TERNARY:optab><SVE_F:mode>". (It's a shame
that there's so much cut-&-paste in these patterns, but it's hard
to avoid without more infrastructure.)
2018-12-20 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/aarch64/aarch64-sve.md (*cond_<optab><mode>_4): Use
sve_fmla_op rather than sve_fmad_op for the movprfx alternative.
gcc/testsuite/
* gcc.target/aarch64/sve/fmla_2.c: New test.
* gcc.target/aarch64/sve/fmla_2_run.c: Likewise
From-SVN: r267303
Martin Sebor [Thu, 20 Dec 2018 16:25:13 +0000 (16:25 +0000)]
PR tree-optimization/84053 - missing -Warray-bounds accessing a local array across inlined function boundaries
gcc/testsuite/ChangeLog:
* gcc.dg/Warray-bounds-36.c: New test.
From-SVN: r267302
David Malcolm [Thu, 20 Dec 2018 14:18:48 +0000 (14:18 +0000)]
-Wtautological-compare: fix comparison of macro expansions
gcc/c-family/ChangeLog:
PR c++/87504
* c-warn.c (get_outermost_macro_expansion): New function.
(spelled_the_same_p): Use it to unwind the macro expansions, and
compare the outermost macro in each nested expansion, rather than
the innermost.
gcc/testsuite/ChangeLog:
PR c++/87504
* c-c++-common/Wtautological-compare-8.c: New test.
From-SVN: r267299
Martin Jambor [Thu, 20 Dec 2018 14:14:22 +0000 (15:14 +0100)]
[PR 88214] Assert that ptr is a pointer
2018-12-20 Martin Jambor <mjambor@suse.cz>
PR ipa/88214
* tree-ssa-alias.c (ao_ref_init_from_ptr_and_size): Assert that
ptr is a pointer.
From-SVN: r267298
Jonathan Wakely [Thu, 20 Dec 2018 12:32:17 +0000 (12:32 +0000)]
Add missing test from previous commit
* testsuite/27_io/filesystem/directory_entry/lwg3171.cc: New test
(missed from previous commit).
From-SVN: r267297
Richard Biener [Thu, 20 Dec 2018 11:39:59 +0000 (11:39 +0000)]
re PR tree-optimization/84362 (Auto-vectorization regression when accessing member variable through getter/accessor)
2018-12-20 Richard Biener <rguenther@suse.de>
PR tree-optimization/84362
* tree-ssa-loop-im.c: Include alias.h, builtins.h and tree-dfa.h.
(struct im_mem_ref): add ref_canonical flag.
(struct mem_ref_hasher): Use ao_ref as compare_type.
(mem_ref_hasher::equal): Adjust and add variant comparing ao_ref
parts.
(mem_ref_alloc): Take ao_ref parameter, initialize ref_canonical
member.
(gather_mem_refs_stmt): Set up ao_ref early and do the lookup
using it. If we have non-equal refs canonicalize the one
in the hashtable used for insertion.
(tree_ssa_lim_initialize): Adjust.
* g++.dg/vect/pr84362.cc: New testcase.
From-SVN: r267296
Xiong Hu Luo [Thu, 20 Dec 2018 08:44:42 +0000 (08:44 +0000)]
fix typo.
From-SVN: r267294
Jakub Jelinek [Thu, 20 Dec 2018 07:58:02 +0000 (08:58 +0100)]
re PR target/88547 (missed optimization for vector comparisons)
PR target/88547
* config/i386/i386.c (ix86_expand_sse_movcc): For maskcmp, try to
emit vpmovm2? instruction perhaps after knot?. Reorganize code
so that it doesn't have to test !maskcmp in almost every conditional.
* gcc.target/i386/pr88547-1.c: New test.
From-SVN: r267293
Alan Modra [Thu, 20 Dec 2018 01:08:14 +0000 (11:38 +1030)]
[RS6000] Fix non-linux powerpc breakage
svn r266496, git commit
ab6b1bb456f broke non-linux powerpc builds
due to GNU_USER_DYNAMIC_LINKER being undefined.
* config/rs6000/sysv4.h (GNU_USER_DYNAMIC_LINKER): Define.
From-SVN: r267292
GCC Administrator [Thu, 20 Dec 2018 00:16:44 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r267291
Steven G. Kargl [Wed, 19 Dec 2018 22:31:25 +0000 (22:31 +0000)]
re PR fortran/87992 (ICE in resolve_fl_variable, at fortran/resolve.c:12314)
2018-12-19 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/87992
* resolve.c (resolve_fl_variable): Avoid a NULL pointer.
2018-12-19 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/87992
* gfortran.dg/pr87992.f90: New test.
From-SVN: r267288
Andreas Tobler [Wed, 19 Dec 2018 21:41:03 +0000 (22:41 +0100)]
config.gcc: Enable TARGET_DEFAULT_ASYNC_UNWIND_TABLES on aarch64*-*-freebsd*
2018-12-19 Andreas Tobler <andreast@gcc.gnu.org>
* config.gcc: Enable TARGET_DEFAULT_ASYNC_UNWIND_TABLES on
aarch64*-*-freebsd*
From-SVN: r267287
Uros Bizjak [Wed, 19 Dec 2018 20:44:59 +0000 (21:44 +0100)]
i386.md (SWI1248_AVX512BWDQ_64): Rename from SWI1248_AVX512BWDQ2_64.
* config/i386/i386.md (SWI1248_AVX512BWDQ_64): Rename from
SWI1248_AVX512BWDQ2_64. Unconditionally enable HImode.
(*cmp<mode>_ccz_1): Emit kortest instead of ktest insn.
Use SWI1248_AVX512BWDQ_64 mode iterator and enable only for
TARGET_AVX512F.
testsuite/ChangeLog:
* gcc.target/i386/avx512dq-pr82855.c: Update scan-assembler pattern.
From-SVN: r267286
Jonathan Wakely [Wed, 19 Dec 2018 20:16:57 +0000 (20:16 +0000)]
Fix grammar in libstdc++ ABI history documentation
* doc/xml/manual/abi.xml: Add missing word.
From-SVN: r267285
Thomas Preud'homme [Wed, 19 Dec 2018 17:34:18 +0000 (17:34 +0000)]
[ARM] Optimize executable size when using softfloat fmul/dmul
Softfloat single precision and double precision floating-point
multiplication routines in libgcc share some code with the
floating-point division of their corresponding precision. As the code
is structured now, this leads to *all* division code being pulled in an
executable in softfloat mode even if only multiplication is
performed.
This patch create some new LIB1ASMFUNCS macros to also build files with
just the multiplication and shared code as weak symbols. By putting
these earlier in the static library, they can then be picked up when
only multiplication is used and they are overriden by the global
definition in the existing file containing both multiplication and
division code when division is needed.
The patch also removes changes made to the FUNC_START and ARM_FUNC_START
macros in r218124 since the intent was to put multiplication and
division code into their own section in a later patch to achieve the
same size optimization. That approach relied on specific section layout
to ensure multiplication and division were not too far from the shared
bit of code in order to the branches to be within range. Due to lack of
guarantee regarding section layout, in particular with all the
possibility of linker scripts, this approach was chosen instead. This
patch keeps the two testcases that were posted by Tony Wang on the mailing
list to implement this approach and adds a new one.
2018-12-19 Thomas Preud'homme <thomas.preudhomme@linaro.org>
libgcc/
* /config/arm/lib1funcs.S (FUNC_START): Remove unused sp_section
parameter and corresponding code.
(ARM_FUNC_START): Likewise in both definitions.
Also update footer comment about condition that need to match with
gcc/config/arm/elf.h to also include libgcc/config/arm/t-arm.
* config/arm/ieee754-df.S (muldf3): Also build it if L_arm_muldf3 is
defined. Weakly define it in this case.
* config/arm/ieee754-sf.S (mulsf3): Likewise with L_arm_mulsf3.
* config/arm/t-elf (LIB1ASMFUNCS): Build _arm_muldf3.o and
_arm_mulsf3.o before muldiv versions if targeting Thumb-1 only. Add
comment to keep condition in sync with the one in
libgcc/config/arm/lib1funcs.S and gcc/config/arm/elf.h.
gcc/
* config/arm/elf.h: Update comment about condition that need to
match with libgcc/config/arm/lib1funcs.S to also include
libgcc/config/arm/t-arm.
* doc/sourcebuild.texi (output-exists, output-exists-not): Rename
subsubsection these directives are in to "Check for output files".
Move scan-symbol to that section and add to it new scan-symbol-not
directive.
2018-12-19 Tony Wang <tony.wang@arm.com>
Thomas Preud'homme <thomas.preudhomme@linaro.org>
gcc/testsuite/
* lib/lto.exp (lto-execute): Define output_file and testname_with_flags
to same value as execname.
(scan-symbol): Move and rename to ...
* lib/gcc-dg.exp (scan-symbol-common): This. Adapt into a
helper function returning true or false if a symbol is present.
(scan-symbol): New procedure.
(scan-symbol-not): Likewise.
* gcc.target/arm/size-optimization-ieee-1.c: New testcase.
* gcc.target/arm/size-optimization-ieee-2.c: Likewise.
* gcc.target/arm/size-optimization-ieee-3.c: Likewise.
From-SVN: r267282
Tom de Vries [Wed, 19 Dec 2018 17:16:10 +0000 (17:16 +0000)]
[nvptx] Add PTX_CTA_SIZE
2018-12-19 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (PTX_CTA_SIZE): Define.
From-SVN: r267281
Segher Boessenkool [Wed, 19 Dec 2018 16:22:47 +0000 (17:22 +0100)]
c++, asm: Do not handle any asm-qualifiers in top-level asm
Previously, "volatile" was allowed. Changing this simplifies the code,
makes things more regular, and makes the C and C++ frontends handle
this the same way.
cp/
* parser.c (cp_parser_asm_definition): Do not allow any asm qualifiers
on top-level asm.
testsuite/
* g++.dg/asm-qual-3.C: New testcase.
* gcc.dg/asm-qual-3.c: New testcase.
From-SVN: r267280
Segher Boessenkool [Wed, 19 Dec 2018 16:16:05 +0000 (17:16 +0100)]
c/c++, asm: Use nicer error for const and restrict
Not all qualifiers are asm qualifiers. We can talk about that in a
nicer way than just giving a generic parser error.
This also adds two testcases for C++, that previously were for C only.
c/
* c-parser.c (c_parser_asm_statement) <RID_CONST, RID_RESTRICT>: Give
a more specific error message (instead of just falling through).
cp/
* parser.c (cp_parser_asm_definition) <RID_CONST, RID_RESTRICT>: Give
a more specific error message (instead of just falling through).
testsuite/
* g++.dg/asm-qual-1.C: New testcase.
* g++.dg/asm-qual-2.C: New testcase.
* gcc.dg/asm-qual-1.c: Update.
From-SVN: r267279
Segher Boessenkool [Wed, 19 Dec 2018 16:12:17 +0000 (17:12 +0100)]
c/c++, asm: Use nicer error for duplicate asm qualifiers
Also as suggested by Jason.
c/
* c-parser.c (c_parser_asm_statement): Keep track of the location each
asm qualifier is first seen; use that to give nicer "duplicate asm
qualifier" messages. Delete 'quals" variable, instead pass the
"is_volatile_ flag to build_asm_stmt directly.
* c-tree.h (build_asm_stmt): Make the first arg bool instead of tree.
* c-typeck.c (build_asm_stmt): Ditto; adjust.
cp/
* parser.c (cp_parser_asm_definition): Rewrite the loop to work without
"done" boolean variable.
* parser.c (cp_parser_asm_definition): Keep track of the location each
asm qualifier is first seen; use that to give nicer "duplicate asm
qualifier" messages.
From-SVN: r267278
Segher Boessenkool [Wed, 19 Dec 2018 15:55:28 +0000 (16:55 +0100)]
c/c++, asm: Write the asm-qualifier loop without "done" boolean
As suggested by Jason.
c/
* c-parser.c (c_parser_asm_statement): Rewrite the loop to work without
"done" boolean variable.
cp/
* parser.c (cp_parser_asm_definition): Rewrite the loop to work without
"done" boolean variable.
From-SVN: r267277
David Malcolm [Wed, 19 Dec 2018 15:22:27 +0000 (15:22 +0000)]
C++: better locations for bogus initializations (PR c++/88375)
PR c++/88375 reports that errors relating to invalid conversions in
initializations are reported at unhelpfully vague locations, as in
e.g.:
enum struct a : int {
one, two
};
struct foo {
int e1, e2;
a e3;
} arr[] = {
{ 1, 2, a::one },
{ 3, a::two },
{ 4, 5, a::two }
};
for which g++ trunk emits the vague:
pr88375.cc:12:1: error: cannot convert 'a' to 'int' in initialization
12 | };
| ^
with the error at the final closing brace.
This patch uses location information for the initializers, converting the
above to:
pr88375.cc:10:11: error: cannot convert 'a' to 'int' in initialization
10 | { 3, a::two },
| ~~~^~~
| |
| a
highlighting which subexpression is problematic, and its type.
Ideally we'd also issue a note showing the field decl being initialized,
but that turned out to be more invasive.
gcc/cp/ChangeLog:
PR c++/88375
* typeck.c (convert_for_assignment): Capture location of rhs
before stripping, and if available. Use the location when
complaining about bad conversions, labelling it with the
rhstype if the location was present.
* typeck2.c (digest_init_r): Capture location of init before
stripping.
gcc/testsuite/ChangeLog:
PR c++/88375
* g++.dg/init/pr88375-2.C: New test.
* g++.dg/init/pr88375.C: New test.
From-SVN: r267276
Tom de Vries [Wed, 19 Dec 2018 15:20:06 +0000 (15:20 +0000)]
[openacc] Make oacc_fn_attrib_level external
Expose oacc_fn_attrib_level to be used in backends.
2018-12-19 Tom de Vries <tdevries@suse.de>
* omp-offload.c (oacc_fn_attrib_level): Remove static.
* omp-offload.h (oacc_fn_attrib_level): Declare.
From-SVN: r267275
Tom de Vries [Wed, 19 Dec 2018 15:19:56 +0000 (15:19 +0000)]
[openacc] Add oacc_get_default_dim
Expose oacc_default_dims to backends.
2018-12-19 Tom de Vries <tdevries@suse.de>
* omp-offload.c (oacc_get_default_dim): New function.
* omp-offload.h (oacc_get_default_dim): Declare.
From-SVN: r267274
David Malcolm [Wed, 19 Dec 2018 15:15:42 +0000 (15:15 +0000)]
C++: improvements to binary operator diagnostics (PR c++/87504)
The C frontend is able (where expression locations are available) to print
problems with binary operators in 3-location form, labelling the types of
the expressions:
arg_0 op arg_1
~~~~~ ^~ ~~~~~
| |
| arg1 type
arg0 type
The C++ frontend currently just shows the combined location:
arg_0 op arg_1
~~~~~~^~~~~~~~
and fails to highlight where the subexpressions are, or their types.
This patch introduces a op_location_t struct for handling the above
operator-location vs combined-location split, and a new
class binary_op_rich_location for displaying the above, so that the
C++ frontend is able to use the more detailed 3-location form for
type mismatches in binary operators, and for -Wtautological-compare
(where types are not displayed). Both forms can be seen in this
example:
bad-binary-ops.C:69:20: error: no match for 'operator&&' (operand types are
's' and 't')
69 | return ns_4::foo && ns_4::inner::bar;
| ~~~~~~~~~ ^~ ~~~~~~~~~~~~~~~~
| | |
| s t
bad-binary-ops.C:69:20: note: candidate: 'operator&&(bool, bool)' <built-in>
69 | return ns_4::foo && ns_4::inner::bar;
| ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
The patch also allows for some uses of macros in
-Wtautological-compare, where both sides of the comparison have
been spelled the same way, e.g.:
Wtautological-compare-ranges.c:23:11: warning: self-comparison always
evaluates to true [-Wtautological-compare]
23 | if (FOO == FOO);
| ^~
gcc/c-family/ChangeLog:
PR c++/87504
* c-common.h (warn_tautological_cmp): Convert 1st param from
location_t to const op_location_t &.
* c-warn.c (find_array_ref_with_const_idx_r): Call fold_for_warn
when testing for INTEGER_CST.
(warn_tautological_bitwise_comparison): Convert 1st param from
location_t to const op_location_t &; use it to build a
binary_op_rich_location, and use this.
(spelled_the_same_p): New function.
(warn_tautological_cmp): Convert 1st param from location_t to
const op_location_t &. Warn for macro expansions if
spelled_the_same_p. Use binary_op_rich_location.
gcc/c/ChangeLog:
PR c++/87504
* c-typeck.c (class maybe_range_label_for_tree_type_mismatch):
Move from here to gcc-rich-location.h and gcc-rich-location.c.
(build_binary_op): Use struct op_location_t and
class binary_op_rich_location.
gcc/cp/ChangeLog:
PR c++/87504
* call.c (op_error): Convert 1st param from location_t to
const op_location_t &. Use binary_op_rich_location for binary
ops.
(build_conditional_expr_1): Convert 1st param from location_t to
const op_location_t &.
(build_conditional_expr): Likewise.
(build_new_op_1): Likewise.
(build_new_op): Likewise.
* cp-tree.h (build_conditional_expr): Likewise.
(build_new_op): Likewise.
(build_x_binary_op): Likewise.
(cp_build_binary_op): Likewise.
* parser.c (cp_parser_primary_expression): Build a location
for id-expression nodes.
(cp_parser_binary_expression): Use an op_location_t when
calling build_x_binary_op.
(cp_parser_operator): Build a location for user-defined literals.
* typeck.c (build_x_binary_op): Convert 1st param from location_t
to const op_location_t &.
(cp_build_binary_op): Likewise. Use binary_op_rich_location.
gcc/ChangeLog:
PR c++/87504
* gcc-rich-location.c
(maybe_range_label_for_tree_type_mismatch::get_text): Move here from
c/c-typeck.c.
(binary_op_rich_location::binary_op_rich_location): New ctor.
(binary_op_rich_location::use_operator_loc_p): New function.
* gcc-rich-location.h
(class maybe_range_label_for_tree_type_mismatch)): Move here from
c/c-typeck.c.
(struct op_location_t): New forward decl.
(class binary_op_rich_location): New class.
* tree.h (struct op_location_t): New struct.
gcc/testsuite/ChangeLog:
* c-c++-common/Wtautological-compare-ranges.c: New test.
* g++.dg/cpp0x/pr51420.C: Add -fdiagnostics-show-caret and update
expected output.
* g++.dg/diagnostic/bad-binary-ops.C: Update expected output from
1-location form to 3-location form, with labelling of ranges with
types. Add examples of id-expression nodes with namespaces.
* g++.dg/diagnostic/param-type-mismatch-2.C: Likewise.
From-SVN: r267273
David Malcolm [Wed, 19 Dec 2018 15:08:21 +0000 (15:08 +0000)]
C++: more location wrapper nodes (PR c++/43064, PR c++/43486)
This is v6 of the patch, as posted to:
https://gcc.gnu.org/ml/gcc-patches/2018-12/msg01331.html
The C++ frontend gained various location wrapper nodes in r256448 (GCC 8).
That patch:
https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00799.html
added wrapper nodes around all nodes with !CAN_HAVE_LOCATION_P for:
* arguments at callsites, and for
* typeid, alignof, sizeof, and offsetof.
This is a followup to that patch, adding many more location wrappers
to the C++ frontend. It adds location wrappers for nodes with
!CAN_HAVE_LOCATION_P to:
* all literal nodes (in cp_parser_primary_expression)
* all id-expression nodes (in finish_id_expression), except within a
decltype.
* all mem-initializer nodes within a mem-initializer-list
(in cp_parser_mem_initializer)
However, the patch also adds some suppressions: regions in the parser
for which wrapper nodes will not be created:
* within a template-parameter-list or template-argument-list (in
cp_parser_template_parameter_list and cp_parser_template_argument_list
respectively), to avoid encoding the spelling location of the nodes
in types. For example, "array<10>" and "array<10>" are the same type,
despite the fact that the two different "10" tokens are spelled in
different locations in the source.
* within a gnu-style attribute (none of are handlers are set up to cope
with location wrappers yet)
* within various OpenMP clauses
The patch enables various improvements to locations for bad
initializations, for -Wchar-subscripts, and enables various other
improvements in the followup patch.
For example, given the followup buggy mem-initializer:
class X {
X() : bad(42),
good(42)
{ }
void* bad;
int good;
};
previously, our diagnostic was on the final close parenthesis of the
mem-initializer-list, leaving it unclear where the problem is:
t.cc: In constructor 'X::X()':
t.cc:3:16: error: invalid conversion from 'int' to 'void*' [-fpermissive]
3 | good(42)
| ^
| |
| int
whereas with the patch we highlight which expression is bogus:
t.cc: In constructor 'X::X()':
t.cc:2:13: error: invalid conversion from 'int' to 'void*' [-fpermissive]
2 | X() : bad(42),
| ^~
| |
| int
Similarly, the diagnostic for this bogus initialization:
i.cc:1:44: error: initializer-string for array of chars is too long [-fpermissive]
1 | char test[3][4] = { "ok", "too long", "ok" };
| ^
is improved by the patch so that it indicates which string is too long:
i.cc:1:27: error: initializer-string for array of chars is too long [-fpermissive]
1 | char test[3][4] = { "ok", "too long", "ok" };
| ^~~~~~~~~~
gcc/c-family/ChangeLog:
PR c++/43064
PR c++/43486
* c-common.c (unsafe_conversion_p): Fold any location wrapper.
(verify_tree): Handle location wrappers.
(c_common_truthvalue_conversion): Strip any location wrapper.
Handle CONST_DECL.
(fold_offsetof): Strip any location wrapper.
(complete_array_type): Likewise for initial_value.
(convert_vector_to_array_for_subscript): Call fold_for_warn on the
index before checking for INTEGER_CST.
* c-pretty-print.c (c_pretty_printer::primary_expression): Don't
print parentheses around location wrappers.
* c-warn.c (warn_logical_operator): Call fold_for_warn on op_right
before checking for INTEGER_CST.
(warn_tautological_bitwise_comparison): Call
tree_strip_any_location_wrapper on lhs, rhs, and bitop's operand
before checking for INTEGER_CST.
(readonly_error): Strip any location wrapper.
(warn_array_subscript_with_type_char): Strip location wrappers
before checking for INTEGER_CST. Use the location of the index if
available.
gcc/ChangeLog:
PR c++/43064
PR c++/43486
* convert.c: Include "selftest.h".
(preserve_any_location_wrapper): New function.
(convert_to_pointer_maybe_fold): Update to handle location
wrappers.
(convert_to_real_maybe_fold): Likewise.
(convert_to_integer_1): Strip expr when using TREE_OVERFLOW.
Handle location wrappers when checking for INTEGER_CST.
(convert_to_integer_maybe_fold): Update to handle location
wrappers.
(convert_to_complex_maybe_fold): Likewise.
(selftest::test_convert_to_integer_maybe_fold): New functions.
(selftest::convert_c_tests): New function.
* convert.h (preserve_any_location_wrapper): New decl.
* fold-const.c (size_binop_loc): Strip location wrappers when
using TREE_OVERFLOW.
(operand_equal_p): Strip any location wrappers.
(integer_valued_real_p): Strip any location wrapper.
* selftest-run-tests.c (selftest::run_tests): Call
selftest::convert_c_tests.
* selftest.h (selftest::convert_c_tests): New decl.
* tree.c (build_complex): Assert that REAL and IMAG are constants.
(integer_zerop): Look through location wrappers.
(integer_onep): Likewise.
(integer_each_onep): Likewise.
(integer_all_onesp): Likewise.
(integer_minus_onep): Likewise.
(integer_pow2p): Likewise.
(integer_nonzerop): Likewise.
(integer_truep): Likewise.
(fixed_zerop): Likewise.
(real_zerop): Likewise.
(real_onep): Likewise.
(real_minus_onep): Likewise.
(tree_int_cst_equal): Likewise.
(simple_cst_equal): Treat location wrappers with non-equal source
locations as being unequal.
(uniform_integer_cst_p): Look through location wrappers.
(maybe_wrap_with_location): Don't create wrappers if any
auto_suppress_location_wrappers are active.
(suppress_location_wrappers): New variable.
(selftest::test_predicates): New test.
(selftest::tree_c_tests): Call it.
* tree.h (CONSTANT_CLASS_OR_WRAPPER_P): New macro.
(suppress_location_wrappers): New decl.
(class auto_suppress_location_wrappers): New class.
gcc/cp/ChangeLog:
PR c++/43064
PR c++/43486
* call.c (build_conditional_expr_1): Strip location wrappers when
checking for CONST_DECL.
(conversion_null_warnings): Use location of "expr" if available.
* class.c (fixed_type_or_null): Handle location wrappers.
* constexpr.c (potential_constant_expression_1): Likewise.
* cvt.c (ignore_overflows): Strip location wrappers when
checking for INTEGER_CST, and re-wrap the result if present.
(ocp_convert): Call fold_for_warn before checking for INTEGER_CST.
* decl.c (reshape_init_r): Strip any location wrapper.
(undeduced_auto_decl): Likewise.
* expr.c (mark_discarded_use): Likewise for expr.
* init.c (build_aggr_init): Likewise before checking init for
DECL_P.
(warn_placement_new_too_small): Call fold_for_warn on adj before
checking for CONSTANT_CLASS_P, and on nelts. Strip any location
wrapper from op0 and on oper before checking for VAR_P.
* parser.c (cp_parser_primary_expression): Call
maybe_add_location_wrapper on numeric and string literals.
(cp_parser_postfix_expression): Strip any location wrapper when
checking for DECL_IS_BUILTIN_CONSTANT_P.
(cp_parser_unary_expression): Ensure that folding of NEGATE_EXPR
around a constant happens in the presence of location wrappers and
returns a wrapped result.
(cp_parser_has_attribute_expression): Strip any location wrapper
from "oper".
(cp_parser_binary_expression): Strip any location wrapper when
checking for DECL_P on the lhs.
(cp_parser_decltype): Strip any location wrapper from result of
cp_parser_decltype_expr.
(cp_parser_mem_initializer): Add location wrappers to the
parenthesized expression list.
(cp_parser_template_parameter_list): Don't create wrapper nodes
within a template-parameter-list.
(cp_parser_template_argument_list): Don't create wrapper nodes
within a template-argument-list.
(cp_parser_parameter_declaration): Strip location wrappers from
default arguments.
(cp_parser_gnu_attribute_list): Don't create wrapper nodes.
(cp_parser_std_attribute_spec_seq): Likewise.
(cp_parser_omp_all_clauses): Don't create wrapper nodes within
OpenMP clauses.
(cp_parser_omp_for_loop): Likewise.
(cp_parser_omp_declare_reduction_exprs): Likewise.
* pt.c (convert_nontype_argument_function): Strip location
wrappers from fn_no_ptr before checking for FUNCTION_DECL.
(tsubst_default_argument): Move note about which callsite led to
instantiation to after the check_default_argument call.
(do_auto_deduction): Likewise from init before checking for
DECL_P.
* semantics.c (force_paren_expr): Likewise from expr before
checking for DECL_P.
(finish_parenthesized_expr): Likewise from expr before
checking for STRING_CST.
(perform_koenig_lookup): Likewise from fn.
(finish_call_expr): Likewise.
(finish_id_expression): Rename to...
(finish_id_expression_1): ...this, calling
maybe_add_location_wrapper on the result.
(capture_decltype): Use lookup_name_real rather than value_member
when looking up decl within the capture-list.
* tree.c (cp_stabilize_reference): Strip any location wrapper.
(builtin_valid_in_constant_expr_p): Likewise.
(strip_typedefs_expr): Strip any location wrapper before checking
for decls or constants.
(is_overloaded_fn): Likewise.
(maybe_get_fns): Likewise.
(selftest::test_lvalue_kind): Verify lvalue_p.
* typeck.c (cxx_sizeof_expr): Strip any location wrapper.
(cxx_alignof_expr): Likewise.
(is_bitfield_expr_with_lowered_type): Handle location wrappers.
(cp_build_array_ref): Call maybe_constant_value on "idx".
(cp_build_binary_op): Strip location wrapper from first_arg before
checking for PARM_DECL. Likewise for op1 before checking for
INTEGER_CST in two places. Likewise for orig_op0 and orig_op1
when checking for STRING_CST.
(cp_build_addr_expr_1): Likewise for arg when checking for
FUNCTION_DECL.
(cp_build_modify_expr): Likewise for newrhs when checking for
STRING_CST.
(convert_for_assignment): Don't strip location wrappers when
stripping NON_LVALUE_EXPR.
(maybe_warn_about_returning_address_of_local): Strip location
wrapper from whats_returned before checking for DECL_P.
(can_do_nrvo_p): Strip location wrapper from retval.
(treat_lvalue_as_rvalue_p): Likewise.
(check_return_expr): Likewise.
* typeck2.c (cxx_incomplete_type_diagnostic): Strip location
wrapper from value before checking for VAR_P or PARM_DECL.
(digest_init_r): Strip location wrapper from init. When
copying "init", also copy the wrapped node.
gcc/objc/ChangeLog:
PR c++/43064
PR c++/43486
* objc-act.c (objc_maybe_build_component_ref): Strip any location
wrapper before checking for UOBJC_SUPER_decl and self_decl.
(objc_finish_message_expr): Strip any location wrapper.
(gen_declaration): Strip location wrappers from "w".
gcc/testsuite/ChangeLog:
PR c++/43064
PR c++/43486
* c-c++-common/pr51712.c (valid2): Mark xfail as passing on C++.
* g++.dg/cpp0x/constexpr-47969.C: Update column of expected error.
* g++.dg/cpp0x/constexpr-ex2.C: Likewise.
* g++.dg/cpp0x/scoped_enum2.C: Likewise.
* g++.dg/cpp1z/decomp48.C: Update expected location of warning
for named local variables to use that of the local variable.
* g++.dg/ext/vla1.C: Update column.
* g++.dg/init/array43.C: Update expected column to be that of the
initializer.
* g++.dg/init/initializer-string-too-long.C: New test.
* g++.dg/init/new44.C: Add "-ftrack-macro-expansion=0".
* g++.dg/init/pr43064-1.C: New test.
* g++.dg/init/pr43064-2.C: New test.
* g++.dg/init/pr43064-3.C: New test.
* g++.dg/other/fold1.C: Update column of expected error.
* g++.dg/parse/crash36.C: Likewise.
* g++.dg/plugin/diagnostic-test-expressions-1.C: Add negative
integer and float expressions.
* g++.dg/template/defarg6.C: Move expected error to the default
argument; add expected message about where instantiated.
* g++.dg/wrappers/Wparentheses.C: New test.
* g++.old-deja/g++.bugs/900402_02.C: Update column of expected
error.
From-SVN: r267272
Paul A. Clarke [Wed, 19 Dec 2018 15:06:00 +0000 (15:06 +0000)]
[rs6000] Fix x86 SSSE3 compatibility implementations and testcases
This patch is the analog to r266868-r266870, but for SSSE3.
The SSSE3 tests had been inadvertently made to PASS without actually running
the test code. Actually running the code turned up some previously undetected
issues.
This patch fixes some issues in the implementations, fixes up the tests
to use a union for the test data, which avoids strict aliasing issues,
and enables the tests to actually run (by removing a dependency on
__BUILTIN_CPU_SUPPORTS).
Also, there's a fairly insignificant change in the testcases that walk
through the data as pairs of vectors from:
[0] and [1]
[2] and [3]
...
[n-4] and [n-3]
[n-2] and [n-1]
to:
[0] and [1]
[1] and [2]
...
[n-3] and [n-2]
[n-2] and [n-1]
Since the testcases compute the correct answers based on the input, no
other changes were necessary to effect the change.
2018-12-19 Paul A. Clarke <pc@us.ibm.com>
[gcc]
* config/rs6000/tmmintrin.h (_mm_hadds_epi16): Vector lanes swapped.
(_mm_hsub_epi32): Likewise.
(_mm_shuffle_epi8): Fix reversed interpretation of parameters.
(_mm_shuffle_pi8): Likewise.
(_mm_addubs_pi16): Likewise.
[gcc/testsuite]
* gcc.target/powerpc/ssse3-check.h: Enable tests to run.
* gcc.target/powerpc/ssse3-pabsb.c: Code fixes for strict aliasing
issues.
* gcc.target/powerpc/ssse3-pabsd.c: Likewise.
* gcc.target/powerpc/ssse3-palignr.c: Likewise.
* gcc.target/powerpc/ssse3-phaddd.c: Likewise.
* gcc.target/powerpc/ssse3-phaddsw.c: Likewise.
* gcc.target/powerpc/ssse3-phaddw.c: Likewise.
* gcc.target/powerpc/ssse3-phsubd.c: Likewise.
* gcc.target/powerpc/ssse3-phsubw.c: Likewise.
* gcc.target/powerpc/ssse3-pmulhrsw.c: Likewise.
* gcc.target/powerpc/ssse3-pshufb.c: Likewise.
* gcc.target/powerpc/ssse3-psignb.c: Likewise.
* gcc.target/powerpc/ssse3-psignd.c: Likewise.
* gcc.target/powerpc/ssse3-psignw.c: Likewise.
* gcc.target/powerpc/ssse3-vals.h: Provide input data as a union.
From-SVN: r267271
Thomas Preud'homme [Wed, 19 Dec 2018 15:01:41 +0000 (15:01 +0000)]
[ARM] Do softfloat when -mfpu set, -mfloat-abi=softfp
FP instructions are only enabled for TARGET_32BIT and TARGET_HARD_FLOAT
but GCC only gives an error when TARGET_HARD_FLOAT is true and -mfpu is
not set. Among other things, it makes some of the cmse tests (eg.
gcc.target/arm/cmse/baseline/softfp.c) fail when targeting
-march=armv8-m.base -mcmse -mfpu=<something> -mfloat-abi=softfp. This
commit adds an extra check for TARGET_32BIT to TARGET_HARD_FLOAT such
that it is false on TARGET_THUMB1 targets even when a FPU is specified.
2018-12-19 thomas Preud'homme <thomas.preudhomme@linaro.org>
gcc/
* config/arm/arm.h (TARGET_HARD_FLOAT): Restrict to TARGET_32BIT
targets.
* config/arm/arm.c (output_return_instruction): Only check
TARGET_HARD_FLOAT to decide whether FP instructions are available.
gcc/testsuite/
* gcc.target/arm/cmse/baseline/softfp.c: Force an FPU.
From-SVN: r267270
Tom de Vries [Wed, 19 Dec 2018 14:20:54 +0000 (14:20 +0000)]
[nvptx] Commit passing pr85381-*.c test-cases
Add pr85381*.c test-cases that are already passing without the fix for PR85381.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-19 Tom de Vries <tdevries@suse.de>
* testsuite/libgomp.oacc-c-c++-common/pr85381-2.c: New test.
* testsuite/libgomp.oacc-c-c++-common/pr85381-3.c: New test.
* testsuite/libgomp.oacc-c-c++-common/pr85381-4.c: New test.
From-SVN: r267268
Tom de Vries [Wed, 19 Dec 2018 14:20:44 +0000 (14:20 +0000)]
[nvptx, libgomp] Move rtl-dump test-cases to libgomp
The goacc.exp test-cases nvptx-merged-loop.c and nvptx-sese-1.c are failing
during linking due to missing libgomp.spec.
Move them to the libgomp testsuite.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-19 Tom de Vries <tdevries@suse.de>
* gcc.dg/goacc/nvptx-merged-loop.c: Move to
libgomp/testsuite/libgomp.oacc-c-c++-common.
* gcc.dg/goacc/nvptx-sese-1.c: Same.
* testsuite/lib/libgomp.exp: Add load_lib of scanoffloadrtl.exp.
* testsuite/libgomp.oacc-c-c++-common/nvptx-merged-loop.c: Move from
gcc/testsuite/gcc.dg/goacc.
* testsuite/libgomp.oacc-c-c++-common/nvptx-sese-1.c: Same.
From-SVN: r267267
Tom de Vries [Wed, 19 Dec 2018 14:20:33 +0000 (14:20 +0000)]
[testsuite] Add scan-offload-rtl-dump
Add scan-offload-rtl-dump, similar to scan-offload-tree-dump.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-19 Tom de Vries <tom@codesourcery.com>
* lib/scanoffloadrtl.exp: New file.
* gcc.dg-selftests/dg-final.exp (dg_final_directive_check_num_args): Add
offload-rtl.
* doc/sourcebuild.texi (Commands for use in dg-final, Scan optimization
dump files): Add offload-rtl.
From-SVN: r267266
Segher Boessenkool [Wed, 19 Dec 2018 13:54:08 +0000 (14:54 +0100)]
Restrict a VSX extract to TARGET_POWERPC64 (PR88213)
This pattern optimises a scalar extract from a vector loaded from
memory to be just a scalar load from memory. But to do a 64-bit
integer load you need 64-bit integer registers, which needs
TARGET_POWERPC64.
PR target/88213
* config/rs6000/vsx.md (*vsx_extract_<P:mode>_<VSX_D:mode>_load):
Require TARGET_POWERPC64.
From-SVN: r267263
Richard Biener [Wed, 19 Dec 2018 11:10:08 +0000 (11:10 +0000)]
re PR tree-optimization/88533 (Higher performance penalty of array-bounds checking for sparse-matrix vector multiply)
2018-12-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/88533
Revert
2018-04-30 Richard Biener <rguenther@suse.de>
PR tree-optimization/28364
PR tree-optimization/85275
* tree-ssa-loop-ch.c (ch_base::copy_headers): Stop after
copying first exit test.
* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Adjust.
* tree-ssa-loop-ch.c: Include tree-phinodes.h and
ssa-iterators.h.
(should_duplicate_loop_header_p): Track whether stmt compute
loop invariants or values based on IVs. Apart from the
original loop header only duplicate blocks with exit tests
that are based on IVs or invariants.
* gcc.dg/tree-ssa/copy-headers-6.c: New testcase.
* gcc.dg/tree-ssa/copy-headers-7.c: Likewise.
* gcc.dg/tree-ssa/ivopt_mult_1.c: Un-XFAIL.
* gcc.dg/tree-ssa/ivopt_mult_2.c: Likewise.
From-SVN: r267262
Tom de Vries [Wed, 19 Dec 2018 10:17:31 +0000 (10:17 +0000)]
[nvptx] Use MAX, MIN, ROUND_UP macros
Use MAX, MIN, and ROUND_UP macros to simplify code.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-19 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (nvptx_gen_shared_bcast, shared_prop_gen)
(nvptx_goacc_expand_accel_var): Use MAX and ROUND_UP.
(nvptx_assemble_value, nvptx_output_skip): Use MIN.
(nvptx_shared_propagate, nvptx_single, nvptx_expand_shared_addr): Use
MAX.
From-SVN: r267261
Tom de Vries [Wed, 19 Dec 2018 10:17:21 +0000 (10:17 +0000)]
[nvptx] Make nvptx state propagation function names more generic
Rename state propagation functions to avoid worker/vector terminology.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-19 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (nvptx_gen_wcast): Rename as
nvptx_gen_warp_bcast.
(nvptx_gen_wcast): Rename to nvptx_gen_shared_bcast, add bool
vector argument, and update call to nvptx_gen_shared_bcast.
(propagator_fn): Add bool argument.
(nvptx_propagate): New bool argument, pass bool argument to fn.
(vprop_gen): Rename to warp_prop_gen, update call to
nvptx_gen_warp_bcast.
(nvptx_vpropagate): Rename to nvptx_warp_propagate, update call to
nvptx_propagate.
(wprop_gen): Rename to shared_prop_gen, update call to
nvptx_gen_shared_bcast.
(nvptx_wpropagate): Rename to nvptx_shared_propagate, update call
to nvptx_propagate.
(nvptx_wsync): Rename to nvptx_cta_sync.
(nvptx_single): Update calls to nvptx_gen_warp_bcast,
nvptx_gen_shared_bcast and nvptx_cta_sync.
(nvptx_process_pars): Likewise.
(write_worker_buffer): Rename as write_shared_buffer.
(nvptx_file_end): Update calls to write_shared_buffer.
(nvptx_expand_worker_addr): Rename as nvptx_expand_shared_addr.
(nvptx_expand_builtin): Update call to nvptx_expand_shared_addr.
(nvptx_get_worker_red_addr): Rename as nvptx_get_shared_red_addr.
(nvptx_goacc_reduction_setup): Update call to
nvptx_get_shared_red_addr.
(nvptx_goacc_reduction_fini): Likewise.
(nvptx_goacc_reduction_teardown): Likewise.
From-SVN: r267260
Tom de Vries [Wed, 19 Dec 2018 10:17:11 +0000 (10:17 +0000)]
[nvptx] Rename worker_bcast variables to oacc_bcast
Rename worker_bcast variables to oacc_bcast, avoiding worker terminology.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-19 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (worker_bcast_size): Rename as
oacc_bcast_size.
(worker_bcast_align): Rename as oacc_bcast_align.
(worker_bcast_sym): Rename as oacc_bcast_sym.
(nvptx_option_override): Update usage of oacc_bcast_*.
(struct wcast_data_t): Rename as broadcast_data_t.
(nvptx_gen_wcast): Update type of data argument and usage of
oacc_bcast_align.
(wprop_gen): Update type of data_ and usage of oacc_bcast_align.
(nvptx_wpropagate): Update type of data and usage of
oacc_bcast_{sym,size}.
(nvptx_single): Update type of data and usage of oacc_bcast_size.
(nvptx_file_end): Update usage of oacc_bcast_{sym,align,size}.
From-SVN: r267259
Tom de Vries [Wed, 19 Dec 2018 10:17:01 +0000 (10:17 +0000)]
[nvptx] Generalize bar.sync instruction
Allow the logical barrier operand of nvptx_barsync to be a register, and add a
thread count operand.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-19 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.md (nvptx_barsync): Add and handle operand.
* config/nvptx/nvptx.c (nvptx_wsync): Update call to gen_nvptx_barsync.
From-SVN: r267258
Tom de Vries [Wed, 19 Dec 2018 10:16:51 +0000 (10:16 +0000)]
[nvptx] Only use one logical barrier resource
For openacc loops, we generate this style of code:
...
@%r41 bra.uni $L5;
@%r40 bra $L6;
mov.u64 %r32, %ar0;
cvta.shared.u64 %r39, __worker_bcast;
st.u64 [%r39], %r32;
$L6:
$L5:
bar.sync 0;
@%r40 bra $L4;
cvta.shared.u64 %r38, __worker_bcast;
ld.u64 %r32, [%r38];
...
$L4:
bar.sync 1;
...
The first barrier is there to ensure that no thread reads the broadcast buffer
before it's written. The second barrier is there to ensure that no thread
overwrites the broadcast buffer before all threads have read it (as well as
implementing the obligatory synchronization after a worker loop).
We've been using the logical barrier resources '0' and '1' for these two
barriers, but there's no reason why we can't use the same one.
Use logical barrier resource '0' for both barriers, making the openacc
implementation claim less resources.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-19 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (nvptx_single): Always pass false to
nvptx_wsync.
(nvptx_process_pars): Likewise.
From-SVN: r267257
Tom de Vries [Wed, 19 Dec 2018 10:16:41 +0000 (10:16 +0000)]
[nvptx] Use TARGET_SET_CURRENT_FUNCTION
Implement TARGET_SET_CURRENT_FUNCTION for nvptx. This gives us a place to
add initialization or reset actions that need to be executed on a per-function
basis.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-19 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (nvptx_previous_fndecl): Declare.
(nvptx_set_current_function): New function.
(TARGET_SET_CURRENT_FUNCTION): Define.
From-SVN: r267256
Shaokun Zhang [Wed, 19 Dec 2018 10:08:50 +0000 (10:08 +0000)]
[aarch64] Correct architecture for tsv110.
For HiSilicon's tsv110 cpu core, it supports some v8_4A features, but
some mandatory features are not implemented.
2018-12-19 Shaokun Zhang <zhangshaokun@hisilicon.com>
* config/aarch64/aarch64-cores.def (tsv110): Fix architecture. This
part is really Armv8.2 with some permitted Armv8.4 extensions.
From-SVN: r267255
Jakub Jelinek [Wed, 19 Dec 2018 08:31:16 +0000 (09:31 +0100)]
re PR target/88541 (VPCLMULQDQ 256-bit inline function unavailable with optimization but without enabled AVX512VL support)
PR target/88541
* config/i386/vpclmulqdqintrin.h (_mm256_clmulepi64_epi128): Enable
for -mavx -mvpclmulqdq rather than just for -mavx512vl -mvpclmulqdq.
* gcc.target/i386/avx-vpclmulqdq-1.c: New test.
From-SVN: r267254
Jakub Jelinek [Wed, 19 Dec 2018 08:11:40 +0000 (09:11 +0100)]
re PR c++/87934 (struct with NSDMI of enum makes initialization a non-constant expression)
PR c++/87934
* constexpr.c (cxx_eval_constant_expression) <case CONSTRUCTOR>: Do
re-process TREE_CONSTANT CONSTRUCTORs if they aren't reduced constant
expressions.
* g++.dg/cpp0x/constexpr-87934.C: New test.
From-SVN: r267253
Alexandre Oliva [Wed, 19 Dec 2018 06:51:41 +0000 (06:51 +0000)]
[PR86153] simplify more overflow tests in VRP
PR 86153 was originally filed when changes to the C++11's
implementation of vector resize(size_type) limited inlining that were
required for testsuite/g++.dg/pr83239.C to verify that we did not
issue an undesired warning.
That was worked by increasing the limit for inlining, but that in turn
caused the C++98 implementation of vector resize, that is
significantly different, to also be fully inlined, and that happened
to issue the very warnings the test was meant to verify we did NOT
issue.
The reason we issued the warnings was that we failed to optimize out
some parts of _M_fill_insert, used by the C++98 version of vector
resize, although the call of _M_fill_insert was guarded by a test that
could never pass: test testcase only calls resize when the vector size
is >= 3, to decrement the size by two. The limitation we hit in VRP
was that the compared values could pass as an overflow test, if the
vector size was 0 or 1 (we knew it wasn't), but even with dynamic
ranges we failed to decide that the test result could be determined at
compile time, even though after the test we introduced ASSERT_EXPRs
that required a condition known to be false from earlier ones.
I pondered turning ASSERT_EXPRs that show impossible conditions into
traps, to enable subsequent instructions to be optimized, but I ended
up finding an earlier spot in which an overflow test that would have
introduced the impossible ASSERT_EXPR can have its result deduced from
earlier known ranges and resolved to the other path.
Although such overflow tests could be uniformly simplified to compares
against a constant, the original code would only perform such
simplifications when the test could be resolved to an equality test
against zero. I've thus avoided introducing compares against other
constants, and instead added code that will only simplify overflow
tests that weren't simplified before when the condition can be
evaluated at compile time.
for gcc/ChangeLog
PR testsuite/86153
PR middle-end/83239
* vr-values.c
(vr_values::vrp_evaluate_conditional_warnv_with_ops): Extend
simplification of overflow tests to cover cases in which we
can determine the result of the comparison.
for gcc/testsuite/ChangeLog
PR testsuite/86153
PR middle-end/83239
* gcc.dg/vrp-overflow-1.c: New.
From-SVN: r267252
Alexandre Oliva [Wed, 19 Dec 2018 06:51:30 +0000 (06:51 +0000)]
[PR87012] canonicalize ref type for tmpl arg
When binding an object to a template parameter of reference type, we
take the address of the object and dereference that address. The type
of the address may still carry (template) typedefs, but
verify_unstripped_args_1 rejects such typedefs other than in the top
level of template arguments.
Canonicalizing the type we want to convert to right after any
substitutions or deductions avoids that issue.
for gcc/cp/ChangeLog
PR c++/87012
* pt.c (convert_template_argument): Canonicalize type after
tsubst/deduce.
for gcc/testsuite/ChangeLog
PR c++/87012
* g++.dg/cpp0x/pr87012.C: New.
From-SVN: r267251
Alexandre Oliva [Wed, 19 Dec 2018 06:51:19 +0000 (06:51 +0000)]
[PR c++/88146] do not crash synthesizing inherited ctor(...)
This patch started out from the testcase in PR88146, that attempted to
synthesize an inherited ctor without any args before a varargs
ellipsis and crashed while at that, because of the unguarded
dereferencing of the parm type list, that usually contains a
terminator. The terminator is not there for varargs functions,
however, and without any other args, we ended up dereferencing a NULL
pointer. Oops.
Guarding accesses to parm would be easy, but not necessary. In
do_build_copy_constructor, non-inherited ctors are copy-ctors, that
always have at least one parm, so parm needs not be guarded when we
know the access will only take place when we're dealing with an
inherited ctor. The only other problematic use was in the cvquals
initializer, a variable only used in a loop over fields, that we
skipped individually in inherited ctors. I've guarded the cvquals
initialization and the entire loop over fields so they only run for
copy-ctors.
Avoiding the crash from unguarded accesses was easy, but I thought we
should still produce the sorry message we got in other testcases that
passed arguments through the ellipsis in inherited ctors. I put a
check in, and noticed the inherited ctors were synthesized with the
location assigned to the class name, although they were initially
assigned the location of the using declaration. I decided the latter
was better, and arranged for the better location to be retained.
Further investigation revealed the lack of a sorry message had to do
with the call being in a non-evaluated context, in this case, a
noexcept expression. The sorry would be correctly reported in other
contexts, so I rolled back the check I'd added, but retained the
source location improvement.
I was still concerned about issuing sorry messages while instantiating
template ctors even in non-evaluated contexts, e.g., if a template
ctor had a base initializer that used an inherited ctor with enough
arguments that they'd go through an ellipsis. I wanted to defer the
instantiation of such template ctors, but that would have been wrong
for constexpr template ctors, and already done for non-constexpr ones.
So, I just consolidated multiple test variants into a single testcase
that explores and explains various of the possibilities I thought of.
for gcc/cp/ChangeLog
PR c++/88146
* method.c (do_build_copy_constructor): Guard cvquals init and
loop over fields to run for non-inherited ctors only.
(synthesize_method): Retain location of inherited ctor.
for gcc/testsuite/ChangeLog
PR c++/88146
* g++.dg/cpp0x/inh-ctor32.C: New.
From-SVN: r267250
Bin Cheng [Wed, 19 Dec 2018 02:25:48 +0000 (02:25 +0000)]
auto-profile.c (afdo_indirect_call): Skip generating histogram value if we can't find cgraph_node for then...
* auto-profile.c (afdo_indirect_call): Skip generating histogram
value if we can't find cgraph_node for then indirected callee. Save
profile_id of the cgraph_node in histogram value's first counter.
* value-prof.c (gimple_value_profile_transformations): Don't skip
for flag_auto_profile.
From-SVN: r267249
GCC Administrator [Wed, 19 Dec 2018 00:16:23 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r267248
Jakub Jelinek [Tue, 18 Dec 2018 21:48:59 +0000 (22:48 +0100)]
re PR rtl-optimization/87759 (ICE in lra_assign, at lra-assigns.c:1624, or ICE: Maximum number of LRA assignment passes is achieved (30), or compile-time hog)
PR rtl-optimization/87759
* gcc.target/i386/pr87759.c: Require int128 effective target.
From-SVN: r267245
Vladimir Makarov [Tue, 18 Dec 2018 21:20:16 +0000 (21:20 +0000)]
re PR rtl-optimization/87759 (ICE in lra_assign, at lra-assigns.c:1624, or ICE: Maximum number of LRA assignment passes is achieved (30), or compile-time hog)
2018-12-18 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/87759
* lra-assigns.c (lra_split_hard_reg_for): Recalculate
non_reload_pseudos.
2018-12-18 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/87759
* gcc.target/i386/pr87759.c: New.
From-SVN: r267244
Jakub Jelinek [Tue, 18 Dec 2018 18:41:26 +0000 (19:41 +0100)]
re PR tree-optimization/88464 (AVX-512 vectorization of masked scatter failing with "not suitable for scatter store")
PR target/88464
* config/i386/i386-builtin-types.def
(VOID_FTYPE_PDOUBLE_QI_V8SI_V4DF_INT,
VOID_FTYPE_PFLOAT_QI_V4DI_V8SF_INT,
VOID_FTYPE_PLONGLONG_QI_V8SI_V4DI_INT,
VOID_FTYPE_PINT_QI_V4DI_V8SI_INT,
VOID_FTYPE_PDOUBLE_QI_V4SI_V2DF_INT,
VOID_FTYPE_PFLOAT_QI_V2DI_V4SF_INT,
VOID_FTYPE_PLONGLONG_QI_V4SI_V2DI_INT,
VOID_FTYPE_PINT_QI_V2DI_V4SI_INT): New builtin types.
* config/i386/i386.c (enum ix86_builtins): Add
IX86_BUILTIN_SCATTERALTSIV4DF, IX86_BUILTIN_SCATTERALTDIV8SF,
IX86_BUILTIN_SCATTERALTSIV4DI, IX86_BUILTIN_SCATTERALTDIV8SI,
IX86_BUILTIN_SCATTERALTSIV2DF, IX86_BUILTIN_SCATTERALTDIV4SF,
IX86_BUILTIN_SCATTERALTSIV2DI and IX86_BUILTIN_SCATTERALTDIV4SI.
(ix86_init_mmx_sse_builtins): Fix up names of IX86_BUILTIN_GATHERALT*,
IX86_BUILTIN_GATHER3ALT* and IX86_BUILTIN_SCATTERALT* builtins to
match the IX86_BUILTIN codes. Build IX86_BUILTIN_SCATTERALTSIV4DF,
IX86_BUILTIN_SCATTERALTDIV8SF, IX86_BUILTIN_SCATTERALTSIV4DI,
IX86_BUILTIN_SCATTERALTDIV8SI, IX86_BUILTIN_SCATTERALTSIV2DF,
IX86_BUILTIN_SCATTERALTDIV4SF, IX86_BUILTIN_SCATTERALTSIV2DI and
IX86_BUILTIN_SCATTERALTDIV4SI decls.
(ix86_vectorize_builtin_scatter): Expand those new builtins.
* gcc.target/i386/avx512f-pr88464-5.c: New test.
* gcc.target/i386/avx512f-pr88464-6.c: New test.
* gcc.target/i386/avx512f-pr88464-7.c: New test.
* gcc.target/i386/avx512f-pr88464-8.c: New test.
* gcc.target/i386/avx512vl-pr88464-5.c: New test.
* gcc.target/i386/avx512vl-pr88464-6.c: New test.
* gcc.target/i386/avx512vl-pr88464-7.c: New test.
* gcc.target/i386/avx512vl-pr88464-8.c: New test.
* gcc.target/i386/avx512vl-pr88464-9.c: New test.
* gcc.target/i386/avx512vl-pr88464-10.c: New test.
* gcc.target/i386/avx512vl-pr88464-11.c: New test.
* gcc.target/i386/avx512vl-pr88464-12.c: New test.
* gcc.target/i386/avx512vl-pr88464-13.c: New test.
* gcc.target/i386/avx512vl-pr88464-14.c: New test.
* gcc.target/i386/avx512vl-pr88464-15.c: New test.
* gcc.target/i386/avx512vl-pr88464-16.c: New test.
From-SVN: r267239
Jonathan Wakely [Tue, 18 Dec 2018 16:57:36 +0000 (16:57 +0000)]
LWG 3171: restore stream insertion for filesystem::directory_entry
* include/bits/fs_dir.h (operator<<): Overload for directory_entry,
as per LWG 3171.
* testsuite/27_io/filesystem/directory_entry/lwg3171.cc: New test.
From-SVN: r267238
Jonathan Wakely [Tue, 18 Dec 2018 16:38:13 +0000 (16:38 +0000)]
Fix previous commit to move instead of copying
* src/filesystem/std-dir.cc (filesystem::_Dir::advance): Move new
path instead of copying.
From-SVN: r267237
Jonathan Wakely [Tue, 18 Dec 2018 15:52:37 +0000 (15:52 +0000)]
Micro-optimization to avoid creating temporary path
Now that path::operator/=(basic_string_view<value_type>) works directly
from the string argument, instead of constructing a temporary path from
the string, it's potentially more efficient to do 'path(x) /= s' instead
of 'x / s'. This changes the only relevant place in the library.
* src/filesystem/std-dir.cc (filesystem::_Dir::advance): Append
string to lvalue to avoid creating temporary path.
From-SVN: r267236
Jonathan Wakely [Tue, 18 Dec 2018 15:52:33 +0000 (15:52 +0000)]
LWG 2936: update path::compare logic and optimize string comparisons
The resolution for LWG 2936 defines the comparison more precisely, which
this patch implements. The patch also defines comparisons with strings
to work without constructing a temporary path object (so avoids any
memory allocations).
* include/bits/fs_path.h (path::compare(const string_type&))
(path::compare(const value_type*)): Add noexcept and construct a
string view to compare to instead of a path.
(path::compare(basic_string_view<value_type>)): Add noexcept. Remove
inline definition.
* src/filesystem/std-path.cc (path::_Parser): Track last type read
from input.
(path::_Parser::next()): Return a final empty component when the
input ends in a non-root directory separator.
(path::_M_append(basic_string_view<value_type>)): Remove special cases
for trailing non-root directory separator.
(path::_M_concat(basic_string_view<value_type>)): Likewise.
(path::compare(const path&)): Implement LWG 2936.
(path::compare(basic_string_view<value_type>)): Define in terms of
components returned by parser, consistent with LWG 2936.
* testsuite/27_io/filesystem/path/compare/lwg2936.cc: New.
* testsuite/27_io/filesystem/path/compare/path.cc: Test more cases.
* testsuite/27_io/filesystem/path/compare/strings.cc: Likewise.
From-SVN: r267235
Jonathan Wakely [Tue, 18 Dec 2018 15:34:43 +0000 (15:34 +0000)]
LWG 3040: define starts_with/ends_with as proposed
* include/std/string_view [__cplusplus > 201703L]
(basic_string_view::starts_with(basic_string_view)): Implement
proposed resolution of LWG 3040 to avoid redundant length check.
(basic_string_view::starts_with(_CharT)): Implement proposed
resolution of LWG 3040 to check at most one character.
(basic_string_view::ends_with(_CharT)): Likewise.
From-SVN: r267234
Bill Schmidt [Tue, 18 Dec 2018 13:46:10 +0000 (13:46 +0000)]
extend.texi (PowerPC Altivec/VSX Built-in Functions): Describe when a typedef name can be used as the type specifier for a vector type...
2018-12-18 Bill Schmidt <wschmidt@linux.ibm.com>
* doc/extend.texi (PowerPC Altivec/VSX Built-in Functions):
Describe when a typedef name can be used as the type specifier for
a vector type, and when it cannot.
From-SVN: r267232
Kyrylo Tkachov [Tue, 18 Dec 2018 12:55:44 +0000 (12:55 +0000)]
[testsuite] Enable vect_usad_char effective target for non-SVE aarch64
In GCC 9 the aarch64 port learned how to do V16QImode SAD operations on signed and unsigned chars.
But I had missed enabling the effective target for that.
This patch enables that target for non-SVE aarch64.
Two new tests now PASS on aarch64:
gcc.dg/vect/slp-reduc-sad.c
gcc.dg/vect/vect-reduc-sad.c
* lib/target-supports.exp (check_effective_target_vect_usad_char):
Add non-SVE aarch64 to supported list.
From-SVN: r267230
Jozef Lawrynowicz [Tue, 18 Dec 2018 11:44:22 +0000 (11:44 +0000)]
msp430.h: Define TARGET_VTABLE_ENTRY_ALIGN.
2018-12-18 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config/msp430/msp430.h: Define TARGET_VTABLE_ENTRY_ALIGN.
From-SVN: r267229
Jakub Jelinek [Tue, 18 Dec 2018 11:22:00 +0000 (12:22 +0100)]
re PR target/88513 (FAIL: gcc.target/i386/pr59591-1.c)
PR target/88513
PR target/88514
* optabs.def (vec_pack_sbool_trunc_optab, vec_unpacks_sbool_hi_optab,
vec_unpacks_sbool_lo_optab): New optabs.
* optabs.c (expand_widen_pattern_expr): Use vec_unpacks_sbool_*_optab
and pass additional argument if both input and target have the same
scalar mode of VECTOR_BOOLEAN_TYPE_P vectors.
* expr.c (expand_expr_real_2) <case VEC_PACK_TRUNC_EXPR>: Handle
VECTOR_BOOLEAN_TYPE_P pack where result has the same scalar mode
as the operands using vec_pack_sbool_trunc_optab.
* tree-vect-stmts.c (supportable_widening_operation): Use
vec_unpacks_sbool_{lo,hi}_optab for VECTOR_BOOLEAN_TYPE_P conversions
where both wider_vectype and vectype have the same scalar mode.
(supportable_narrowing_operation): Similarly use
vec_pack_sbool_trunc_optab if narrow_vectype and vectype have the same
scalar mode.
* config/i386/i386.c (ix86_get_builtin)
<case IX86_BUILTIN_GATHER3ALTDIV8SF>: Check for VECTOR_MODE_P
rather than non-VOIDmode.
* config/i386/sse.md (vec_pack_trunc_qi, vec_pack_trunc_<mode>):
Remove useless ()s around "register_operand", formatting fixes.
(vec_pack_sbool_trunc_qi, vec_unpacks_sbool_lo_qi,
vec_unpacks_sbool_hi_qi): New expanders.
* doc/md.texi (vec_pack_sbool_trunc_M, vec_unpacks_sbool_hi_M,
vec_unpacks_sbool_lo_M): Document.
* gcc.target/i386/avx512f-pr88513-1.c: New test.
* gcc.target/i386/avx512f-pr88513-2.c: New test.
* gcc.target/i386/avx512vl-pr88464-1.c: New test.
* gcc.target/i386/avx512vl-pr88464-2.c: New test.
* gcc.target/i386/avx512vl-pr88464-3.c: New test.
* gcc.target/i386/avx512vl-pr88464-4.c: New test.
* gcc.target/i386/avx512vl-pr88513-1.c: New test.
* gcc.target/i386/avx512vl-pr88513-2.c: New test.
* gcc.target/i386/avx512vl-pr88513-3.c: New test.
* gcc.target/i386/avx512vl-pr88513-4.c: New test.
* gcc.target/i386/avx512vl-pr88514-1.c: New test.
* gcc.target/i386/avx512vl-pr88514-2.c: New test.
* gcc.target/i386/avx512vl-pr88514-3.c: New test.
From-SVN: r267228
Jozef Lawrynowicz [Tue, 18 Dec 2018 10:29:42 +0000 (10:29 +0000)]
combine.c (update_rsp_from_reg_equal): Only look for the nonzero bits of src in nonzero_bits_mode if...
2018-12-18 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* combine.c (update_rsp_from_reg_equal): Only look for the nonzero bits
of src in nonzero_bits_mode if the mode of src is MODE_INT and
HWI_COMPUTABLE.
(reg_nonzero_bits_for_combine): Add clarification to comment.
From-SVN: r267227
Wei Xiao [Tue, 18 Dec 2018 03:41:44 +0000 (03:41 +0000)]
driver-i386.c (host_detect_local_cpu): Detect cascadelake.
gcc/ChangeLog
2018-12-18 Wei Xiao <wei3.xiao@intel.com>
* config/i386/driver-i386.c (host_detect_local_cpu): Detect cascadelake.
* config/i386/i386.c (fold_builtin_cpu): Handle cascadelake.
* doc/extend.texi: Add cascadelake.
gcc/testsuite/ChangeLog
2018-12-18 Wei Xiao <wei3.xiao@intel.com>
* g++.target/i386/mv16.C: Handle new march.
* gcc.target/i386/builtin_target.c: Ditto.
libgcc/ChangeLog
2018-12-18 Wei Xiao <wei3.xiao@intel.com>
* config/i386/cpuinfo.c (get_intel_cpu): Handle cascadelake.
* config/i386/cpuinfo.h: Add INTEL_COREI7_CASCADELAKE.
From-SVN: r267226
GCC Administrator [Tue, 18 Dec 2018 00:16:39 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r267225
Jonathan Wakely [Mon, 17 Dec 2018 22:43:31 +0000 (22:43 +0000)]
PR libstdc++/71044 fix off-by-one errors introduced recently
The recent changes to append/concat directly from strings (without
constructing paths) introduced regressions where one of the components
could be omitted from the iteration sequence in the result.
PR libstdc++/71044
* src/filesystem/std-path.cc (path::_M_append): Fix off-by-one error
that caused a component to be lost from the iteration sequence.
(path::_M_concat): Likewise.
* testsuite/27_io/filesystem/path/append/source.cc: Test appending
long strings.
* testsuite/27_io/filesystem/path/concat/strings.cc: Test
concatenating long strings.
* testsuite/27_io/filesystem/path/construct/string_view.cc: Test
construction from long string.
From-SVN: r267222
Peter Bergner [Mon, 17 Dec 2018 22:07:11 +0000 (22:07 +0000)]
re PR target/87870 (ppc64le generates poor code when loading constants into TImode vars)
gcc/
PR target/87870
* config/rs6000/vsx.md (nW): New mode iterator.
(vsx_mov<mode>_64bit): Use it. Remove redundant GPR 0/-1 alternative.
Update length attribute for (<??r>, <nW>) alternative.
(vsx_mov<mode>_32bit): Likewise.
gcc/testsuite/
PR target/87870
* gcc.target/powerpc/pr87870.c: New test.
From-SVN: r267221
Jakub Jelinek [Mon, 17 Dec 2018 21:54:37 +0000 (22:54 +0100)]
re PR c++/88410 (internal compiler error: output_operand: invalid expression as operand)
PR c++/88410
* cp-gimplify.c (cp_fold) <case ADDR_EXPR>: For offsetof-like folding,
call maybe_constant_value on val to see if it is INTEGER_CST.
* g++.dg/cpp0x/pr88410.C: New test.
From-SVN: r267220
Jonathan Wakely [Mon, 17 Dec 2018 21:49:58 +0000 (21:49 +0000)]
PR c++/52321 print note for static_cast to/from incomplete type
PR c++/52321
* typeck.c (build_static_cast): Print a note when the destination
type or the operand is a pointer/reference to incomplete class type.
From-SVN: r267219
Tom de Vries [Mon, 17 Dec 2018 21:27:19 +0000 (21:27 +0000)]
[nvptx] Move macro defs to top of nvptx.c
Move macro definition to the top of the file, allowing them to be used
there-after.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-17 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (PTX_VECTOR_LENGTH, PTX_WORKER_LENGTH,
PTX_DEFAULT_RUNTIME_DIM): Move to the top of the file.
From-SVN: r267216
Tom de Vries [Mon, 17 Dec 2018 21:27:09 +0000 (21:27 +0000)]
[nvptx] Add PTX_WARP_SIZE
Add PTX_WARP_SIZE constant and use it in nvptx_simt_vf. The function
nvptx_simt_vf is used for OpenMP, and using PTX_WARP_SIZE here decouples the
OpenMP support from the PTX_VECTOR_LENGTH constant used in OpenACC support.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-17 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (PTX_WARP_SIZE): Define.
(nvptx_simt_vf): Return PTX_WARP_SIZE instead of PTX_VECTOR_LENGTH.
From-SVN: r267215
Tom de Vries [Mon, 17 Dec 2018 21:26:59 +0000 (21:26 +0000)]
[nvptx] Fix whitespace in nvptx_single and nvptx_neuter_pars
Fix whitespace in nvptx_single and nvptx_neuter_pars.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-17 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (nvptx_single): Fix whitespace.
(nvptx_neuter_pars): Likewise.
From-SVN: r267214
Tom de Vries [Mon, 17 Dec 2018 21:26:49 +0000 (21:26 +0000)]
[nvptx] Unify C/Fortran routine handling in nvptx_goacc_validate_dims
The Fortran front-end has a bug (PR72741) that means what when
nvptx_goacc_validate_dims is called for a Fortran routine, the dims parameter
is not the same as it would have been if the function would have been called for
an equivalent C routine.
Work around this bug by overriding the dims parameter for routines, allowing the
function to handle routines in Fortran and C the same.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-17 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (nvptx_goacc_validate_dims): Work around Fortran
bug PR72741 by overriding dims parameter for routines.
From-SVN: r267213
Tom de Vries [Mon, 17 Dec 2018 21:26:39 +0000 (21:26 +0000)]
[nvptx] Rewrite nvptx_goacc_validate_dims to use predicate vars
The function nvptx_goacc_validate_dims has arguments decl and fn_level which
together describe different situations.
Introduce a predicate var for each situation, and use them, allowing to
understand what the function does in each situation without having to know the
way the situations are encoded in the args.
Build and reg-tested on x86_64 with nvptx accelerator.
2018-12-17 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (nvptx_goacc_validate_dims): Rewrite using
predicate vars.
From-SVN: r267212
Steve Ellcey [Mon, 17 Dec 2018 19:23:02 +0000 (19:23 +0000)]
Add missing ChangeLog entry from last checkin:
2018-12-17 Steve Ellcey <sellcey@cavium.com>
* gcc.target/aarch64/torture/aarch64-torture.exp: New file.
* gcc.target/aarch64/torture/simd-abi-1.c: New test.
* gcc.target/aarch64/torture/simd-abi-2.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-3.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-4.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-5.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-6.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-7.c: Ditto.
From-SVN: r267210
Steve Ellcey [Mon, 17 Dec 2018 19:18:17 +0000 (19:18 +0000)]
aarch64-torture.exp: New file.
2018-12-17 Steve Ellcey <sellcey@cavium.com>
* gcc.target/aarch64/torture/aarch64-torture.exp: New file.
* gcc.target/aarch64/torture/simd-abi-1.c: New test.
* gcc.target/aarch64/torture/simd-abi-2.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-3.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-4.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-5.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-6.c: Ditto.
* gcc.target/aarch64/torture/simd-abi-7.c: Ditto.
From-SVN: r267209
Steve Ellcey [Mon, 17 Dec 2018 19:14:04 +0000 (19:14 +0000)]
aarch64-protos.h (aarch64_use_simple_return_insn_p): New prototype.
2018-12-17 Steve Ellcey <sellcey@cavium.com>
* config/aarch64/aarch64-protos.h (aarch64_use_simple_return_insn_p):
New prototype.
(aarch64_epilogue_uses): Ditto.
* config/aarch64/aarch64.c (aarch64_attribute_table): New array.
(aarch64_simd_decl_p): New function.
(aarch64_reg_save_mode): New function.
(aarch64_function_ok_for_sibcall): Check for simd calls.
(aarch64_layout_frame): Check for simd function.
(aarch64_gen_storewb_pair): Handle E_TFmode.
(aarch64_push_regs): Use aarch64_reg_save_mode to get mode.
(aarch64_gen_loadwb_pair): Handle E_TFmode.
(aarch64_pop_regs): Use aarch64_reg_save_mode to get mode.
(aarch64_gen_store_pair): Handle E_TFmode.
(aarch64_gen_load_pair): Ditto.
(aarch64_save_callee_saves): Handle different mode sizes.
(aarch64_restore_callee_saves): Ditto.
(aarch64_components_for_bb): Check for simd function.
(aarch64_epilogue_uses): New function.
(aarch64_process_components): Check for simd function.
(aarch64_expand_prologue): Ditto.
(aarch64_expand_epilogue): Ditto.
(aarch64_expand_call): Ditto.
(aarch64_use_simple_return_insn_p): New function.
(TARGET_ATTRIBUTE_TABLE): New define.
* config/aarch64/aarch64.h (EPILOGUE_USES): Redefine.
(FP_SIMD_SAVED_REGNUM_P): New macro.
* config/aarch64/aarch64.md (simple_return): New define_expand.
(load_pair_dw_tftf): New instruction.
(store_pair_dw_tftf): Ditto.
(loadwb_pair<TX:mode>_<P:mode>): Ditto.
(storewb_pair<TX:mode>_<P:mode>): Ditto.
From-SVN: r267208
Iain Buclaw [Mon, 17 Dec 2018 18:32:31 +0000 (18:32 +0000)]
Merge dmd upstream
237ca3fbe
Backports a fix where a bad cast to TypeFunction resulted in memory
corruption. The logic in the function semantic has been fixed, and
casts have been replaced with a function call to always check the
front-end AST node value.
Reviewed-on: https://github.com/dlang/dmd/pull/9054
From-SVN: r267207
Martin Sebor [Mon, 17 Dec 2018 18:10:58 +0000 (18:10 +0000)]
builtin-snprintf-4.c: Adjust for ILP32.
gcc/testsuite/ChangeLog:
* gcc.dg/tree-ssa/builtin-snprintf-4.c: Adjust for ILP32.
From-SVN: r267206
Uros Bizjak [Mon, 17 Dec 2018 15:46:20 +0000 (16:46 +0100)]
re PR target/88502 (Inline built-in asinh, acosh, atanh for -ffast-math)
PR target/88502
* internal-fn.def (ACOSH): New.
(ASINH): Ditto.
(ATANH): Ditto.
* optabs.def (acosh_optab): New.
(asinh_optab): Ditto.
(atanh_optab): Ditto.
* config/i386/i386-protos.h (ix86_emit_i387_asinh): New prototype.
(ix86_emit_i387_acosh): Ditto.
(ix86_emit_i387_atanh): Ditto.
* config/i386/i386.c (ix86_emit_i387_asinh): New function.
(ix86_emit_i387_acosh): Ditto.
(ix86_emit_i387_atanh): Ditto.
* config/i386/i386.md (asinhxf2): New expander.
(asinh<mode>2): Ditto.
(acoshxf2): Ditto.
(acosh<mode>2): Ditto.
(atanhxf2): Ditto.
(atanh<mode>2): Ditto.
From-SVN: r267204
David Edelsohn [Mon, 17 Dec 2018 15:07:22 +0000 (15:07 +0000)]
config.gcc (powerpc-ibm-aix6.*): Delete extra_headers.
* config.gcc (powerpc-ibm-aix6.*): Delete extra_headers.
(powerpc-ibm-aix7.1.*): Same.
(powerpc-ibm-aix[789].*): Same.
From-SVN: r267203
H.J. Lu [Mon, 17 Dec 2018 13:49:16 +0000 (13:49 +0000)]
DWARF: Don't expand hash table when no insertion is needed
dwarf2out_finish performs:
1. save_macinfo_strings
2. hash table traverse of index_string
3. output_macinfo -> output_macinfo_op
4. output_indirect_strings -> hash table traverse of output_index_string
find_slot_with_hash has
if (insert == INSERT && m_size * 3 <= m_n_elements * 4)
expand ();
which may expand hash table even if no insertion is neeed and change hash
table traverse order. When output_macinfo_op is called, all index strings
have been added to hash table by save_macinfo_strings and we shouldn't
expand index string hash table. Otherwise find_slot_with_hash will expand
hash table when hash table has the right size and hash table traverse of
output_index_string will have a different traverse order from index_string.
PR debug/79342
* dwarf2out.c (find_AT_string_in_table): Add insert argument
defaulting to INSERT and replace INSERT.
(find_AT_string): Likewise.
(output_macinfo_op): Pass NO_INSERT to find_AT_string.
From-SVN: r267202
Jan Hubicka [Mon, 17 Dec 2018 13:21:52 +0000 (14:21 +0100)]
coverage.c (struct conts_entry): Add n_counts.
* coverage.c (struct conts_entry): Add n_counts.
(remap_counts_file): Record number of ocunts.
(get_coverage_counts): Verify that counts match.
* coverage.h (get_coverage_counts): Update prototype.
* profile.c (get_exec_counts. compute_value_histograms): Add
n_counts parametrs.
From-SVN: r267200
Senthil Kumar Selvaraj [Mon, 17 Dec 2018 10:50:54 +0000 (10:50 +0000)]
re PR rtl-optimization/88253 (Inlining of function incorrectly deletes volatile register access when using XOR in avr-gcc)
Fix PR 88253
gcc/ChangeLog:
PR rtl-optimization/88253
* combine.c (combine_simplify_rtx): Test for side-effects before
substituting by zero.
gcc/testsuite/ChangeLog:
PR rtl-optimization/88253
* gcc.target/avr/pr88253.c: New test.
From-SVN: r267198
Richard Sandiford [Mon, 17 Dec 2018 10:05:51 +0000 (10:05 +0000)]
Add a loop versioning pass
This patch adds a pass that versions loops with variable index strides
for the case in which the stride is 1. E.g.:
for (int i = 0; i < n; ++i)
x[i * stride] = ...;
becomes:
if (stepx == 1)
for (int i = 0; i < n; ++i)
x[i] = ...;
else
for (int i = 0; i < n; ++i)
x[i * stride] = ...;
This is useful for both vector code and scalar code, and in some cases
can enable further optimisations like loop interchange or pattern
recognition.
The pass gives a 7.6% improvement on Cortex-A72 for 554.roms_r at -O3
and a 2.4% improvement for 465.tonto. I haven't found any SPEC tests
that regress.
Sizewise, there's a 10% increase in .text for both 554.roms_r and
465.tonto. That's obviously a lot, but in tonto's case it's because
the whole program is written using assumed-shape arrays and pointers,
so a large number of functions really do benefit from versioning.
roms likewise makes heavy use of assumed-shape arrays, and that
improvement in performance IMO justifies the code growth.
The next biggest .text increase is 4.5% for 548.exchange2_r. I did see
a small (0.4%) speed improvement there, but although both 3-iteration runs
produced stable results, that might still be noise. There was a slightly
larger (non-noise) improvement for a 256-bit SVE model.
481.wrf and 521.wrf_r .text grew by 2.8% and 2.5% respectively, but
without any noticeable improvement in performance. No other test grew
by more than 2%.
Although the main SPEC beneficiaries are all Fortran tests, the
benchmarks we use for SVE also include some C and C++ tests that
benefit.
Using -frepack-arrays gives the same benefits in many Fortran cases.
The problem is that using that option inappropriately can force a full
array copy for arguments that the function only reads once, and so it
isn't really something we can turn on by default. The new pass is
supposed to give most of the benefits of -frepack-arrays without
the risk of unnecessary repacking.
The patch therefore enables the pass by default at -O3.
2018-12-17 Richard Sandiford <richard.sandiford@arm.com>
Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
Kyrylo Tkachov <kyrylo.tkachov@arm.com>
gcc/
* doc/invoke.texi (-fversion-loops-for-strides): Document
(loop-versioning-group-size, loop-versioning-max-inner-insns)
(loop-versioning-max-outer-insns): Document new --params.
* Makefile.in (OBJS): Add gimple-loop-versioning.o.
* common.opt (fversion-loops-for-strides): New option.
* opts.c (default_options_table): Enable fversion-loops-for-strides
at -O3.
* params.def (PARAM_LOOP_VERSIONING_GROUP_SIZE)
(PARAM_LOOP_VERSIONING_MAX_INNER_INSNS)
(PARAM_LOOP_VERSIONING_MAX_OUTER_INSNS): New parameters.
* passes.def: Add pass_loop_versioning.
* timevar.def (TV_LOOP_VERSIONING): New time variable.
* tree-ssa-propagate.h
(substitute_and_fold_engine::substitute_and_fold): Add an optional
block parameter.
* tree-ssa-propagate.c
(substitute_and_fold_engine::substitute_and_fold): Likewise.
When passed, only walk blocks dominated by that block.
* tree-vrp.h (range_includes_p): Declare.
(range_includes_zero_p): Turn into an inline wrapper around
range_includes_p.
* tree-vrp.c (range_includes_p): New function, generalizing...
(range_includes_zero_p): ...this.
* tree-pass.h (make_pass_loop_versioning): Declare.
* gimple-loop-versioning.cc: New file.
gcc/testsuite/
* gcc.dg/loop-versioning-1.c: New test.
* gcc.dg/loop-versioning-10.c: Likewise.
* gcc.dg/loop-versioning-11.c: Likewise.
* gcc.dg/loop-versioning-2.c: Likewise.
* gcc.dg/loop-versioning-3.c: Likewise.
* gcc.dg/loop-versioning-4.c: Likewise.
* gcc.dg/loop-versioning-5.c: Likewise.
* gcc.dg/loop-versioning-6.c: Likewise.
* gcc.dg/loop-versioning-7.c: Likewise.
* gcc.dg/loop-versioning-8.c: Likewise.
* gcc.dg/loop-versioning-9.c: Likewise.
* gfortran.dg/loop_versioning_1.f90: Likewise.
* gfortran.dg/loop_versioning_2.f90: Likewise.
* gfortran.dg/loop_versioning_3.f90: Likewise.
* gfortran.dg/loop_versioning_4.f90: Likewise.
* gfortran.dg/loop_versioning_5.f90: Likewise.
* gfortran.dg/loop_versioning_6.f90: Likewise.
* gfortran.dg/loop_versioning_7.f90: Likewise.
* gfortran.dg/loop_versioning_8.f90: Likewise.
From-SVN: r267197
Steven G. Kargl [Mon, 17 Dec 2018 02:19:58 +0000 (02:19 +0000)]
re PR fortran/85314 (gcc/fortran/resolve.c:9222: unreachable code ?)
2018-12-16 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/85314
* resolve.c (resolve_transfer): Remove dead code.
From-SVN: r267196
GCC Administrator [Mon, 17 Dec 2018 00:16:51 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r267195
Iain Buclaw [Sun, 16 Dec 2018 23:18:25 +0000 (23:18 +0000)]
libphobos: Merge common version blocks for core.sys.posix.sys.msg.
This is a continuation of simplifying C bindings so there aren't dozens
of duplicated code for each architecture. For this particular module,
it now more closely resembles how glibc arranges msq.h, fixing a couple
of targets in the process, notably X32.
Backport from upstream druntime 2.084.
Reviewed-on: https://github.com/dlang/druntime/pull/2362
From-SVN: r267192
Jan Hubicka [Sun, 16 Dec 2018 18:57:48 +0000 (19:57 +0100)]
ipa-fnsummary.c (remap_edge_change_prob): Do not ICE when changes are not streamed in.
* ipa-fnsummary.c (remap_edge_change_prob): Do not ICE when changes
are not streamed in.
From-SVN: r267191
Steven G. Kargl [Sun, 16 Dec 2018 16:29:43 +0000 (16:29 +0000)]
re PR fortran/88116 (ICE in gfc_convert_constant(): Unexpected type)
2018-12-16 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88116
PR fortran/88467
* array.c (gfc_match_array_constructor): Check return value of
gfc_convert_type(). Skip constructor elements with BT_UNKNOWN,
which need to go through resolution.
* intrinsic.c (gfc_convert_type_warn): Return early if the types
martch (i.e., no conversion is required).
* simplify.c (gfc_convert_constant): Remove a gfc_internal_error,
and return gfc_bad_expr.
2018-12-16 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88116
* gfortran.dg/pr88116_1.f90: New test.
* gfortran.dg/pr88116_2.f90: Ditto.
PR fortran/88467
* gfortran.dg/pr88467.f90: New test.
From-SVN: r267189
Steven G. Kargl [Sun, 16 Dec 2018 16:01:19 +0000 (16:01 +0000)]
decl.c (variable_decl): Typo fixes.
2018-12-16 Steven G. Kargl <kargl@gcc.gnu.org>
* decl.c (variable_decl): Typo fixes.
2018-12-16 Steven G. Kargl <kargl@gcc.gnu.org>
* gfortran.dg/pr88138.f90: Remove extraneous 's' in comment.
From-SVN: r267188
Thomas Koenig [Sun, 16 Dec 2018 14:32:46 +0000 (14:32 +0000)]
PF fortran/88364
2018-12-16 Thomas Koenig <tkoenig@gcc.gnu.org>
PF fortran/88364
* trans-expr.c (gfc_conv_expr_reference): Do not add clobber if
the expression contains a reference.
2018-12-16 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/88363
* intent_out_13.f90: New test.
From-SVN: r267187
H.J. Lu [Sun, 16 Dec 2018 13:55:18 +0000 (13:55 +0000)]
x86: Revert reversion 267133
Revert commit:
commit
76c21b271247ccbd681bdb4530426d2fe35dbfa5
Author: hjl <hjl@
138bc75d-0d04-0410-961f-
82ee72b054a4>
Date: Fri Dec 14 12:38:04 2018 +0000
x86: Don't use get_frame_size when finalizing stack frame
gcc/
PR target/88483
* config/i386/i386.c (ix86_finalize_stack_frame_flags): Revert
reversion 267133.
gcc/testsuite/
PR target/88483
* gcc.target/i386/stackalign/pr88483.c: Removed. Revert
reversion 267133.
From-SVN: r267186
Jan Hubicka [Sun, 16 Dec 2018 12:05:04 +0000 (13:05 +0100)]
ipa-fnsummary.c (analyze_function_body): Do not loeak conds and size_time_table.
* ipa-fnsummary.c (analyze_function_body): Do not loeak conds and
size_time_table.
(ipa_fn_summary_generate): Add prevails parameter; do not allocate
data when symbol is not prevailing.
(inline_read_section): Likewise.
From-SVN: r267185
Steven G. Kargl [Sun, 16 Dec 2018 03:33:05 +0000 (03:33 +0000)]
re PR fortran/87994 (ICE in match_data_constant, at fortran/decl.c:399)
2018-12-15 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/87944
* decl.c (match_data_constant): Allow inquiry parameter as data
constant in data statement.
2018-12-15 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/87944
* gfortran.dg/pr87994_1.f90: New test.
* gfortran.dg/pr87994_2.f90: Ditto.
* gfortran.dg/pr87994_3.f90: Ditto.
From-SVN: r267184
GCC Administrator [Sun, 16 Dec 2018 00:16:43 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r267183
Jakub Jelinek [Sat, 15 Dec 2018 23:51:31 +0000 (00:51 +0100)]
re PR c++/88482 (ICE when wrongly declaring __cxa_allocate_exception)
PR c++/88482
* except.c (verify_library_fn): New function.
(declare_library_fn): Use it. Initialize TM even if the non-TM
library function has been user declared.
(do_end_catch): Don't set TREE_NOTHROW on error_mark_node.
(expand_start_catch_block): Don't call initialize_handler_parm
for error_mark_node.
(build_throw): Use verify_library_fn. Initialize TM even if the
non-TM library function has been user declared. Don't crash if
any library fn is error_mark_node.
* g++.dg/eh/builtin5.C: New test.
* g++.dg/eh/builtin6.C: New test.
* g++.dg/eh/builtin7.C: New test.
* g++.dg/eh/builtin8.C: New test.
* g++.dg/eh/builtin9.C: New test.
* g++.dg/eh/builtin10.C: New test.
* g++.dg/eh/builtin11.C: New test.
* g++.dg/parse/crash55.C: Adjust expected diagnostics.
* eh_cpp.cc (__cxa_throw): Change DEST argument type from
void * to void (*) (void *).
(_ITM_cxa_throw): Likewise.
* libitm.h (_ITM_cxa_throw): Likewise.
* libitm.texi (_ITM_cxa_throw): Likewise.
From-SVN: r267179
Steven G. Kargl [Sat, 15 Dec 2018 22:53:26 +0000 (22:53 +0000)]
re PR fortran/88138 (ICE in gfc_arith_concat, at fortran/arith.c:1007)
2019-12-15 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88138
* decl.c (variable_decl): Check that a derived isn't being assigned
an incompatible entity in an initialization.
2019-12-15 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88138
* gfortran.dg/pr88138.f90: new test.
From-SVN: r267177
Jason Merrill [Sat, 15 Dec 2018 22:10:18 +0000 (17:10 -0500)]
Small lambda instantiation tweak.
While looking at something else I noticed that we were passing 0 to the
"nonclass" parameter here; we might as well pass 1, since capture proxies
are always at block scope.
* pt.c (tsubst_expr) [DECL_EXPR]: Ignore class-scope bindings when
looking up a capture proxy.
From-SVN: r267176
Jan Hubicka [Sat, 15 Dec 2018 21:24:52 +0000 (22:24 +0100)]
cgraph.h (cgraph_node): Add predicate prevailing_p.
* cgraph.h (cgraph_node): Add predicate prevailing_p.
(cgraph_edge): Add predicate possible_call_in_translation_unit_p.
* ipa-prop.c (ipa_write_jump_function): Optimize streaming of ADDR_EXPR.
(ipa_read_jump_function): Add prevails parameter; optimize streaming.
(ipa_read_edge_info): Break out from ...
(ipa_read_node_info): ... here; optimize streaming.
* cgraph.c (cgraph_edge::possibly_call_in_translation_unit_p): New
predicate.
From-SVN: r267175