aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-05-08Fix availability compute during VN DOM eliminationRichard Biener5-20/+76
This fixes an issue with redundant store elimination in FRE/PRE which, when invoked by the DOM elimination walk, ends up using possibly stale availability data from the RPO walk. It also fixes a missed optimization during valueization of addresses by making sure to use get_addr_base_and_unit_offset_1 which can valueize and adjusting that to also valueize ARRAY_REFs low-bound. 2020-05-08 Richard Biener <rguenther@suse.de> * tree-ssa-sccvn.c (rpo_avail): Change type to eliminate_dom_walker *. (eliminate_with_rpo_vn): Adjust rpo_avail to make vn_valueize use the DOM walker availability. (vn_reference_fold_indirect): Use get_addr_base_and_unit_offset_1 with vn_valueize as valueization callback. (vn_reference_maybe_forwprop_address): Likewise. * tree-dfa.c (get_addr_base_and_unit_offset_1): Also valueize array_ref_low_bound. * gnat.dg/opt83.adb: New testcase.
2020-05-08match.pd: A ^ ((A ^ B) & -(C cmp D)) -> (C cmp D) ? B : A simplification ↵Jakub Jelinek4-0/+85
[PR94786] We already have x - ((x - y) & -(z < w)) and x + ((y - x) & -(z < w)) simplifications, this one adds x ^ ((x ^ y) & -(z < w)) (not merged using for because of the :c that can be present on bit_xor and can't on minus). 2020-05-08 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94786 * match.pd (A ^ ((A ^ B) & -(C cmp D)) -> (C cmp D) ? B : A): New simplification. * gcc.dg/tree-ssa/pr94786.c: New test.
2020-05-08ix86: Add peephole2 for *add<mode>3_cc_overflow_1 followed by matching ↵Jakub Jelinek4-0/+37
memory store [PR94857] The following peephole2 changes: - addl (%rdi), %esi + xorl %eax, %eax + addl %esi, (%rdi) setc %al - movl %esi, (%rdi) - movzbl %al, %eax ret on the testcase. *add<mode>3_cc_overflow_1, being an add{l,q} insn, is commutative, so if TARGET_READ_MODIFY_WRITE we can replace addl (%rdi), %esi; movl %esi, (%rdi) with addl %esi, (%rdi) if %esi is dead after those two insns. 2020-05-08 Jakub Jelinek <jakub@redhat.com> PR target/94857 * config/i386/i386.md (peephole2 after *add<mode>3_cc_overflow_1): New define_peephole2. * gcc.target/i386/pr94857.c: New test.
2020-05-08tree: Avoid variable sharing in get_narrower [PR94724]Jakub Jelinek2-1/+5
On Thu, May 07, 2020 at 02:45:29PM +0200, Thomas Schwinge wrote: > >>+ for (tree op = win; TREE_CODE (op) == COMPOUND_EXPR; > > ..., and new 'op' variable here. > > >>+ op = TREE_OPERAND (op, 1)) > >>+ v.safe_push (op); > >>+ FOR_EACH_VEC_ELT_REVERSE (v, i, op) > >>+ ret = build2_loc (EXPR_LOCATION (op), COMPOUND_EXPR, > >>+ TREE_TYPE (win), TREE_OPERAND (op, 0), > >>+ ret); > >>+ return ret; > >> } > >> while (TREE_CODE (op) == NOP_EXPR) > >> { There is no reason for the shadowing and op at this point acts as a temporary and will be overwritten in FOR_EACH_VEC_ELT_REVERSE anyway. So, we can just s/tree // here. 2020-05-08 Jakub Jelinek <jakub@redhat.com> PR middle-end/94724 * tree.c (get_narrower): Reuse the op temporary instead of shadowing it.
2020-05-08match.pd: Canonicalize (X + (X >> (prec - 1))) ^ (X >> (prec - 1)) to abs ↵Jakub Jelinek4-0/+28
(X) [PR94783] The following patch canonicalizes M = X >> (prec - 1); (X + M) ^ M for signed integral types into ABS_EXPR (X). For X == min it is already UB because M is -1 and min + -1 is UB, so we can use ABS_EXPR rather than say ABSU_EXPR + cast. The backend might then emit the abs code back using the shift and addition and xor if it is the best sequence for the target, but could do something different that is better. 2020-05-08 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94783 * match.pd ((X + (X >> (prec - 1))) ^ (X >> (prec - 1)) to abs (X)): New simplification. * gcc.dg/tree-ssa/pr94783.c: New test.
2020-05-08match.pd: Optimize ffs of known non-zero arg into ctz + 1 [PR94956]Jakub Jelinek4-0/+45
The ffs expanders on several targets (x86, ia64, aarch64 at least) emit a conditional move or similar code to handle the case when the argument is 0, which makes the code longer. If we know from VRP that the argument will not be zero, we can (if the target has also an ctz expander) just use ctz which is undefined at zero and thus the expander doesn't need to deal with that. 2020-05-08 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94956 * match.pd (FFS): Optimize __builtin_ffs* of non-zero argument into __builtin_ctz* + 1 if direct IFN_CTZ is supported. * gcc.target/i386/pr94956.c: New test.
2020-05-08match.pd: Simplify unsigned A - B - 1 >= A to B >= A [PR94913]Jakub Jelinek4-2/+52
Implemented thusly. The TYPE_OVERFLOW_WRAPS is there just because the pattern above it has it too, if you want, I can throw it away from both. 2020-05-08 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94913 * match.pd (A - B + -1 >= A to B >= A): New simplification. (A - B > A to A < B): Don't test TYPE_OVERFLOW_WRAPS which is always true for TYPE_UNSIGNED integral types. * gcc.dg/tree-ssa/pr94913.c: New test.
2020-05-08csa: Fix --enable-checking=yes,df bootstrap failure in csa [PR94961]Jakub Jelinek5-9/+24
My recent combine-stack-adj.c change broke df checking bootstrap, while most of the changes are done through validate_change/confirm_changes which update df info, the removal of REG_EQUAL notes didn't update df info. 2020-05-08 Jakub Jelinek <jakub@redhat.com> PR bootstrap/94961 PR rtl-optimization/94516 * rtl.h (remove_reg_equal_equiv_notes): Add a bool argument defaulted to false. * rtlanal.c (remove_reg_equal_equiv_notes): Add no_rescan argument. Call df_notes_rescan if that argument is not true and returning true. * combine.c (adjust_for_new_dest): Pass true as second argument to remove_reg_equal_equiv_notes. * postreload.c (reload_combine_recognize_pattern): Don't call df_notes_rescan.
2020-05-08Daily bump.GCC Administrator1-1/+1
2020-05-07rs6000: Tests for setnbcSegher Boessenkool8-0/+99
2020-05-07 Segher Boessenkool <segher@kernel.crashing.org> * gcc.target/powerpc/setnbc.h: New. * gcc.target/powerpc/setnbceq.c: New. * gcc.target/powerpc/setnbcge.c: New. * gcc.target/powerpc/setnbcgt.c: New. * gcc.target/powerpc/setnbcle.c: New. * gcc.target/powerpc/setnbclt.c: New. * gcc.target/powerpc/setnbcne.c: New.
2020-05-07rs6000: New insns setnbc and setnbcrSegher Boessenkool2-4/+31
setnbc[r] is like setbc[r], but it writes -1 instead of 1 to the GPR. 2020-05-07 Segher Boessenkool <segher@kernel.crashing.org> * config/rs6000/rs6000.md (*setnbc_<un>signed_<GPR:mode>): New define_insn. (*setnbcr_<un>signed_<GPR:mode>): New define_insn. (*neg_eq_<mode>): Avoid for TARGET_FUTURE; add missing && 1. (*neg_ne_<mode>): Likewise.
2020-05-07rs6000: Tests for setbcSegher Boessenkool8-0/+99
2020-05-07 Segher Boessenkool <segher@kernel.crashing.org> * gcc.target/powerpc/setbc.h: New. * gcc.target/powerpc/setbceq.c: New. * gcc.target/powerpc/setbcge.c: New. * gcc.target/powerpc/setbcgt.c: New. * gcc.target/powerpc/setbcle.c: New. * gcc.target/powerpc/setbclt.c: New. * gcc.target/powerpc/setbcne.c: New.
2020-05-07rs6000: New insns setbc and setbcrSegher Boessenkool2-11/+76
New instructions setbc and setbcr. setbc sets a GPR to 1 if some condition register bit is set, and 0 otherwise; setbcr does it the other way around. 2020-05-07 Segher Boessenkool <segher@kernel.crashing.org> * config/rs6000/rs6000.md (setbc_<un>signed_<GPR:mode>): New define_insn. (*setbcr_<un>signed_<GPR:mode>): Likewise. (cstore<mode>4): Use setbc[r] if available. (<code><GPR:mode><GPR2:mode>2_isel): Avoid for TARGET_FUTURE. (eq<mode>3): Use setbc for TARGET_FUTURE. (*eq<mode>3): Avoid for TARGET_FUTURE. (ne<mode>3): Replace :P with :GPR; use setbc for TARGET_FUTURE; else for non-Pmode, use gen_eq and gen_xor. (*ne<mode>3): Avoid for TARGET_FUTURE. (*eqsi3_ext<mode>): Avoid for TARGET_FUTURE; fix missing && 1.
2020-05-07Move all patterns and expanders out of h8300.md and into other files that ↵Jeff Law15-3144/+3159
are included into h8300.md * config/h8300/h8300.md: Move expanders and patterns into files based on functionality. * config/h8300/addsub.md: New file. * config/h8300/bitfield.md: New file * config/h8300/combiner.md: New file * config/h8300/divmod.md: New file * config/h8300/extensions.md: New file * config/h8300/jumpcall.md: New file * config/h8300/logical.md: New file * config/h8300/movepush.md: New file * config/h8300/multiply.md: New file * config/h8300/other.md: New file * config/h8300/proepi.md: New file * config/h8300/shiftrotate.md: New file * config/h8300/testcompare.md: New file commit da1de1d91088ac506c1bed0fba9b0f04c5b8c876
2020-05-07 More cleanups. Merging patterns with iterators, split out peepholes, etc.Jeff Law3-1805/+1649
* config/h8300/h8300.md (adds/subs splitters): Merge into single splitter. (negation expanders and patterns): Simplify and combine using iterators. (one_cmpl expanders and patterns): Likewise. (tablejump, indirect_jump patterns ): Likewise. (shift and rotate expanders and patterns): Likewise. (absolute value expander and pattern): Drop expander, rename pattern to just "abssf2" (peephole2 patterns): Move into... * config/h8300/peepholes.md: New file.
2020-05-07 Drop original H8/300 support. This should generate identical code for ↵Jeff Law8-1639/+683
the remaining subtargets. Defaults to H8/300H codegen * config/h8300/constraints.md (L and N): Simplify now that we're not longer supporting the original H8/300 chip. * config/h8300/elf.h (LINK_SPEC): Likewise. Default to H8/300H. * config/h8300/h8300.c (shift_alg_qi): Drop H8/300 support. (shift_alg_hi, shift_alg_si): Similarly. (h8300_option_overrides): Similarly. Default to H8/300H. If compiling for H8/S, then turn off H8/300H. Do not update the shift_alg tables for H8/300 port. (h8300_emit_stack_adjustment): Remove support for H8/300. Simplify where possible. (push, split_adds_subs, h8300_rtx_costs): Likewise. (h8300_print_operand, compute_mov_length): Likewise. (output_plussi, compute_plussi_length): Likewise. (compute_plussi_cc, output_logical_op): Likewise. (compute_logical_op_length, compute_logical_op_cc): Likewise. (get_shift_alg, h8300_shift_needs_scratch): Likewise. (output_a_shift, compute_a_shift_length): Likewise. (output_a_rotate, compute_a_rotate_length): Likewise. (output_simode_bld, h8300_hard_regno_mode_ok): Likewise. (h8300_modes_tieable_p, h8300_return_in_memory): Likewise. * config/h8300/h8300.h (TARGET_CPU_CPP_BUILTINS): Likewise. (attr_cpu, TARGET_H8300): Remove. (TARGET_DEFAULT): Update. (UNITS_PER_WORD, PARM_BOUNDARY): Simplify where possible. (BIGGEST_ALIGNMENT, STACK_BOUNDARY): Likewise. (CONSTANT_ADDRESS_P, MOVE_MAX, Pmode): Likewise. (SIZE_TYPE, POINTER_SIZE, ASM_WORD_OP): Likewise. * config/h8300/h8300.md: Simplify patterns throughout. * config/h8300/t-h8300: Update multilib configuration. @@ -82,11 +82,9 @@
2020-05-07Drop more COFF support from H8 portJeff Law2-6/+3
* config/h8300/h8300.h (LINK_SPEC): Remove. (USER_LABEL_PREFIX): Likewise.
2020-05-07Remove remnants of COFF support which was dropped eons ago.Jeff Law2-21/+5
* config/h8300/h8300.c (h8300_asm_named_section): Remove. (h8300_option_override): Remove remnants of COFF support.
2020-05-07libstdc++: Fix whitespace in ChangelogJonathan Wakely1-8/+8
2020-05-07libstdc++: Fix some C++20 algorithms to work in parallel modeJonathan Wakely4-23/+39
Some new algorithms need to use _GLIBCXX_STD_A to refer to the "normal" version of the algorithm, to workaround the namespace dance done for parallel mode. PR libstdc++/94971 (partial) * include/bits/ranges_algo.h (ranges::__sample_fn): Qualify std::sample using macro to work in parallel mode. (__sort_fn): Likewise for std::sort. (ranges::__nth_element_fn): Likewise for std::nth_element. * include/bits/stl_algobase.h (lexicographical_compare_three_way): Likewise for std::__min_cmp. * include/parallel/algobase.h (lexicographical_compare_three_way): Add to namespace std::__parallel.
2020-05-07libstdc++: Make relational operators work with const guarded iterators (PR ↵Jonathan Wakely2-12/+24
92472) This is a correct fix for the incorrect cppcheck suggestion to make these parameters const. In order to that, the dereference operators need to be const. The conversions to the underlying iterator can be const too. PR c/92472 * include/parallel/multiway_merge.h (_GuardedIterator::operator*) (_GuardedIterator::operator _RAIter, _UnguardedIterator::operator*) (_UnguardedIterator::operator _RAIter): Add const qualifier. (operator<(_GuardedIterator&, _GuardedIterator&) (operator<=(_GuardedIterator&, _GuardedIterator&) (operator<(_UnguardedIterator&, _UnguardedIterator&) (operator<=(_UnguardedIterator&, _UnguardedIterator&): Change parameters to const references.
2020-05-07coroutines: Improve error recovery [PR94817, PR94829].Iain Sandoe14-16/+195
When we have completely missing key information (e.g. the coroutine_traits) or a partially transformed function body, we need to try and balance returning useful information about failures with the possibility that some part of the diagnostics machinery or following code will not be able to handle the state. The PRs (and revised testcase) point to cases where that processing has failed. This revises the process to avoid special handling for the ramp, and falls back on the same code used for regular function fails. There are test-cases (in addition to the ones for the PRs) that now cover all early exit points [where the transforms are considered to have failed in a manner that does not allow compilation to continue]. gcc/cp/ChangeLog: 2020-05-07 Iain Sandoe <iain@sandoe.co.uk> PR c++/94817 PR c++/94829 * coroutines.cc (morph_fn_to_coro): Set unformed outline functions to error_mark_node. For early error returns suppress warnings about missing ramp return values. Fix reinstatement of the function body on pre-existing initial error. * decl.c (finish_function): Use the normal error path for fails in the ramp function, do not try to compile the helpers if the transform fails. gcc/testsuite/ChangeLog: 2020-05-07 Iain Sandoe <iain@sandoe.co.uk> PR c++/94817 PR c++/94829 * g++.dg/coroutines/coro-missing-final-suspend.C: New test. * g++.dg/coroutines/coro-missing-initial-suspend.C: New test. * g++.dg/coroutines/coro-missing-promise-yield.C: Check for continuation of compilation. * g++.dg/coroutines/coro-missing-promise.C: Likewise. * g++.dg/coroutines/coro-missing-ret-value.C: Likewise * g++.dg/coroutines/coro-missing-ret-void.C: Likewise * g++.dg/coroutines/coro-missing-ueh-3.C: Likewise * g++.dg/coroutines/pr94817.C: New test. * g++.dg/coroutines/pr94829.C: New test.
2020-05-07c-family: Add "nonstatic" to badwords.Marek Polacek2-0/+5
* c-format.c (badwords): Add "nonstatic".
2020-05-07c++: Detect long double -> double narrowing [PR94590]Marek Polacek4-1/+35
This PR points out that we don't detect long double -> double narrowing when long double happens to have the same precision as double; on x86_64 this can be achieved by -mlong-double-64. [dcl.init.list]#7.2 specifically says "from long double to double or float, or from double to float", but check_narrowing only checks TYPE_PRECISION (type) < TYPE_PRECISION (ftype) so we need to handle the other cases too, e.g. by same_type_p as in the following patch. PR c++/94590 - Detect long double -> double narrowing. * typeck2.c (check_narrowing): Detect long double -> double narrowing even when double and long double have the same precision. Make it handle conversions to float too. * g++.dg/cpp0x/Wnarrowing18.C: New test.
2020-05-07c++: Fix crash with template spec in different namespace [PR94255]Marek Polacek4-1/+34
This is an ICE on invalid, because we're specializing S::foo in the wrong namespace. cp_parser_class_specifier_1 parses S::foo in M and then it tries to push the nested-name-specifier of foo, which is S. By that, we're breaking the assumption of push_inner_scope that the pushed scope must be a scope nested inside current scope: current scope is M, but the namespace context of S is N, and N is not nested in M, so we fell into an infinite loop in push_inner_scope_r. (cp_parser_class_head called check_specialization_namespace which already gave a permerror.) PR c++/94255 * parser.c (cp_parser_class_specifier_1): Check that the scope is nested inside current scope before pushing it. * g++.dg/template/spec41.C: New test.
2020-05-07Fix bogus calls to set_rtx_cost.Alan Modra3-4/+12
* tree-ssa-reassoc.c (optimize_range_tests_to_bit_test): Replace set_rtx_cost with set_src_cost. * tree-switch-conversion.c (bit_test_cluster::emit): Likewise.
2020-05-07Check alignment for no peeling gaps handlingKewen Lin2-9/+18
* gcc/tree-vect-stmts.c (vectorizable_load): Check alignment to avoid redundant half vector handlings for no peeling gaps.
2020-05-07Wrap global variables in tree-ssa-operands.c into a class.Giuliano Belinassi2-117/+216
* tree-ssa-operands.c (operands_scanner): New class. (operands_bitmap_obstack): Remove. (n_initialized): Remove. (build_uses): Move to operands_scanner class. (build_vuse): Same as above. (build_vdef): Same as above. (verify_ssa_operands): Same as above. (finalize_ssa_uses): Same as above. (cleanup_build_arrays): Same as above. (finalize_ssa_stmt_operands): Same as above. (start_ssa_stmt_operands): Same as above. (append_use): Same as above. (append_vdef): Same as above. (add_virtual_operand): Same as above. (add_stmt_operand): Same as above. (get_mem_ref_operands): Same as above. (get_tmr_operands): Same as above. (maybe_add_call_vops): Same as above. (get_asm_stmt_operands): Same as above. (get_expr_operands): Same as above. (parse_ssa_operands): Same as above. (finalize_ssa_defs): Same as above. (build_ssa_operands): Same as above, plus create a C-like wrapper. (update_stmt_operands): Create an instance of operands_scanner.
2020-05-07c++: Implement P1957R2, T* to bool should be considered narrowing.Marek Polacek4-4/+16
This was approved in the Prague 2020 WG21 meeting so let's adjust the comment. Since it's supposed to be a DR I think we should no longer limit it to C++20. P1957R2 * typeck2.c (check_narrowing): Consider T* to bool narrowing in C++11 and up. * g++.dg/cpp0x/initlist92.C: Don't expect an error in C++20 only.
2020-05-07ipa/94947 - avoid using externally_visible_p ()Richard Biener2-4/+16
externally_visible_p wasn't the correct predicate to use (even if it worked), instead we should use DECL_EXTERNAL || TREE_PUBLIC. 2020-05-07 Richard Biener <rguenther@suse.de> PR ipa/94947 * tree-ssa-structalias.c (refered_from_nonlocal_fn): Use DECL_EXTERNAL || TREE_PUBLIC instead of externally_visible. (refered_from_nonlocal_var): Likewise. (ipa_pta_execute): Likewise.
2020-05-07Fix various dg directives.Manfred Schwarb34-60/+94
* gcc.dg/20050121-1.c: Fix broken dg directives. * gcc.dg/analzyer/pr93382.c: Likewise. * gcc.dg/autopar/pr68460.c: Likewise. * gcc.dg/c90-fordecl-1.c: Likewise. * gcc.dg/cpp/trad/funlike-5.c: Likewise. * gcc.dg/debug/dwarf2/dwarf-dfp.c: Likewise. * gcc.dg/debug/dwarf2/dwarf-float.c: Likewise. * gcc.dg/lto/pr52634_0.c: Likewise. * gcc.dg/pr32069.c: Likewise. * gcc.dg/pr35445.c: Likewise. * gcc.dg/pr40172-3.c: Likewise. * gcc.dg/pr87347.c: Likewise. * gcc.dg/pr88660.c: Likewise. * gcc.dg/pr89689.c: Likewise. * gcc.dg/sinatan-2.c: Likewise. * gcc.dg/sinhatanh-1.c: Likewise. * gcc.dg/sinhovercosh-1.c: Likewise. * gcc.dg/tls/opt-9.c: Likewise. * gcc.dg/torture/builtins-1.c: Likewise. * gcc.dg/torture/pr51106-1.c: Likewise. * gcc.dg/torture/pr51106-2.c: Likewise. * gcc.dg/torture/pr80281.c: Likewise. * gcc.dg/torture/pr92252.c: Likewise. * gcc.dg/tree-ssa/pr79448-2.c: Likewise. * gcc.dg/tree-ssa/pr79448.c: Likewise. * gcc.dg/tree-ssa/pr92163.c: Likewise. * gcc.dg/tree-ssa/reassoc-28.c: Likewise. * gcc.dg/tree-ssa/upcast-1.c: Likewise. * gcc.dg/two-types-6.c: Likewise. * gcc.dg/ubsan/c-shift-1.c: Likewise. * gcc.dg/var-expand3.c: Likewise. * gcc.dg/vect/costmodel/x86_64/costmodel-pr30843.c: Likewise. * gcc.dg/vect/pr71264.c: Likewise.
2020-05-07c++: Fix spelling of non-staticMarek Polacek13-22/+34
I was looking at DR 296 and noticed that we say "nonstatic" instead of "non-static", which is the version the standard uses. So this patch fixes the spelling throughout the front end. Did not check e.g. non-dependent or any other. * decl.c (grok_op_properties): Fix spelling of non-static. * typeck.c (build_class_member_access_expr): Likewise. * g++.dg/other/operator1.C: Adjust expected message. * g++.dg/overload/operator2.C: Likewise. * g++.dg/template/error30.C: Likewise. * g++.old-deja/g++.jason/operator.C: Likewise.
2020-05-07Fix minor typos in comments that affected syntax highlighting.Erick Ochoa2-4/+8
* gcc/tree-ssa-struct-alias.c: Fix comments
2020-05-07Fix optindex entries for 2 options.Martin Liska2-1/+6
* doc/invoke.texi: Fix 2 optindex entries.
2020-05-07extend DECL_GIMPLE_REG_P to all typesRichard Biener32-164/+194
This extends DECL_GIMPLE_REG_P to all types so we can clear TREE_ADDRESSABLE even for integers with partial defs, not just complex and vector variables. To make that transition easier the patch inverts DECL_GIMPLE_REG_P to DECL_NOT_GIMPLE_REG_P since that makes the default the current state for all other types besides complex and vectors. For the testcase in PR94703 we're able to expand the partial def'ed local integer to a register then, producing a single movl rather than going through the stack. On i?86 this execute FAILs gcc.dg/torture/pr71522.c because we now expand a round-trip through a long double automatic var to a register fld/fst which normalizes the value. For that during RTL expansion we're looking for problematic punnings of decls and avoid pseudos for those - I chose integer or BLKmode accesses on decls with modes where precision doesn't match bitsize which covers the XFmode case. 2020-05-07 Richard Biener <rguenther@suse.de> PR middle-end/94703 * tree-core.h (tree_decl_common::gimple_reg_flag): Rename ... (tree_decl_common::not_gimple_reg_flag): ... to this. * tree.h (DECL_GIMPLE_REG_P): Rename ... (DECL_NOT_GIMPLE_REG_P): ... to this. * gimple-expr.c (copy_var_decl): Copy DECL_NOT_GIMPLE_REG_P. (create_tmp_reg): Simplify. (create_tmp_reg_fn): Likewise. (is_gimple_reg): Check DECL_NOT_GIMPLE_REG_P for all regs. * gimplify.c (create_tmp_from_val): Simplify. (gimplify_bind_expr): Likewise. (gimplify_compound_literal_expr): Likewise. (gimplify_function_tree): Likewise. (prepare_gimple_addressable): Set DECL_NOT_GIMPLE_REG_P. * asan.c (create_odr_indicator): Do not clear DECL_GIMPLE_REG_P. (asan_add_global): Copy it. * cgraphunit.c (cgraph_node::expand_thunk): Force args to be GIMPLE regs. * function.c (gimplify_parameters): Copy DECL_NOT_GIMPLE_REG_P. * ipa-param-manipulation.c (ipa_param_body_adjustments::common_initialization): Simplify. (ipa_param_body_adjustments::reset_debug_stmts): Copy DECL_NOT_GIMPLE_REG_P. * omp-low.c (lower_omp_for_scan): Do not set DECL_GIMPLE_REG_P. * sanopt.c (sanitize_rewrite_addressable_params): Likewise. * tree-cfg.c (make_blocks_1): Simplify. (verify_address): Do not verify DECL_GIMPLE_REG_P setting. * tree-eh.c (lower_eh_constructs_2): Simplify. * tree-inline.c (declare_return_variable): Adjust and generalize. (copy_decl_to_var): Copy DECL_NOT_GIMPLE_REG_P. (copy_result_decl_to_var): Likewise. * tree-into-ssa.c (pass_build_ssa::execute): Adjust comment. * tree-nested.c (create_tmp_var_for): Simplify. * tree-parloops.c (separate_decls_in_region_name): Copy DECL_NOT_GIMPLE_REG_P. * tree-sra.c (create_access_replacement): Adjust and generalize partial def support. * tree-ssa-forwprop.c (pass_forwprop::execute): Set DECL_NOT_GIMPLE_REG_P on decls we introduce partial defs on. * tree-ssa.c (maybe_optimize_var): Handle clearing of TREE_ADDRESSABLE and setting/clearing DECL_NOT_GIMPLE_REG_P independently. * lto-streamer-out.c (hash_tree): Hash DECL_NOT_GIMPLE_REG_P. * tree-streamer-out.c (pack_ts_decl_common_value_fields): Stream DECL_NOT_GIMPLE_REG_P. * tree-streamer-in.c (unpack_ts_decl_common_value_fields): Likewise. * cfgexpand.c (avoid_type_punning_on_regs): New. (discover_nonconstant_array_refs): Call avoid_type_punning_on_regs to avoid unsupported mode punning. lto/ * lto-common.c (compare_tree_sccs_1): Compare DECL_NOT_GIMPLE_REG_P. c/ * gimple-parser.c (c_parser_parse_ssa_name): Do not set DECL_GIMPLE_REG_P. cp/ * optimize.c (update_cloned_parm): Copy DECL_NOT_GIMPLE_REG_P. * gcc.dg/tree-ssa/pr94703.c: New testcase.
2020-05-07testsuite: Improve g++.dg/ext/attr-parm-1.C testcase [PR94946]Jakub Jelinek2-2/+12
The testcase in the current form doesn't FAIL without the patch on x86_64-linux unless also testing with -m32; as that the 64-bit testing on that target is probably way more common, and we can use also attributes that FAIL without the patch with -m64, the following patch adjusts the test, so that it FAILs without the patch for both -m64 and -m32 (but not -mx32) and PASSes with the patch. 2020-05-07 Jakub Jelinek <jakub@redhat.com> PR c++/94946 * g++.dg/ext/attr-parm-1.C: Enable the test also for lp64 x86, use sysv_abi and ms_abi attributes in that case instead of fastcall and no attribute.
2020-05-07c-family: Fix error-recovery ICE on __builtin_speculation_safe_value [PR94968]Jakub Jelinek4-1/+24
If the second argument of __builtin_speculation_safe_value is error_mark_node (or has such a type), we ICE during useless_typ_conversion_p. 202-05-07 Jakub Jelinek <jakub@redhat.com> PR c/94968 * c-common.c (speculation_safe_value_resolve_params): Return false if error_operand_p (val2). (resolve_overloaded_builtin) <case BUILT_IN_SPECULATION_SAFE_VALUE_N>: Remove extraneous semicolon. * gcc.dg/pr94968.c: New test.
2020-05-07AArch32: fix bootstrap failureAlex Coplan2-2/+7
The attached patch fixes a bootstrap failure on AArch32 introduced by https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=308bc496884706af4b3077171cbac684c7a6f7c6 This makes the declaration of arm_add_stmt_cost match the definition, and removes the redundant class keyword from the definition. 2020-05-07 Alex Coplan <alex.coplan@arm.com> * config/arm/arm.c (arm_add_stmt_cost): Fix declaration, remove class from definition.
2020-05-07tree-optimization/57359 - rewrite SM codeRichard Biener7-117/+600
This rewrites store-motion to process candidates where we can ensure order preserving separately and with no need to disambiguate against all stores. Those candidates we cannot handle this way are validated to be independent on all stores (w/o TBAA) and then processed as "unordered" (all conditionally executed stores are so as well). This will necessary cause FAIL: gcc.dg/graphite/pr80906.c scan-tree-dump graphite "isl AST to Gimple succeeded" because the SM previously performed is not valid for exactly the PR57359 reason, we still perform SM of qc for the innermost loop but that's not enough. There is still room for improvements because we still check some constraints for the order preserving cases that are only necessary in the current strict way for the unordered ones. Leaving that for the furture. 2020-05-07 Richard Biener <rguenther@suse.de> PR tree-optimization/57359 * tree-ssa-loop-im.c (im_mem_ref::indep_loop): Remove. (in_mem_ref::dep_loop): Repurpose. (LOOP_DEP_BIT): Remove. (enum dep_kind): New. (enum dep_state): Likewise. (record_loop_dependence): New function to populate the dependence cache. (query_loop_dependence): New function to query the dependence cache. (memory_accesses::refs_in_loop): Rename to ... (memory_accesses::refs_loaded_in_loop): ... this and change to only record loads. (outermost_indep_loop): Adjust. (mem_ref_alloc): Likewise. (gather_mem_refs_stmt): Likewise. (mem_refs_may_alias_p): Add tbaa_p parameter and pass it down. (struct sm_aux): New. (execute_sm): Split code generation on exits, record state into new hash-map. (enum sm_kind): New. (execute_sm_exit): Exit code generation part. (sm_seq_push_down): Helper for sm_seq_valid_bb performing dependence checking on stores reached from exits. (sm_seq_valid_bb): New function gathering SM stores on exits. (hoist_memory_references): Re-implement. (refs_independent_p): Add tbaa_p parameter and pass it down. (record_dep_loop): Remove. (ref_indep_loop_p_1): Fold into ... (ref_indep_loop_p): ... this and generalize for three kinds of dependence queries. (can_sm_ref_p): Adjust according to hoist_memory_references changes. (store_motion_loop): Don't do anything if the set of SM candidates is empty. (tree_ssa_lim_initialize): Adjust. (tree_ssa_lim_finalize): Likewise. * gcc.dg/torture/pr57359-1.c: New testcase. * gcc.dg/torture/pr57359-1.c: Likewise. * gcc.dg/tree-ssa/ssa-lim-14.c: Likewise. * gcc.dg/graphite/pr80906.c: XFAIL.
2020-05-07Update the baseline symbols for SPARC64/LinuxEric Botcazou3-0/+177
2020-05-07Fix a few DWARF bugs with -fgnat-encodings=minimalEric Botcazou4-14/+58
The -fgnat-encodings=minimal switch tells the compiler to generate mostly pure DWARF for the GNAT compiler and it contains some bugs related to discriminated record types with variant part. * dwarf2out.c (add_data_member_location_attribute): Account for the variant part offset in the computation of the data bit offset. (add_bit_offset_attribute): Remove CTX parameter. Pass a new context in the call to field_byte_offset. (gen_field_die): Adjust call to add_bit_offset_attribute and remove confusing assertion. (analyze_variant_discr): Deal with boolean subtypes.
2020-05-07lto-wrapper: split arguments of getenv ("MAKE").Martin Liska2-9/+23
* lto-wrapper.c: Split arguments of MAKE environment variable.
2020-05-07alpha: Implement the PR94780 fix for alpha.Uros Bizjak2-4/+10
Essentially the same fix as for x86. 2020-05-07 Uroš Bizjak <ubizjak@gmail.com> gcc/ * config/alpha/alpha.c (alpha_atomic_assign_expand_fenv): Use TARGET_EXPR instead of MODIFY_EXPR for the first assignments to fenv_var and new_fenv_var.
2020-05-07Daily bump.GCC Administrator1-1/+1
2020-05-06c++: ICE in value_dependent_expression_p in C++98 mode [PR94938]Marek Polacek7-3/+83
Here we ICE with -std=c++98 since the newly added call to uses_template_parms (r10-6357): we hit 26530 gcc_assert (cxx_dialect >= cxx11 26531 || INTEGRAL_OR_ENUMERATION_TYPE_P (type)); and TYPE is a record type. The problem is that the argument to value_dependent_expression_p does not satisfy potential_constant_expression which it must, as the comment explains. I thought about fixing this in uses_template_parms -- only call v_d_e_p if p_c_e is true, but in this case we want to also suppress the warnings if we don't have a constant expression. I couldn't simply check TREE_CONSTANT as in compute_array_index_type_loc, because then we'd stop warning in the new Wtype-limits3.C test. Fixed by using type_dependent_expression_p_push instead. This means that we won't suppress the warnings for value-dependent expressions that aren't type-dependent, e.g. sizeof (T). This only seems to make a difference for -Wdiv-by-zero, now tested in Wdiv-by-zero-3.C, where I think it's reasonable to warn. It could make -Wtautological-compare warn more, but that warning doesn't trigger when it gets constant arguments. Wtype-limits4.C is a test reduced from poly-int.h and it tests a scenario that was missing in our testsuite. This patch also moves the warning_sentinels after the RECURs -- we mean to use them for build_x_binary_op purposes only. PR c++/94938 * pt.c (tsubst_copy_and_build): Call type_dependent_expression_p_push instead of uses_template_parms. Move the warning_sentinels after the RECURs. * g++.dg/warn/Wdiv-by-zero-3.C: New test. * g++.dg/warn/Wtype-limits4.C: New test. * g++.dg/warn/template-2.C: New test. * g++.old-deja/g++.pt/crash10.C: Add dg-warning.
2020-05-06d: Fix ICE in verify_gimple_stmt, at tree-cfg.c:4959Iain Buclaw7-89/+71
Both array concat and array new expressions wrapped any temporaries created into a BIND_EXPR. This does not work if an expression used to construct the result requires scope destruction, which is represented by a TARGET_EXPR with a clean-up, and a CLEANUP_POINT_EXPR at the location where the temporaries logically go out of scope. The reason for this not working is because the lowering of cleanup point expressions does not traverse inside BIND_EXPRs to expand any gimple cleanup expressions within. The use of creating BIND_EXPR has been removed at both locations, and replaced with a normal temporary variable that has initialization delayed until its address is taken. gcc/d/ChangeLog: PR d/94970 * d-codegen.cc (force_target_expr): Move create_temporary_var implementation inline here. (create_temporary_var): Remove. (maybe_temporary_var): Remove. (bind_expr): Remove. * d-convert.cc (d_array_convert): Use build_local_temp to generate temporaries, and generate its assignment. * d-tree.h (create_temporary_var): Remove. (maybe_temporary_var): Remove. (d_array_convert): Remove vars argument. * expr.cc (ExprVisitor::visit (CatExp *)): Use build_local_temp to generate temporaries, don't wrap them in a BIND_EXPR. (ExprVisitor::visit (NewExp *)): Likewise. gcc/testsuite/ChangeLog: PR d/94970 * gdc.dg/pr94970.d: New test.
2020-05-06c++: Avoid strict_aliasing_warning on dependent types or expressions [PR94951]Jakub Jelinek4-6/+42
The following testcase gets a bogus warning during build_base_path, when cp_build_indirect_ref* calls strict_aliasing_warning with a dependent expression. IMHO calling get_alias_set etc. on dependent types feels wrong to me, we should just defer the warnings in those cases until instantiation and only handle the cases where neither type nor expr are dependent. 2020-05-06 Jakub Jelinek <jakub@redhat.com> PR c++/94951 * typeck.c (cp_strict_aliasing_warning): New function. (cp_build_indirect_ref_1, build_reinterpret_cast_1): Use it instead of strict_aliasing_warning. * g++.dg/warn/Wstrict-aliasing-bogus-tmpl.C: New test.
2020-05-06c++: Don't synthesize sfk_comparison method multiple times [PR94907]Jakub Jelinek4-1/+24
On the following testcase we ICE, because synthesize_method is called twice on the same sfk_comparison method fndecl, the first time it works fine because start_preparsed_function in that case sets both current_function_decl and cfun, but second time it is called it only sets the former and keeps cfun NULL, so we ICE when trying to store current_function_returns_value. I think it is just wrong to call synthesize_method multiple times, and most synthesize_method callers avoid that by not calling it if DECL_INITIAL is already set, so this patch does that too. 2020-05-06 Jakub Jelinek <jakub@redhat.com> PR c++/94907 * method.c (defaulted_late_check): Don't call synthesize_method on constexpr sfk_comparison if it has been called on it already. * g++.dg/cpp2a/spaceship-synth8.C: New test.
2020-05-06libstdc++ std::fill overload for std::vector<bool>::iteratorFrançois Dumont4-49/+102
Extend the overload so that it is used even when _GLIBCXX_DEBUG mode is activated. * include/bits/stl_algobase.h (struct _Bit_iterator): New declaration. (std::__fill_a1(_Bit_iterator, _Bit_iterator, const bool&)): Likewise. * include/bits/stl_bvector.h (__fill_bvector): Move outside _GLIBCXX_STD_C namespace. (fill(_Bit_iterator, _Bit_iterator, const bool&)): Likewise and rename into... (__fill_a1): ...this. * testsuite/25_algorithms/fill/bvector/1.cc: New.
2020-05-06i386: Use generic division to generate INEXACT exceptionUros Bizjak6-50/+67
Introduce math_force_eval_div to use generic division to generate INEXACT as well as INVALID and DIVZERO exceptions. libgcc/ChangeLog: * config/i386/sfp-exceptions.c (__math_force_eval): Remove. (__math_force_eval_div): New define. (__sfp_handle_exceptions): Use __math_force_eval_div to use generic division to generate INVALID, DIVZERO and INEXACT exceptions. libatomic/ChangeLog: * config/x86/fenv.c (__math_force_eval): Remove. (__math_force_eval_div): New define. (__atomic_deraiseexcept): Use __math_force_eval_div to use generic division to generate INVALID, DIVZERO and INEXACT exceptions. libgfortran/ChangeLog: * config/fpu-387.h (__math_force_eval): Remove. (__math_force_eval_div): New define. (local_feraiseexcept): Use __math_force_eval_div to use generic division to generate INVALID, DIVZERO and INEXACT exceptions. (struct fenv): Define named struct instead of typedef.