PR tree-optimization/82434
* fold-const.h (can_native_encode_type_p,
can_native_encode_string_p): Remove.
* fold-const.c (native_encode_int): Formatting fixes. If ptr is NULL,
don't encode anything, just return what would be otherwise returned.
(native_encode_fixed, native_encode_complex, native_encode_vector):
Likewise.
(native_encode_string): Likewise. Inline by hand
can_native_encode_string_p.
(can_native_encode_type_p): Remove.
(can_native_encode_string_p): Remove.
* tree-vect-stmts.c (vectorizable_store): Instead of testing just
STRING_CSTs using can_native_encode_string_p, test all
CONSTANT_CLASS_P values using native_encode_expr with NULL ptr.
* gimple-ssa-store-merging.c (encode_tree_to_bitpos): Remove last
argument from native_encode_expr.
(rhs_valid_for_store_merging_p): Use native_encode_expr with NULL ptr.
(pass_store_merging::execute): Don't unnecessarily look for 3 stmts,
but just 2.
* gcc.dg/store_merging_9.c: New test.
From-SVN: r253483
2017-10-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/82397
* tree-vect-data-refs.c (dr_group_sort_cmp): Do not use
operand_equal_p but rely on data_ref_compare_tree for detecting
equalities.
(vect_analyze_data_ref_accesses): Use data_ref_compare_tree
to match up with dr_group_sort_cmp.
* gfortran.dg/pr82397.f: New testcase.
From-SVN: r253482
vec_ceil and friends are expanded by vecintrin.h to __builtin_s390_vfi
which is an overloaded builtin being replaced by either
__builtin_s390_vfisb or __builtin_s390_vfidb depending on its argument
types.
The problem in this PR was that the overloaded builtin definition of
__builtin_s390_vfi was missing in s390-builtins.def.
gcc/ChangeLog:
2017-10-06 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/82322
* config/s390/s390-builtins.def (s390_vfi): Define new overloaded
builtin.
* config/s390/s390-builtin-types.def: Regenerate.
gcc/testsuite/ChangeLog:
2017-10-06 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/82322
* gcc.target/s390/zvector/pr82322.c: New test.
From-SVN: r253481
With IBM z14 a hardware instruction for floating point min and max has
been added while for IBM z13 we emulated min/max for vector double with
compare and select. This testcase makes sure that we fall back to the
emulated variant when compiling for z13.
gcc/ChangeLog:
2017-10-06 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/82317
* config/s390/s390-builtin-types.def: Regenerate.
* config/s390/s390-builtins.def (s390_vfmaxdb_4, s390_vfmindb_4):
Change flag from B_VXE to B_VX.
(s390_vec_min_dbl): Remove B_VXE flag.
gcc/testsuite/ChangeLog:
2017-10-06 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/82317
* gcc.target/s390/zvector/pr82317.c: New test.
From-SVN: r253480
PR c/82437
* c-warn.c (warn_tautological_bitwise_comparison): Instead of
using to_widest use wide_int with the larger of the two precisions.
* c-c++-common/Wtautological-compare-6.c: New test.
From-SVN: r253476
2017-10-06 Richard Biener <rguenther@suse.de>
* graphite-sese-to-poly.c (extract_affine): For casts increasing
precision do not perform modulo reduction.
From-SVN: r253474
2017-10-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/82436
* tree-vect-slp.c (vect_supported_load_permutation_p): More
conservatively choose the vectorization factor when checking
whether we can perform the required load permutation.
(vect_transform_slp_perm_load): Assert when we may not fail.
* gcc.dg/vect/pr82436.c: New testcase.
From-SVN: r253473
For example, for the package math/big, we used to generate unexported
names as `big.trim` and exported names as `math_big.NewInt`. After
this change we will use `math_big` consistently.
Reviewed-on: https://go-review.googlesource.com/68651
From-SVN: r253468
While looking at PR82411, I got the error message
error: '-msdata=-mcall' and 'eabi-linux' are incompatible
which caused some head-scratching.
* config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Correct error
message for incompatible -msdata=* and -mcall-* options.
From-SVN: r253467
Consolidate all symbol name handling into the new file names.cc. This
is intended to define all the names that will appear in the generated
assembly code. Names that will not appear in the assembly code, such
as local variable names or label names, remain where they are.
This consolidation is not intended to change any of the existing
symbol names. Tested by building without and without this patch and
comparing the libgo symbol table.
Reviewed-on: https://go-review.googlesource.com/68310
* Make-lang.in (GO_OBJS): Add go/names.o.
From-SVN: r253458
* elf.c (elf_zlib_fetch): Change pval argument to uint64_t *.
Read a four byte integer.
(elf_zlib_inflate): Change val to uint64_t. Align pin to a 32-bit
boundary before ever calling elf_zlib_fetch.
* ztest.c (test_large): Simplify print statements a bit.
From-SVN: r253456
* i386.c (ix86_size_cost, i386_cost, i486_cost, pentium_cost,
lakemont_cost, pentiumpro_cost, geode_cost, k6_cost,
athlon_cost, k8_cost, amdfam10_cost, btver1_cost, btver2_cost,
pentium4_cost, nocona_cost): Set reassociation width to 1.
(bdver1_cost, bdver2_cost, bdver3_cost, bdver4_cost): Set reassociation
width to 2 for fp operations and 1 otherwise.
(znver1_cost): Set scalar reassoc width to 4 and vector to 3 and 6
for int and fp.
(atom_cost): Set reassociation width to 2.
(slm_cost, generic_cost): Set fp reassociation width to 2 and 1 otherwise.
(intel_cost): Set fp reassociation width to 4 and 1 otherwise.
(core_cost): Set fp reassociation width to 4 and vector to 2.
(ix86_reassociation_width): Rewrite using cost table; special case
plus/minus on Zen; honor X86_TUNE_SSE_SPLIT_REGS
and TARGET_AVX128_OPTIMAL.
* i386.h (processor_costs): Add
reassoc_int, reassoc_fp, reassoc_vec_int, reassoc_vec_fp.
(TARGET_VECTOR_PARALLEL_EXECUTION, TARGET_REASSOC_INT_TO_PARALLEL,
TARGET_REASSOC_FP_TO_PARALLEL): Remove.
* x86-tune.def (X86_TUNE_REASSOC_INT_TO_PARALLEL): Remove.
(X86_TUNE_REASSOC_FP_TO_PARALLEL): Remove.
(X86_TUNE_VECTOR_PARALLEL_EXECUTION): Remove.
From-SVN: r253448
Since size of "void *" is 4 bytes for x32, check if __x86_64__ is defined
by $CC, instead of
if test x$ac_cv_sizeof_void_p = x8; then
to decide wether sanitizer_linux_x86_64.lo should be used.
PR sanitizer/82379
* configure.tgt (SANITIZER_COMMON_TARGET_DEPENDENT_OBJECTS): Set
to sanitizer_linux_x86_64.lo if __x86_64__ is defined by $CC.
From-SVN: r253441
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00201.html
Give builtin types the correct name.
* name-lookup.c (set_global_binding): Assert name is DECL_NAME.
* decl.c (record_builtin_type): Reimplement, use new TYPE_DECL for
rname.
From-SVN: r253426
This patch adds the support for BIC (vector, immediate) and
ORR (vector, immediate) SIMD patterns to the AArch64 backend.
Committed on behalf of Sudi Das.
Reviewed-by: Richard Earnshaw <Richard.Earnshaw@arm.com>
Reviewed-by: James Greenhalgh <james.greenhalgh@arm.com>
gcc/
* config/aarch64/aarch64-protos.h (enum simd_immediate_check): New
check type for aarch64_simd_valid_immediate.
(aarch64_output_simd_mov_immediate): Update prototype.
(aarch64_simd_valid_immediate): Update prototype.
* config/aarch64/aarch64-simd.md (orr<mode>3): modified pattern to add
support for ORR-immediate.
(and<mode>3): modified pattern to add support for BIC-immediate.
* config/aarch64/aarch64.c (aarch64_simd_valid_immediate): Function
now checks for valid immediate for BIC and ORR based on new enum
argument.
(aarch64_output_simd_mov_immediate): Function now used to output
BIC/ORR imm as well based on new enum argument.
* config/aarch64/constraints.md (Do): New vector immediate constraint.
(Db) : Likewise.
* config/aarch64/predicates.md (aarch64_reg_or_orr_imm): New predicate.
(aarch64_reg_or_bic_imm): Likewise.
gcc/testsuite/
* gcc.target/aarch64/bic_imm_1.c: New test.
* gcc.target/aarch64/orr_imm_1.c: Likewise.
From-SVN: r253422
vec_unpacks_hi_v4sf/vec_unpacks_lo_v4sf expand vec_mergeh and vec_mergel
patterns also for z13 with V4SF modes so the patterns should better
accept this. Fixed by changing the mode iterator to V_128_NOSINGLE
which accepts V4SF unconditionally.
gcc/ChangeLog:
2017-10-04 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/vx-builtins.md ("vec_mergeh<mode>")
("vec_mergel<mode>"): Change mode iterator to V_128_NOSINGLE.
From-SVN: r253420
PR c++/82373
* error.c (dump_function_decl): If show_return, call dump_type_suffix
on the same return type dump_type_prefix has been called on.
* g++.dg/cpp1y/pr82373.C: New test.
From-SVN: r253418
François Dumont <fdumont@gcc.gnu.org>
* include/bits/streambuf_iterator.h
(istreambuf_iterator<>::operator*()): Do not capture iterator state
in Debug assertion.
(istreambuf_iterator<>::operator++()): Likewise and remove _M_sbuf check.
(istreambuf_iterator<>::operator++(int)): Likewise.
(istreambuf_iterator<>::_M_get()): Remove _M_c assignment.
(istreambuf_iterator<>::_S_is_eof()): New.
(istreambuf_iterator<>::_M_at_eof()): Adapt, use latter.
(find(istreambuf_iterator<>, istreambuf_iterator<>, _CharT)):
Return an iterator with _M_c set to eof to capture streambuf state
on evaluation.
(testsuite/24_iterators/istreambuf_iterator/2.cc): Add checks.
Co-Authored-By: François Dumont <fdumont@gcc.gnu.org>
From-SVN: r253417
In r253096
("C++: underline parameters in mismatching function calls"
aka 5d78d423a5f7a1d135c7bb678e82007678d1313c
https://gcc.gnu.org/ml/gcc-patches/2017-09/msg01546.html )
I updated the C++ FE's handling of mismatched types in function calls
so that it underlines the pertinent param of the callee, rather than
just the function name.
The following patch does the same for the C frontend.
Given e.g. this type mismatch:
extern int callee (int one, const char *two, float three);
int caller (int first, int second, float third)
{
return callee (first, second, third);
}
the C FE currently emits (trunk):
test.c: In function 'caller':
test.c:5:25: warning: passing argument 2 of 'callee' makes pointer from
integer without a cast [-Wint-conversion]
return callee (first, second, third);
^~~~~~
test.c:1:12: note: expected 'const char *' but argument is of type 'int'
extern int callee (int one, const char *two, float three);
^~~~~~
whereas with this patch the note underlines the pertinent param of
the callee:
test.c: In function 'caller':
test.c:5:25: warning: passing argument 2 of 'callee' makes pointer from
integer without a cast [-Wint-conversion]
return callee (first, second, third);
^~~~~~
test.c:1:41: note: expected 'const char *' but argument is of type 'int'
extern int callee (int one, const char *two, float three);
~~~~~~~~~~~~^~~
making the problem more obvious to the user.
As with the C++ patch, the patch:
(a) updates the locations of the params to cover the range of all
of their tokens, putting the caret on the first character of the
param name (if present), otherwise at the start of the first token
(doing so requires adding a last_token_location to the c_parser, so
we can determine the location of the last consumed token).
(b) updates the "note" to use the param location, rather than the
fndecl location
gcc/c/ChangeLog:
* c-decl.c (push_parm_decl): Store c_parm's location into the
PARAM_DECL.
(build_c_parm): Add "loc" param and store it within the c_parm.
* c-parser.c (struct c_parser): Add "last_token_location" field.
(c_parser_consume_token): Store location of the token into the
new field.
(c_parser_declaration_or_fndef): Store params into DECL_ARGUMENTS
when handling a FUNCTION_DECL, if it doesn't already have them.
(c_parser_parameter_declaration): Generate a location for the
parameter, and pass it to the call to build_c_parm.
* c-tree.h (struct c_parm): Add field "loc".
(build_c_parm): Add location_t param.
* c-typeck.c (get_fndecl_argument_location): New function.
(inform_for_arg): New function.
(convert_for_assignment): Use inform_for_arg when dealing with
ic_argpass.
gcc/testsuite/ChangeLog:
* gcc.dg/diagnostic-range-bad-called-object.c: Update expected
underlining for param.
* gcc.dg/param-type-mismatch.c: Update expected results to reflect
highlighting of parameters; add test coverage for trivial
parameter decls, and for callback parameters.
* gcc.dg/pr68533.c: Update location of two errors to reflect
location of params.
From-SVN: r253411
This patch implements a new API entrypoint:
/* Build a vector rvalue from an array of elements.
"vec_type" should be a vector type, created using gcc_jit_type_get_vector.
This API entrypoint was added in LIBGCCJIT_ABI_10; you can test for its
presence using
#ifdef LIBGCCJIT_HAVE_gcc_jit_context_new_rvalue_from_vector
*/
extern gcc_jit_rvalue *
gcc_jit_context_new_rvalue_from_vector (gcc_jit_context *ctxt,
gcc_jit_location *loc,
gcc_jit_type *vec_type,
size_t num_elements,
gcc_jit_rvalue **elements);
gcc/jit/ChangeLog:
* docs/cp/topics/expressions.rst (Vector expressions): New
section.
* docs/topics/compatibility.rst (LIBGCCJIT_ABI_10): New ABI tag.
* docs/topics/expressions.rst (Vector expressions): New section.
* docs/topics/types.rst (gcc_jit_type_get_vector): Add link to
gcc_jit_context_new_rvalue_from_vector.
* jit-common.h (gcc::jit:recording::vector_type): New forward
decl.
* jit-playback.c
(gcc::jit::playback::context::new_rvalue_from_vector): New method.
* jit-playback.h
(gcc::jit::playback::context::new_rvalue_from_vector): New method.
* jit-recording.c: In namespace gcc::jit::
(class comma_separated_string): New class.
(comma_separated_string::comma_separated_string): New ctor,
adapted from recording::call::make_debug_string.
(comma_separated_string::~comma_separated_string): New dtor.
In namespace gcc::jit::recording::
(context::new_rvalue_from_vector): New method.
(type::get_vector): Update for renaming of memento_of_get_vector.
(class memento_of_get_vector): Rename to...
(class vector_type): ..this.
(memento_of_new_rvalue_from_vector::memento_of_new_rvalue_from_vector):
New ctor.
(memento_of_new_rvalue_from_vector::replay_into): New method.
(memento_of_new_rvalue_from_vector::visit_children): New method.
(memento_of_new_rvalue_from_vector::make_debug_string): New
method.
(memento_of_new_rvalue_from_vector::write_reproducer): New method.
(call::make_debug_string): Split out arg-printing code into ctor
for comma_separated_string.
* jit-recording.h: In namespace gcc::jit::recording::
(context::new_rvalue_from_vector): New method.
(type::dyn_cast_vector_type): New virtual function.
(class memento_of_get_vector): Rename to...
(class vector_type): ...this.
(vector_type::unqualified): Remove this vfunc override in favor
of...
(vector_type::get_element_type): ...this new method.
(vector_type::get_num_units): New method.
(vector_type::dyn_cast_vector_type): New vfunc override.
(class memento_of_new_rvalue_from_vector): New class.
* libgccjit++.h (gccjit::context::new_rvalue): Add overload for
vector of rvalue.
* libgccjit.c (gcc_jit_context_new_binary_op): Strip off type
qualifications when checking that both operands have same type.
(gcc_jit_context_new_rvalue_from_vector): New API entrypoint.
* libgccjit.h
(LIBGCCJIT_HAVE_gcc_jit_context_new_rvalue_from_vector): New
macro.
(gcc_jit_context_new_rvalue_from_vector): New API entrypoint.
* libgccjit.map (LIBGCCJIT_ABI_10): New ABI tag.
gcc/testsuite/ChangeLog:
* jit.dg/test-expressions.c (make_test_of_vectors): New function.
(create_code): Call it.
* jit.dg/test-vector-rvalues.cc: New test case.
From-SVN: r253409