PR sanitizer/70541
* asan.c (instrument_derefs): If we get unknown location, extract it
with EXPR_LOCATION.
(maybe_instrument_call): Instrument gimple_call's arguments if needed.
[ARM] PR target/70566 Check that condition register is dead in tst-imm -> lsls-imm Thumb2 peepholes
PR target/70566
* config/arm/thumb2.md (tst + branch-> lsls + branch
peephole below *orsi_not_shiftsi_si): Require that condition
register is dead after the peephole.
(second peephole after the above): Likewise.
Alan Modra [Fri, 8 Apr 2016 02:11:52 +0000 (11:41 +0930)]
PR70117, ppc long double isinf
gcc/
PR target/70117
* builtins.c (fold_builtin_classify): For IBM extended precision,
look at just the high-order double to test for NaN.
(fold_builtin_interclass_mathfn): Similarly for Inf. For isnormal
test just the high double for Inf but both doubles for subnormal
limit.
gcc/testsuite/
* gcc.target/powerpc/pr70117.c: New.
Patrick Palka [Wed, 6 Apr 2016 23:10:14 +0000 (23:10 +0000)]
Fix C++ side of PR c/70436 (missing -Wparentheses warnings)
gcc/cp/ChangeLog:
PR c/70436
* parser.c (cp_parser_iteration_statement): New parameter IF_P.
Pass it through to cp_parser_already_scoped_statement.
(cp_parser_already_scoped_statement): New parameter IF_P. Pass
it through to cp_parser_statement.
(cp_parser_statement): Pass IF_P through to
cp_parser_iteration_statement.
(cp_parser_pragma): Adjust call to
cp_parser_iteration_statement.
gcc/testsuite/ChangeLog:
PR c/70436
* g++.dg/warn/Wparentheses-29.C: New test.
re PR preprocessor/61817 (Inconsistent location of tokens in the expansion list of a built-in macro)
PR preprocessor/61817
PR preprocessor/69391
* internal.h (_cpp_builtin_macro_text): Update decl.
* macro.c (_cpp_builtin_macro_text): Accept location for __LINE__.
(builtin_macro): Accept a second location for __LINE__.
(enter_macro_context): Compute both virtual and real expansion
locations for the macro.
* gcc.dg/pr61817-1.c: New test.
* gcc.dg/pr61817-2.c: New test.
* gcc.dg/pr69391-1.c: New test.
* gcc.dg/pr69391-2.c: New test.
Jakub Jelinek [Wed, 6 Apr 2016 12:47:19 +0000 (14:47 +0200)]
i386.c (ix86_simd_clone_compute_vecsize_and_simdlen): Add support for AVX512F clones...
* config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen):
Add support for AVX512F clones, include them by default for
exported OpenMP declare simd functions. For AVX2 allow simdlen 32
and use it if charasteric type is 8-bit, for AVX512F allow simdlen
up to 128.
Jakub Jelinek [Wed, 6 Apr 2016 12:42:24 +0000 (14:42 +0200)]
re PR middle-end/70550 (-Wuninitialized false positives in OpenMP code)
PR middle-end/70550
* tree.h (OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT): Define.
* gimplify.c (gimplify_adjust_omp_clauses_1): Set it for implicit
firstprivate clauses.
* omp-low.c (lower_send_clauses): Set TREE_NO_WARNING for
OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT !by_ref vars in task contexts.
(lower_omp_target): Set TREE_NO_WARNING for
non-addressable possibly uninitialized vars which are copied into
addressable temporaries or copied for GOMP_MAP_FIRSTPRIVATE_INT.
* c-c++-common/gomp/pr70550-1.c: New test.
* c-c++-common/gomp/pr70550-2.c: New test.
predicates.md (integer_store_memory_operand): Accept REG+D operands with a large offset when reload_in_progress is true.
* config/pa/predicates.md (integer_store_memory_operand): Accept
REG+D operands with a large offset when reload_in_progress is true.
(floating_point_store_memory_operand): Likewise.
Jakub Jelinek [Tue, 5 Apr 2016 21:33:37 +0000 (23:33 +0200)]
re PR c++/70336 (Incorrect Wconversion warning)
PR c++/70336
* match.pd (nested int casts): Limit to GIMPLE.
* c-c++-common/pr70336.c: New test.
* gcc.dg/torture/builtin-isinf_sign-1.c (foo): Guard tests
no longer optimized away at -O0 with #ifndef __OPTIMIZE__.
Patrick Palka [Tue, 5 Apr 2016 16:40:00 +0000 (16:40 +0000)]
Fix PR c++/70452 (regression in C++ parsing performance)
gcc/cp/ChangeLog:
PR c++/70452
* constexpr.c (struct fundef_copy): New struct.
(struct fundef_copies_table_t): New struct.
(fundef_copies_table): New static variable.
(maybe_initialize_fundef_copies_table): New static function.
(get_fundef_copy): New static function.
(save_fundef_copy): New static function.
(cxx_eval_call_expression): Use get_fundef_copy, and
save_fundef_copy.
(constexpr_call_table): Add "deletable" GTY marker.
gcc/testsuite/ChangeLog:
PR c++/70452
* g++.dg/ext/constexpr-vla4.C: New test.
Jakub Jelinek [Tue, 5 Apr 2016 08:15:09 +0000 (10:15 +0200)]
re PR target/70525 (generating 'vpandn' without the mode suffix, gnu as fails to assemble (-mavx512bw))
PR target/70525
* config/i386/sse.md (*andnot<mode>3): Simplify assertions.
Use vpandn<ssemodesuffix> for V16SI/V8DImode, vpandnq for
V32HI/V64QImode, don't use <mask_operand3_1>, fix up formatting.
(*andnot<mode>3_mask): Remove insn with VI12_AVX512VL iterator.
Patrick Palka [Tue, 5 Apr 2016 01:20:00 +0000 (01:20 +0000)]
Remove class cache_map and use ggc hash_maps instead (PR c++/70452)
gcc/cp/ChangeLog:
PR c++/70452
* cp-tree.h (class cache_map): Remove.
* constexpr.c (cv_cache): Change type to
GTY((deletable)) hash_map<tree, tree> *.
(maybe_constant_value): Adjust following the change to cv_cache.
(clear_cv_cache): New static function.
(clear_cv_and_fold_caches): Use it.
* cp-gimplify.c (fold_cache): Change type to
GTY((deletable)) hash_map<tree, tree> *.
(clear_fold_cache): Adjust following the change to fold_cache.
(cp_fold): Likewise.
The config.cache file should be deleted by "make distclean", just like
config.log and config.status . The directory itself is still not deleted
(just like the gotools and libcc1 directories).
gnattools/
PR bootstrap/70173
* Makefile.in (distclean): Also delete config.cache .
Jan Hubicka [Mon, 4 Apr 2016 15:54:39 +0000 (17:54 +0200)]
re PR ipa/66223 (Diagnostic of pure virtual function call broken, including __cxa_pure_virtual)
PR ipa/66223
* ipa-devirt.c (maybe_record_node): Do not optimize cxa_pure_virtual
calls when sanitizing.
(possible_polymorphic_call_target_p)" FIx formating.
* g++.dg/ipa/devirt-51.C: New testcase.
Bill Schmidt [Mon, 4 Apr 2016 15:42:19 +0000 (15:42 +0000)]
re PR middle-end/70457 (ICE (segfault) in gimple_expand_builtin_pow on powerpc64le-linux-gnu)
[gcc]
2016-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Jakub Jelinek <jakub@redhat.com>
PR middle-end/70457
* tree-inline.c (estimate_num_insn): Use gimple_call_builtin_p
to ensure a call statement is compatible with a built-in's
prototype.
* tree-ssa-math-opts.c (pass_optimize_windening_mul::execute):
Likewise.
[gcc/testsuite]
2016-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Jakub Jelinek <jakub@redhat.com>
re PR fortran/67538 (ICE with invalid source allocation)
gcc/fortran/ChangeLog:
2016-04-04 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/67538
* resolve.c (resolve_allocate_expr): Emit error message when no
array spec and no array valued source= expression is given in an
F2008 allocate() for an array to allocate.
gcc/testsuite/ChangeLog:
2016-04-04 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/67538
* gfortran.dg/allocate_with_source_19.f08: New test.
re PR fortran/65795 (Segfault (invalid write) for ALLOCATE statement involving COARRAYS)
gcc/fortran/ChangeLog:
2016-04-04 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/65795
* trans-array.c (gfc_array_allocate): When the array is a coarray,
do not nullyfing its allocatable components in array_allocate, because
the nullify missed the array ref and nullifies the wrong component.
Cosmetics.
gcc/testsuite/ChangeLog:
2016-04-04 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/65795
* gfortran.dg/coarray_allocate_6.f08: New test.
Richard Biener [Mon, 4 Apr 2016 09:30:16 +0000 (09:30 +0000)]
re PR rtl-optimization/70484 (Wrong optimization with aliasing and access via char)
2016-04-04 Richard Biener <rguenther@suse.de>
PR rtl-optimization/70484
* rtl.h (canon_output_dependence): Declare.
* alias.c (canon_output_dependence): New function.
* dse.c (record_store): Use canon_output_dependence rather
than canon_true_dependence.
Jan Hubicka [Mon, 4 Apr 2016 09:26:29 +0000 (11:26 +0200)]
re PR lto/68881 (UNRESOLVED/FAIL: gcc.dg/lto/attr-weakref-1 -O2 -flto)
PR ipa/68881
* cgraph.h (symtab_node::copy_visibility_from): New function.
* symtab.c (symtab_node::copy_visibility_from): New function.
* ipa-visibility.c (optimize_weakref): New function.
(function_and_variable_visibility): Use it.
Martin Liska [Mon, 4 Apr 2016 08:46:51 +0000 (10:46 +0200)]
re PR hsa/70402 (HSA: SBR instruction can be undefined)
Fix PR hsa/70402
PR hsa/70402
* hsa-gen.c (gen_hsa_insns_for_switch_stmt): Guard index
value that is really in range handled by SBR instruction.
* hsa-brig.c (emit_switch_insn): Do not emit unconditional
jump.
* hsa-dump.c (dump_hsa_insn_1): Do not dump default BB.
* hsa.h (hsa_insn_sbr::m_default_bb): Remove field.
Martin Sebor [Sat, 2 Apr 2016 17:14:48 +0000 (17:14 +0000)]
PR c++/67376 - [5/6 regression] Comparison with pointer to past-the-end
PR c++/67376 - [5/6 regression] Comparison with pointer to past-the-end
of array fails inside constant expression
PR c++/70170 - [6 regression] bogus not a constant expression error comparing
pointer to array to null
PR c++/70172 - incorrect reinterpret_cast from integer to pointer error
on invalid constexpr initialization
PR c++/70228 - insufficient detail in diagnostics for a constexpr out of bounds
array subscript
gcc/testsuite/ChangeLog:
2016-04-02 Martin Sebor <msebor@redhat.com>
PR c++/67376
PR c++/70170
PR c++/70172
PR c++/70228
* g++.dg/cpp0x/constexpr-array-ptr10.C: New test.
* g++.dg/cpp0x/constexpr-array-ptr9.C: New test.
* g++.dg/cpp0x/constexpr-nullptr-1.C: New test.
* g++.dg/cpp0x/constexpr-array5.C: Adjust text of expected diagnostic.
* g++.dg/cpp0x/constexpr-string.C: Same.
* g++.dg/cpp0x/constexpr-wstring2.C: Same.
* g++.dg/cpp0x/pr65398.C: Same.
* g++.dg/ext/constexpr-vla1.C: Same.
* g++.dg/ext/constexpr-vla2.C: Same.
* g++.dg/ext/constexpr-vla3.C: Same.
* g++.dg/ubsan/pr63956.C: Same.
gcc/cp/ChangeLog:
2016-04-02 Martin Sebor <msebor@redhat.com>
PR c++/67376
PR c++/70170
PR c++/70172
PR c++/70228
* constexpr.c (diag_array_subscript): New function.
(cxx_eval_array_reference): Detect out of bounds array indices.
gcc/ChangeLog:
2016-04-02 Martin Sebor <msebor@redhat.com>
PR c++/67376
* fold-const.c (maybe_nonzero_address): New function.
(fold_comparison): Call it. Fold equality and relational
expressions involving null pointers.
(tree_single_nonzero_warnv_p): Call maybe_nonzero_address.
Jason Merrill [Sat, 2 Apr 2016 01:35:45 +0000 (21:35 -0400)]
re PR c++/70449 (ICE with -Wall on valid code on x86_64-linux-gnu in pp_string, at pretty-print.c:928)
PR c++/70449
PR c++/70344
* pt.c (instantiate_decl): A function isn't fully defined if
DECL_INITIAL is error_mark_node.
* constexpr.c (cxx_eval_call_expression): Likewise.
Jakub Jelinek [Fri, 1 Apr 2016 16:08:21 +0000 (18:08 +0200)]
re PR rtl-optimization/70467 (Useless "and [esp],-1" emitted on AND with uint64_t variable)
PR rtl-optimization/70467
* config/i386/i386.md (*add<dwi>3_doubleword, *sub<dwi>3_doubleword):
If low word of the last operand is 0, just emit addition/subtraction
for the high word.
Andreas Krebbel [Fri, 1 Apr 2016 15:35:54 +0000 (15:35 +0000)]
PR70404 S/390: Fix insv expansion.
While the expander accepts general_operand as src operand the risbg
pattern only immediate_operand. Unfortunately the expander called
force_reg only for VOIDmode constants missing things like
e.g. symbol_refs. Fixed with the attached patch.
gcc/ChangeLog:
2016-04-01 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/70404
* config/s390/s390.c (s390_expand_insv): Check for everything
constant instead of just VOIDmode stuff.
re PR target/70496 (inadvertent change to ASM_APP_OFF for .arm / .thumb directives.)
Fix PR target/70496
While doing the unified asm rewrite - I inadvertently changed the
meaning of ASM_APP_OFF which causes failures when folks who know what
they are doing switch between arm and thumb states within a
function. The intent of the unified asm rewrite was not to affect any
inline assembler code in that it would remain in divided syntax by
default and switching back to unified asm in normal compiled code
after the inline assembler block. Thanks to Jim Wilson for pointing it
out on the linaro list.
Fixed thusly and a test is added. Tested arm-none-eabi cross and
applied.
Martin Liska [Thu, 31 Mar 2016 17:28:29 +0000 (19:28 +0200)]
re PR hsa/70399 (HSA: Wrong emission of st_align(4)_u8 HSAIL insn)
Fix PR hsa/70399
PR hsa/70399
* hsa-brig.c (hsa_op_immed::emit_to_buffer): Emit either
a tree value or an immediate integer value to a buffer
that is eventually copied to a BRIG section.
(emit_immediate_operand): Call the function here.
* hsa-dump.c (dump_hsa_immed): Remove checking assert.
* hsa-gen.c (hsa_op_immed::hsa_op_immed): Remove initialization
of class' fields that are removed.
(hsa_op_immed::~hsa_op_immed): Remove deinitialization.
* hsa.h (class hsa_op_immed): Remove m_brig_repr and
m_brig_repr_size fields.
Martin Liska [Thu, 31 Mar 2016 17:10:48 +0000 (19:10 +0200)]
HSA: handle alignment of string builtins (PR hsa/70391)
PR hsa/70391
* hsa-gen.c (hsa_function_representation::update_dominance): New
function.
(convert_addr_to_flat_segment): Likewise.
(gen_hsa_memory_set): New alignment argument.
(gen_hsa_ctor_assignment): Likewise.
(gen_hsa_insns_for_single_assignment): Provide alignment
to gen_hsa_ctor_assignment.
(gen_hsa_insns_for_direct_call): Add new argument.
(expand_lhs_of_string_op): New function.
(expand_string_operation_builtin): Likewise.
(expand_memory_copy): New function.
(expand_memory_set): New function.
(gen_hsa_insns_for_call): Use HOST_WIDE_INT.
(convert_switch_statements): Change signature.
(generate_hsa): Use a return value of the function.
(pass_gen_hsail::execute): Do not call
convert_switch_statements here.
* hsa-regalloc.c (hsa_regalloc): Call update_dominance.
* hsa.h (hsa_function_representation::m_modified_cfg):
New flag.
(hsa_function_representation::update_dominance): New function.
Martin Liska [Thu, 31 Mar 2016 17:10:15 +0000 (19:10 +0200)]
HSA: support alignment for hsa_symbols (PR hsa/70391)
PR hsa/70391
* hsa-brig.c (emit_directive_variable): Emit alignment
according to hsa_symbol::m_align.
* hsa-dump.c (hsa_byte_alignment): Move the function to
another file.
(dump_hsa_symbol): Dump alignment of HSA symbols.
* hsa-gen.c (get_symbol_for_decl): Set-up alignment
of a symbol.
(gen_hsa_addr_with_align): New function.
(hsa_bitmemref_alignment): Use newly added function.
(gen_hsa_insns_for_load): Likewise.
(gen_hsa_insns_for_store): Likewise.
(gen_hsa_memory_copy): New argument added.
(gen_hsa_insns_for_single_assignment): Respect
alignment for assignments processed via
gen_hsa_memory_copy.
(gen_hsa_insns_for_direct_call): Likewise.
(gen_hsa_insns_for_return): Likewise.
(gen_function_def_parameters): Set default
alignment.
* hsa.c (hsa_object_alignment): New function.
(hsa_byte_alignment): Pasted function.
* hsa.h (hsa_symbol::m_align): New field.
re PR target/70292 (ICE in verify_target_availability, at sel-sched.c:1584 with -fno-inline -fno-dce -fschedule-insns -fselective-scheduling -fno-tree-dce -O1)
PR target/70292
* gcc.c-torture/pr70292.c: New test.
Jakub Jelinek [Thu, 31 Mar 2016 13:00:52 +0000 (15:00 +0200)]
re PR rtl-optimization/70460 (Miscompilation of glibc on i686-linux starting with r234101)
PR rtl-optimization/70460
* ira.c (indirect_jump_optimize): Don't substitute LABEL_REF
with operand from REG_LABEL_OPERAND, instead substitute
SET_SRC or REG_EQUAL note content if it is a LABEL_REF.
Don't do anything for REG_NON_LOCAL_GOTO jumps.
Bin Cheng [Thu, 31 Mar 2016 08:57:13 +0000 (08:57 +0000)]
tree-ssa-loop-ivopts.c (struct comp_cost): New scrach field.
* tree-ssa-loop-ivopts.c (struct comp_cost): New scrach field.
(no_cost, infinite_cost): Initialize the new field.
(get_computation_cost_at): Record setup cost.
(determine_use_iv_cost_address): Skip cost computation for sub
uses if we can estimate it without losing accuracy.