Commit Graph

173043 Commits

Author SHA1 Message Date
Joseph Myers
1723e1bedb Properly handle C2x attributes on types.
attribs.c has code to ignore all scoped attributes appertaining to
types except when they are part of the definition of that type.

I think the premise of that code is incorrect, and its presence is a
bug; such attributes are clearly valid in both C and C++, which
explicitly specify that attributes in certain syntactic positions
appertain to a particular type, only for that use of that type and not
for other uses of the same type specifiers without that attribute
specified, and while the standard attributes in C2x aren't relevant in
such contexts, some gnu:: attributes certainly are.  Where some
attributes are invalid on some types in such contexts, that's a matter
for the individual attribute handlers to diagnose (or the front end if
the requirements on a standard attribute in the standard are more
strict than those of a handler shared with a GNU attribute).

Thus, this patch removes the bogus code to allow such attributes to be
used.  Doing so (and adding tests for attributes in such positions)
shows up that the logic in the C front end for creating the
c_declarator structures for such attributes put them in the wrong
place relative to the structures for function and array types, and the
logic for postfix attributes on a list of declaration specifiers
failed to handle some cases, so those bugs are also fixed in this
patch.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc:
	* attribs.c (decl_attributes): Do not ignore C++11 attributes on
	types.

gcc/c:
	* c-tree.h (struct c_declarator): Use a structure for id member.
	* c-decl.c (grokdeclarator): Extract attributes from cdk_id
	declarators at the start, not when handling individual declarators
	later.  Use u.id.id instead of u.id.
	(grokfield): Use u.id.id instead of u.id.
	(build_id_declarator): Set u.id.id and u.id.attrs.
	(finish_declspecs): Handle postfix attributes in case of typedef
	name or typeof used.
	* c-parser.c (c_parser_direct_declarator)
	(c_parser_direct_declarator_inner): Place declarator for
	attributes inside that for function or array, not outside.  Set
	u.id.attrs for identifiers.
	(c_parser_parameter_declaration): Use u.id.id instead of u.id.
	* gimple-parser.c (c_parser_gimple_declaration): Use u.id.id
	instead of u.id.

gcc/testsuite:
	* gcc.dg/gnu2x-attrs-1.c: Do not expect message about attributes
	appertaining to types.
	* gcc.dg/gnu2x-attrs-2.c: New test.
	* g++.dg/cpp0x/gen-attrs-1.C, g++.dg/cpp0x/gen-attrs-22.C,
	g++.dg/cpp0x/gen-attrs-4.C, g++.dg/cpp0x/lambda/lambda-attr1.C:
	Update expected diagnostics.

From-SVN: r278683
2019-11-25 13:42:49 +00:00
Bernd Schmidt
6cebc6cbbb Convert m68k to not use cc0
* config/m68k/m68k.c (output_move_himode, output_move_qimode):
	Replace code for non-CONST_INT constants with gcc_unreachable.
	* config/m68k/m68k.md (cbranchdi): Don't generate individual
	compare and test.
	(CMPMODE): New mode_iterator.
	(cbranchsi4, cbranchqi4, cbranchhi4): Replace expanders with
	cbranch<mode>4.
	(cstoresi4, cstoreqi4, cstorehi4): Replace expanders with
	cstore<mode>4.
	(cmp<mode>_68881): Remove 'F' constraint from first comparison
	operand.
	(bit test insns patterns): Use nonimmediate_operand, not
	register_operand, for source operands that allow memory in
	their constraints.
	(divmodsi4, udivmodsi4, divmodhi4 and related unnamed patterns):
	Use register_operand, not nonimmediate_operand, for the
	destinations.
	(DBCC): New mode_iterator.
	(dbcc peepholes): Use it to reduce duplication.
	(trap): Use const_true_rtx, not const1_rtx.
	* config/m68k/predicates.md (m68k_comparison_operand): Renamed
	from m68k_subword_comparison_operand and changed to handle
	SImode.

	PR target/91851
	* config/m68k/m68k-protos.h (output-dbcc_and_branch): Adjust
	declaration.
	(m68k_init_cc): New declaration.
	(m68k_output_compare_di, m68k_output_compare_si)
	(m68k_output_compare_hi, m68k_output_compare_qi)
	(m68k_output_compare_fp, m68k_output_btst, m68k_output_bftst)
	(m68k_find_flags_value, m68k_output_scc, m68k_output_scc_float)
	(m68k_output_branch_integer, m68k_output_branch_integer_rev.
	m68k_output_branch_float, m68k_output_branch_float_rev):
	Likewise.
	(valid_dbcc_comparison_p_2, flags_in_68881)
	(output_btst): Remove declaration.
	* config/m68k/m68k.c (INCLDUE_STRING): Define.
	(TARGET_ASM_FINAL_POSTSCAN_INSN): Define.
	(valid_dbcc_comparison_p_2, flags_in_68881): Delete functions.
	(flags_compare_op0, flags_compare_op1, flags_operand1,
	flags_operand2, flags_valid): New static variables.
	(m68k_find_flags_value, m68k_init_cc): New functions.
	(handle_flags_for_move, m68k_asm_final_postscan_insn,
	remember_compare_flags): New static functions.
	(output_dbcc_and_branch): New argument CODE.  Use it, and add
	PLUS and MINUS to the possible codes.  All callers changed.
	(m68k_output_btst): Renamed from output_btst.  Remove OPERANDS
	and INSN arguments, add CODE arg.  Return the comparison code
	to use.  All callers changed.  Use CODE instead of
	next_insn_tests_no_inequality, and replace cc_status management
	with changing the return code.
	(m68k_rtx_costs): Instead of testing for COMPARE, test for
	RTX_COMPARE or RTX_COMM_COMPARE.
	(output_move_simode, output_move_qimode): Call
	handle_flags_for_move.
	(notice_update_cc): Delete function.
	(m68k_output_bftst, m68k_output_compare_di, m68k_output_compare_si,
	m68k_output_compare_hi, m68k_output_compare_qi,
	m68k_output_compare_fp, m68k_output_branch_integer,
	m68k_output_branch_integer_rev, m68k_output_scc,
	m68k_output_branch_float, m68k_output_branch_float_rev,
	m68k_output_scc_float): New functions.
	(output_andsi3, output_iorsi3, output_xorsi3): Call CC_STATUS_INIT
	once at the start, and set flags_valid and flags_operand1 if the
	flags are usable.
	* config/m68k/m68k.h (CC_IN_68881, NOTICE_UPDATE_CC,
	CC_OVERFLOW_UNUSABLE, CC_NO_CARRY, OUTPUT_JUMP): Remove
	definitions.
	(CC_STATUS_INIT): Define.
	* config/m68k/m68k.md (flags_valid): New define_attr.
	(tstdi, tstsi_internal_68020_cf, tstsi_internal, tsthi_internal,
	tstqi_internal, tst<mode>_68881, tst<mode>_cf, cmpdi_internal,
	cmpdi, unnamed cmpsi/cmphi/cmpqi patterns, cmpsi_cf,
	cmp<mode>_68881, cmp<mode>_cf, unnamed btst patterns,
	tst_bftst_reg, tst_bftst_reg, unnamed scc patterns, scc,
	sls, sordered_1, sunordered_1, suneq_1, sunge_1, sungt_1,
	sunle_1, sunlt_1, sltgt_1, fsogt_1, fsoge_1, fsolt_1, fsole_1,
	bge0_di, blt0_di, beq, bne, bgt, bgtu, blt, bltu, bge, bgeu,
	ble, bleu, bordered, bunordered, buneq, bunge, bungt, bunle,
	bunlt, bltgt, beq_rev, bne_rev, bgt_rev, bgtu_rev,
	blt_rev, bltu_rev, bge_rev, bgeu_rev, ble_rev, bleu_rev,
	bordered_rev, bunordered_rev, buneq_rev, bunge_rv, bungt_rev,
	bunle_rev, bunlt_rev, bltgt_rev, ctrapdi4, ctrapsi4, ctraphi4,
	ctrapqi4, conditional_trap): Delete patterns.
	(cbranchdi4_insn): New pattern.
	(cbranchdi4): Don't generate cc0 patterns.  When testing LT or GE,
	test high part only.  When testing EQ or NE, generate beq0_di
	and bne0_di patterns directly.
	(cstoredi4): When testing LT or GE, test high part only.
	(both sets of cbranch<mode>4, cstore<mode>4): Don't generate cc0
	patterns.
	(scc0_constraints, cmp1_constraints, cmp2_constraints,
	scc0_cf_constraints, cmp1_cf_constraints, cmp2_cf_constraints,
	cmp2_cf_predicate): New define_mode_attrs.
	(cbranch<mode>4_insn, cbranch<mode>4_insn_rev,
	cbranch<mode>4_insn_cf, cbranch<mode>4_insn_cf_rev,
	cstore<mode>4_insn, cstore<mode>4_insn_cf for integer modes)
	New patterns.
	(cbranch<mode>4_insn_68881, cbranch<mode>4_insn_rev_68881):
	(cbranch<mode>4_insn_cf, cbranch<mode>4_insn_rev_cf,
	cstore<mode>4_insn_68881, cstore<mode>4_insn_cf for FP):
	New patterns.
	(cbranchsi4_btst_mem_insn, cbranchsi4_btst_reg_insn,
	cbranchsi4_btst_mem_insn_1, cbranchsi4_btst_reg_insn_1):
	Likewise.
	(BTST): New define_mode_iterator.
	(btst_predicate, btst_constraint, btst_range): New
	define_mode_attrs.
	(cbranch_bftst<mode>_insn, cstore_bftst<mode>_insn): New
	patterns.
	(movsi_m68k_movsi_m68k2, movsi_cf, unnamed movstrict patterns,
	unnamed movhi and movqi patterns, unnamed movsf, movdf and movxf
	patterns): Set attr "flags_valid".
	(truncsiqi2, trunchiqi2, truncsihi2): Remove manual CC_STATUS
	management.  Set attr "flags_valid".
	(extendsidi2, extendplussidi, unnamed float_extendsfdf pattern,
	extendsfdf2_cf, fix_truncdfsi2, fix_truncdfhi2, fix_truncdfqi2,
	addi_sexthishl32, adddi_dilshr32, adddi_dilshr32_cf,
	addi_dishl32, subdi_sexthishl32, subdi_dishl32, subdi3): Remove
	manual CC_STATUS management.
	(addsi3_internal, addhi3, addqi3, subsi3, subhi3, subqi3,
	unnamed strict_lowpart subhi and subqi patterns): Set attr
	"flags_valid".
	(unnamed strict_lowpart addhi3 and addqi3 patterns): Likewise.
	Remove code to operate on address regs and assert the case
	does not occur.
	(unnamed mulsidi patterns, divmodhi4, udivmodhi4): Remove
	manual CC_STATUS_INIT.
	(andsi3_internal, andhi3, andqi3, iorsi3_internal, iorhi3, iorqi3,
	xorsi3_internal, xorhi3, xorqi3, negsi2_internal,
	negsi2_5200, neghi2, negqi2, one_cmplsi2_internal, one_cmplhi2,
	one_cmplqi2, unnamed strict_lowpart patterns
	for andhi, andqi, iorhi, iorqi, xorhi, xorqi, neghi, negqi,
	one_cmplhi and one_cmplqi): Set attr "flags_valid".
	(iorsi_zext_ashl16, iorsi_zext): Remove manual CC_STATUS_INIT.
	(ashldi_sexthi, ashlsi_16, ashlsi_17_24): Remove manual
	CC_STATUS_INIT.
	(ashlsi3, ashlhi3, ashlqi3, ashrsi3, ashrhi3, ashrqi3, lshrsi3,
	lshrhi3, shrqi3, rotlsi3, rotlhi3, rotlhi3_lowpart, rotlqi3,
	rotlqi3_lowpart, rotrsi3, rotrhi3, rotrhi_lowpart, rotrqi3,
	unnamed strict_low_part patterns for HI and
	QI versions): Set attr "flags_valid".
	(bsetmemqi, bsetmemqi_ext, bsetdreg, bchgdreg, bclrdreg,
	bclrmemqi, extzv_8_16_reg, extzv_bfextu_mem, insv_bfchg_mem,
	insv_bfclr_mem, insv_bfset_mem, extv_bfextu_reg,
	insv_bfclr_reg, insv_bfset_reg, dbne_hi, dbne_si, dbge_hi,
	dbge_si, extendsfxf2, extenddfxf2, ): Remove manual cc_status management.
	(various unnamed peepholes): Adjust compare/branch sequences
	for new cbranch patterns.
	(dbcc peepholes): Likewise, and output the comparison here
	as well.
	* config/m68k/predicates.md (valid_dbcc_comparison_p): Delete.
	(fp_src_operand): Allow constant zero.
	(address_reg_operand): New predicate.

	* rtl.h (inequality_comparisons_p): Remove declaration.
	* recog.h (next_insn_tests_no_inequality): Likewise.
	* rtlanal.c (inequality_comparisons_p): Delete function.
	* recog.c (next_insn_tests_no_inequality): Likewise.

From-SVN: r278681
2019-11-25 12:31:16 +00:00
Tamar Christina
e9daced36d Testsuite: Enable fp-int-convert-timode-1.c unconditionally when int128 supported.
This removes the call to fesetround as FE_TONEAREST
is the default and so the guard can be removed as well.

The test will then run as long as there's int128 support.

gcc/testsuite/ChangeLog:

	* gcc.dg/torture/fp-int-convert-timode-1.c: Always run if int128.

From-SVN: r278680
2019-11-25 12:23:30 +00:00
Richard Biener
c6aef8d800 tree-vect-slp.c (vect_detect_hybrid_slp_stmts): Add assertion.
2019-11-25  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (vect_detect_hybrid_slp_stmts): Add assertion.
	(vect_detect_hybrid_slp): Swap lane and instance iteration,
	properly re-building the visited hash-map for each lane.

From-SVN: r278679
2019-11-25 11:38:37 +00:00
Tobias Burnus
6349e4f04c [amdgcn] Silence warnings + add gcc_unreachable()
* config/gcn/gcn.c (gcn_expand_scalar_to_vector_address,
        gcn_md_reorg): Remove unused variables.
        (gcn_emutls_var_init): Add missing (but unreachable) return
        to silence warning.
        (gcn_hsa_declare_function_name): Add gcc_unreachable to ensure
        target != TARGET_GCN3 or TARGET_GCN3 will fail instead of use
        an uninitialized variable.

From-SVN: r278678
2019-11-25 12:34:53 +01:00
Eric Botcazou
d587d1e4aa re PR ada/92362 (double elaboration of expression in Address aspect)
PR ada/92362
	* gcc-interface/trans.c (gnat_to_gnu) <N_Attribute_Definition_Clause>:
	Use a temporary instead of clobbering the result with a freeze node.

From-SVN: r278675
2019-11-25 10:48:55 +00:00
Mark Eggleston
32bef8ff80 DEC comparisons - allow Hollerith constants in comparisons.
The -fdec option enables the use of Hollerith comparisons in comparisons
with INTEGER, COMPLEX, REAL and CHARACTER expressions.

	Mark Eggleston  <mark.eggleston@codethink.com>
	Jim MacArthur  <jim.macarthur@codethink.co.uk>

	* gfortran.texi: Update Hollerith constants support for character types
	and use in comparisons.
	* invoke.texi: Tidy up list of options. Update description of
	-fdec-char-conversions.
	* resolve.c (is_character_based): New.
	(Convert_hollerith_to_character): New.  (convert_to_numeric): New.
	(resolve_operator): If both sides are character based and -fdec is
	enabled convert Hollerith to character. If an operand is Hollerith, the
	other is numeric and -fdec is enabled convert to numeric.
	(resolve_ordinary_assign): Add check for -fdec-char-conversions for
	assignment of character literals.

	Mark Eggleston <mark.eggleston@codethink.com>
	Jim MacArthur <jim.macarthur@codethink.co.uk>

	* gfortran.dg/dec-comparison-character_1.f90: New test.
	* gfortran.dg/dec-comparison-character_2.f90: New test.
	* gfortran.dg/dec-comparison-character_3.f90: New test.
	* gfortran.dg/dec-comparison-complex_1.f90: New test.
	* gfortran.dg/dec-comparison-complex_2.f90: New test.
	* gfortran.dg/dec-comparison-complex_3.f90: New test.
	* gfortran.dg/dec-comparison-int_1.f90: New test.
	* gfortran.dg/dec-comparison-int_2.f90: New test.
	* gfortran.dg/dec-comparison-int_3.f90: New test.
	* gfortran.dg/dec-comparison-real_1.f90: New test.
	* gfortran.dg/dec-comparison-real_2.f90: New test.
	* gfortran.dg/dec-comparison-real_3.f90: New test.
	* gfortran.dg/dec-comparison.f90: New test.


Co-Authored-By: Jim MacArthur <jim.macarthur@codethink.co.uk>

From-SVN: r278674
2019-11-25 10:36:25 +00:00
Eric Botcazou
ee499b407f re PR ada/92575 (couple of suspicious assignments in expect.c)
PR ada/92575
	* expect.c (__gnat_expect_poll [VMS, HPUX]): Fix typo.

From-SVN: r278671
2019-11-25 10:29:51 +00:00
Martin Jambor
d0b1b67aab ipa: Prevent materialization of clones with removed bodies (PR 92109)
2019-11-25  Martin Jambor  <mjambor@suse.cz>

	PR ipa/92109
	* cgraph.h (cgraph_node::remove_from_clone_tree): Declare.
	* cgraphclones.c (cgraph_node::remove_from_clone_tree): New method.
	(cgraph_materialize_clone): Move removel from clone tree to the
	the new method and use it instead.
	* ipa.c (symbol_table::remove_unreachable_nodes): When removing
	bodies of clones, also remove it from the clone tree.

From-SVN: r278670
2019-11-25 11:13:08 +01:00
Martin Jambor
ed649cda94 Make IPA-SRA follow comdat-local rules (PR 91956)
2019-11-25  Martin Jambor  <mjambor@suse.cz>

	PR ipa/91956
	* ipa-sra.c (process_isra_node_results): Put the new node to the
	same comdat group as the original node.

	testsuite/
	* g++.dg/ipa/pr91956.C: New test.

From-SVN: r278669
2019-11-25 11:09:42 +01:00
Georg-Johann Lay
5b01f1a57c Build double32 / long-double32 multilibs if needed.
gcc/
	Build double32 / long-double32 multilibs if needed.
	PR target/92055
	* config/avr/t-avr:
	(HAVE_DOUBLE_MULTILIB, HAVE_LONG_DOUBLE_MULTILIB): Remove vars.
	(HAVE_DOUBLE32, HAVE_LONG_DOUBLE32, WITH_LONG_DOUBLE)
	(HAVE_DOUBLE64, HAVE_LONG_DOUBLE64, WITH_DOUBLE): Set from
	tm_defines and pass to genmultilib.awk.
	* config/avr/genmultilib.awk: Use these variables to add double32
	and / or long-double32 multilib(s) as needed.
	* config/avr/driver-avr.c (avr_double_lib): Adjust comment.

From-SVN: r278668
2019-11-25 08:59:06 +00:00
Richard Biener
f10d2d85c9 cfgloop.h (get_loop_exit_edges): Add extra parameter denoting loop body, defaulted to NULL.
2019-11-25  Richard Biener  <rguenther@suse.de>

	* cfgloop.h (get_loop_exit_edges): Add extra parameter denoting
	loop body, defaulted to NULL.
	(single_likely_exit): Add exit vector argument
	* tree-ssa-loop-niter.h (loop_only_exit_p): Add loop body argument.
	(number_of_iterations_exit): Likewise.
	(number_of_iterations_exit_assumptions): Likewise.
	* cfgloop.c (get_loop_exit_edges): Use passed in loop body
	if not NULL.
	* cfgloopanal.c (single_likely_exit): Use passed in exit vector.
	* tree-ssa-loop-ivcanon.c (canonicalize_loop_induction_variables):
	Compute exit vector around call to single_likely_exit.
	* tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize_loop): Pass down
	loop body to loop_only_exit_p.
	* tree-ssa-loop-niter.c (loop_only_exit_p): Get loop body from
	caller.
	(number_of_iterations_exit_assumptions): Get loop body from caller
	if not NULL.
	(number_of_iterations_exit): Pass through new loop body arg.
	(infer_loop_bounds_from_undefined): Get loop body from caller.
	(estimate_numbers_of_iterations): Compute loop body once.

From-SVN: r278667
2019-11-25 07:51:38 +00:00
Richard Biener
5a34952edb cfganal.c (pre_and_rev_post_order_compute_fn): Use an auto_bb_flag instead of an sbitmap for visited handling.
2019-11-25  Richard Biener  <rguenther@suse.de>

	* cfganal.c (pre_and_rev_post_order_compute_fn): Use an
	auto_bb_flag instead of an sbitmap for visited handling.

From-SVN: r278666
2019-11-25 07:48:48 +00:00
Kewen Lin
bceb7181c8 [rs6000] Refactor FP vector comparison operators
This is a subsequent patch to refactor the existing float point
vector comparison operator supports.  The patch to fix PR92132
supplemented vector float point comparison by exposing the names
for unordered/ordered/uneq/ltgt and adding ungt/unge/unlt/unle/
ne.  As Segher pointed out, some patterns can be refactored
together.  The main link on this is:
https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00452.html

gcc/ChangeLog

2019-11-25 Kewen Lin  <linkw@gcc.gnu.org>

    * config/rs6000/vector.md (vector_fp_comparison_simple): New code iterator.
    (vector_fp_comparison_complex): Likewise.
    (vector_<code><mode> for VEC_F and vector_fp_comparison_simple): New
    define_and_split.
    (vector_<code><mode> for VEC_F and vector_fp_comparison_complex): Likewise.
    (vector_lt<mode> for VEC_F): Refactor with vector_fp_comparison_simple.
    (vector_le<mode> for VEC_F): Likewise.
    (vector_unge<mode> for VEC_F): Likewise.
    (vector_unle<mode> for VEC_F): Likewise.
    (vector_ne<mode> for VEC_F): Likewise.
    (vector_ungt<mode> for VEC_F): Likewise.
    (vector_unlt<mode> for VEC_F): Likewise.
    (vector_ltgt<mode> for VEC_F): Refactor with vector_fp_comparison_complex.
    (vector_ordered<mode> for VEC_F): Likewise.
    (vector_uneq<mode> for VEC_F): Likewise.
    (vector_unordered<mode> for VEC_F): Likewise.

From-SVN: r278665
2019-11-25 05:15:30 +00:00
Jerry DeLisle
ee1bc59e9d re PR libfortran/92100 (Formatted stream IO irreproducible read with binary data in file)
2019-11-24  Jerry DeLisle  <jvdelisle@gcc.ngu.org>

	PR fortran/92100
	gfortran.dg/streamio_18.f90: New test.

From-SVN: r278664
2019-11-25 02:24:55 +00:00
GCC Administrator
8d6b4fe7e1 Daily bump.
From-SVN: r278663
2019-11-25 00:16:20 +00:00
Jerry DeLisle
73af0c7b3a re PR libfortran/92100 (Formatted stream IO irreproducible read with binary data in file)
2019-11-24  Jerry DeLisle  <jvdelisle@gcc.ngu.org>

	PR fortran/92100
	io/transfer.c (data_transfer_init_worker): Use fbuf_reset
	instead of fbuf_flush before the seek. Note that fbuf_reset
	calls fbuf_flush and adjusts fbuf pointers.

From-SVN: r278660
2019-11-24 22:14:59 +00:00
Thomas Koenig
859174c824 Fix EOF handling for arrays.
2019-11-23  Thomas Koenig  <tkoenig@gcc.gnu.org>
	Harald Anlauf <anlauf@gmx.de>

	PR fortran/92569
	* io/transfer.c (transfer_array_inner):  If position is
	at AFTER_ENDFILE in current unit, return from data loop.

2019-11-23  Thomas Koenig  <tkoenig@gcc.gnu.org>
	Harald Anlauf <anlauf@gmx.de>

	PR fortran/92569
	* gfortran.dg/eof_6.f90: New test.


Co-Authored-By: Harald Anlauf <anlauf@gmx.de>

From-SVN: r278659
2019-11-24 19:16:23 +00:00
François Dumont
af4e8d4d5a libstdc++: Improve _GLIBCXX_DEBUG __valid_range check
Adds iterator singular check within the valid range check.

	* include/debug/functions.h: Remove <bits/move.h> include.
	(__check_singular_aux, __check_singular): Move...
	* include/debug/helper_functions.h:
	(__check_singular_aux, __check_singular): ...here.
	(__valid_range_aux): Adapt to use latter.
	Add <bits/move.h> include.
	* testsuite/25_algorithms/copy/debug/2_neg.cc: New.

From-SVN: r278658
2019-11-24 17:09:44 +00:00
Bernd Schmidt
74b9f8dfe1 Allow combiner to create autoinc in jump insns.
* combine.c (can_combine_p): Allow autoinc in jumps.

From-SVN: r278656
2019-11-24 13:20:55 +00:00
Bernd Schmidt
391500af19 Do not ignore costs of jump insns in combine.
* combine.c (combine_instructions): Record costs for jumps.

From-SVN: r278655
2019-11-24 13:11:55 +00:00
Bernd Schmidt
cc2ccbcedd Fix ix86 rtx costs for the pr30315 testcase (PR target/30315)
* config/i386/i386.c (ix86_rtx_costs): Handle care of a PLUS in a
	COMPARE, representing an overflow detection.

From-SVN: r278654
2019-11-24 13:08:27 +00:00
GCC Administrator
74bc2a43ce Daily bump.
From-SVN: r278653
2019-11-24 00:16:15 +00:00
Thomas Koenig
042d210c39 Fixed ChangeLog entry.
From-SVN: r278648
2019-11-23 15:23:10 +00:00
Thomas Koenig
5cebf73068 Add test case for PR 92442.
2019-11-23  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/92442
	* gfortran.dg/bounds_check_21.f90: New test.

From-SVN: r278647
2019-11-23 15:19:19 +00:00
Jan Hubicka
1e83bd7003 Convert inliner to new param infrastructure
/bin/sh: :q: command not found
This patch adds opt_for_fn for all cross module params used by inliner
so they can be modified at function granuality.  With inlining almost always
there are three functions to consider (callee and caller of the inlined edge
and the outer function caller is inlined to).

I always use the outer function params since that is how local parameters
behave.  I hope it is kind of what is also expected in most case: it is better
to inline agressively into -O3 compiled code rather than inline agressively -O3
functions into their callers.

New params infrastructure is nice.  One drawback is that is very hard to
search for individual param uses since they all occupy global namespace.
With C++ world we had chance to do something like params.param_flag_name
or params::param_flag_name instead...

Bootstrapped/regtested x86_64-linux, comitted.

	* cif-code.def (MAX_INLINE_INSNS_SINGLE_O2_LIMIT): Remove.
	* doc/invoke.texi (max-inline-insns-single-O2,
	inline-heuristics-hint-percent-O2, inline-min-speedup-O2,
	early-inlining-insns-O2): Remove documentation.
	* ipa-fnsummary.c (analyze_function_body,
	compute_fn_summary): Use opt_for_fn when accessing parameters.
	* ipa-inline.c (caller_growth_limits, can_inline_edge_p,
	inline_insns_auto, can_inline_edge_by_limits_p,
	want_early_inline_function_p, big_speedup_p,
	want_inline_small_function_p, want_inline_self_recursive_call_p,
	recursive_inlining, compute_max_insns, inline_small_functions):
	Likewise.
	* opts.c (default_options): Add -O3 defaults for
	OPT__param_early_inlining_insns_,
	OPT__param_inline_heuristics_hint_percent_,
	OPT__param_inline_min_speedup_, OPT__param_max_inline_insns_single_.
	* params.opt (-param=early-inlining-insns-O2=,
	-param=inline-heuristics-hint-percent-O2=,
	-param=inline-min-speedup-O2=, -param=max-inline-insns-single-O2=
	-param=early-inlining-insns=, -param=inline-heuristics-hint-percent=,
	-param=inline-min-speedup=, -param=inline-unit-growth=,
	-param=large-function-growth=, -param=large-stack-frame=,
	-param=large-stack-frame-growth=, -param=large-unit-insns=,
	-param=max-inline-insns-recursive=,
	-param=max-inline-insns-recursive-auto=,
	-param=max-inline-insns-single=,
	-param=max-inline-insns-size=, -param=max-inline-insns-small=,
	-param=max-inline-recursive-depth=,
	-param=max-inline-recursive-depth-auto=,
	-param=min-inline-recursive-probability=,
	-param=partial-inlining-entry-probability=,
	-param=uninlined-function-insns=, -param=uninlined-function-time=,
	-param=uninlined-thunk-insns=, -param=uninlined-thunk-time=): Add
	Optimization.

	* g++.dg/tree-ssa/pr53844.C: Drop -O2 from param name.
	* g++.dg/tree-ssa/pr61034.C: Likewise.
	* g++.dg/tree-ssa/pr8781.C: Likewise.
	* g++.dg/warn/Wstringop-truncation-1.C: Likewise.
	* gcc.dg/ipa/pr63416.c: Likewise.
	* gcc.dg/tree-ssa/ssa-thread-12.c: Likewise.
	* gcc.dg/vect/pr66142.c: Likewise.
	* gcc.dg/winline-3.c: Likewise.
	* gcc.target/powerpc/pr72804.c: Likewise.

From-SVN: r278645
2019-11-23 13:13:23 +00:00
Jan Hubicka
9340d34599 Convert inliner to function specific param infrastructure
This patch adds opt_for_fn for all cross module params used by inliner
so they can be modified at function granuality.  With inlining almost always
there are three functions to consider (callee and caller of the inlined edge
and the outer function caller is inlined to).

I always use the outer function params since that is how local parameters
behave.  I hope it is kind of what is also expected in most case: it is better
to inline agressively into -O3 compiled code rather than inline agressively -O3
functions into their callers.

New params infrastructure is nice.  One drawback is that is very hard to
search for individual param uses since they all occupy global namespace.
With C++ world we had chance to do something like params.param_flag_name
or params::param_flag_name instead...

Bootstrapped/regtested x86_64-linux, comitted.

	* cif-code.def (MAX_INLINE_INSNS_SINGLE_O2_LIMIT): Remove.
	* doc/invoke.texi (max-inline-insns-single-O2,
	inline-heuristics-hint-percent-O2, inline-min-speedup-O2,
	early-inlining-insns-O2): Remove documentation.
	* ipa-fnsummary.c (analyze_function_body,
	compute_fn_summary): Use opt_for_fn when accessing parameters.
	* ipa-inline.c (caller_growth_limits, can_inline_edge_p,
	inline_insns_auto, can_inline_edge_by_limits_p,
	want_early_inline_function_p, big_speedup_p,
	want_inline_small_function_p, want_inline_self_recursive_call_p,
	recursive_inlining, compute_max_insns, inline_small_functions):
	Likewise.
	* opts.c (default_options): Add -O3 defaults for
	OPT__param_early_inlining_insns_,
	OPT__param_inline_heuristics_hint_percent_,
	OPT__param_inline_min_speedup_, OPT__param_max_inline_insns_single_.
	* params.opt (-param=early-inlining-insns-O2=,
	-param=inline-heuristics-hint-percent-O2=,
	-param=inline-min-speedup-O2=, -param=max-inline-insns-single-O2=
	-param=early-inlining-insns=, -param=inline-heuristics-hint-percent=,
	-param=inline-min-speedup=, -param=inline-unit-growth=,
	-param=large-function-growth=, -param=large-stack-frame=,
	-param=large-stack-frame-growth=, -param=large-unit-insns=,
	-param=max-inline-insns-recursive=,
	-param=max-inline-insns-recursive-auto=,
	-param=max-inline-insns-single=,
	-param=max-inline-insns-size=, -param=max-inline-insns-small=,
	-param=max-inline-recursive-depth=,
	-param=max-inline-recursive-depth-auto=,
	-param=min-inline-recursive-probability=,
	-param=partial-inlining-entry-probability=,
	-param=uninlined-function-insns=, -param=uninlined-function-time=,
	-param=uninlined-thunk-insns=, -param=uninlined-thunk-time=): Add
	Optimization.

	* g++.dg/tree-ssa/pr53844.C: Drop -O2 from param name.
	* g++.dg/tree-ssa/pr61034.C: Likewise.
	* g++.dg/tree-ssa/pr8781.C: Likewise.
	* g++.dg/warn/Wstringop-truncation-1.C: Likewise.
	* gcc.dg/ipa/pr63416.c: Likewise.
	* gcc.dg/tree-ssa/ssa-thread-12.c: Likewise.
	* gcc.dg/vect/pr66142.c: Likewise.
	* gcc.dg/winline-3.c: Likewise.
	* gcc.target/powerpc/pr72804.c: Likewise.

From-SVN: r278644
2019-11-23 13:11:25 +00:00
Jakub Jelinek
956d615d66 ipa-fnsummary.c: Fix comment typos.
* ipa-fnsummary.c: Fix comment typos.
	* ipa-ref.h: Likewise.
	* ipa-predicate.h: Likewise.
	* ipa-split.c: Likewise.
	* ipa-inline-analysis.c: Likewise.
	* ipa-predicate.c: Likewise.
	* ipa-devirt.c: Likewise.
	* ipa-icf.h: Likewise.
	* profile-count.c: Likewise.
	* ipa-icf.c: Likewise.
	(sem_function::equals_wpa): Fix typos in dump messages.
	* ipa-icf-gimple.h: Fix comment typos.
	* ipa-inline-transform.c: Likewise.
	* ipa-polymorphic-call.c: Likewise.
	* ipa-fnsummary.h: Likewise.
	* ipa-inline.c: Likewise.
	(dump_inline_stats): Fix typo in debug dump message.
	* profile-count.h: Fix comment typos.

From-SVN: r278643
2019-11-23 12:44:51 +01:00
Jakub Jelinek
8d0d7a6301 re PR inline-asm/92615 (ICE in extract_insn)
PR target/92615
	* config/i386/i386.c (ix86_md_asm_adjust): If dest_mode is
	GET_MODE (dest), is not QImode, using ZERO_EXTEND and dest is not
	register_operand, force x into register before storing it into dest.
	Formatting fix.

	* gcc.target/i386/pr92615.c: New test.

From-SVN: r278642
2019-11-23 11:07:21 +01:00
Jakub Jelinek
1fbf51cb84 re PR middle-end/83859 (Please add new attribute which will establish relation between parameters for buffer and its size)
PR middle-end/83859
	* doc/extend.texi (attribute access): Fix a typo.

	* c-attribs.c (append_access_attrs): Avoid buffer overflow.  Avoid
	memory leak.  Use XNEWVEC macro.  Use auto_diagnostic_group to
	group warning with inform together.
	(handle_access_attribute): Formatting fix.

From-SVN: r278641
2019-11-23 11:06:26 +01:00
Jakub Jelinek
ba585b9153 re PR rtl-optimization/92610 (ICE in calc_dfs_tree, at dominance.c:458 since r270940)
PR rtl-optimization/92610
	* cse.c (rest_of_handle_cse2): Call cleanup_cfg (0) also if
	cse_cfg_altered is set, even when tem is 0.
	(rest_of_handle_cse_after_global_opts): Likewise.

	* g++.dg/opt/pr92610.C: New test.

From-SVN: r278640
2019-11-23 11:05:31 +01:00
Bernd Edlinger
41149acaff re PR c++/92365 (ice unexpected expression ‘int16_t()’ of kind cast_expr)
PR c++/92365

2019-11-22  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR c++/92365
        * name-lookup.c (check_local_shadow): Use can_convert_arg
        instead of can_convert.

testsuite:
2019-11-22  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR c++/92365
        * g++.dg/pr92365.C: New test.

From-SVN: r278639
2019-11-23 06:33:59 +00:00
GCC Administrator
f34a05b0d3 Daily bump.
From-SVN: r278638
2019-11-23 00:16:21 +00:00
Marek Polacek
66acfb8004 PR c++/88337 - P1327R1: Allow polymorphic typeid in constexpr.
Part of P1327R1 is to allow typeid with an operand of polymorphic type in
constexpr.  I found that we pretty much support it already, the only tweak
was to allow TYPEID_EXPR (only created in a template) in constexpr in C++20.

	* constexpr.c (potential_constant_expression_1): Allow a typeid
	expression whose operand is of polymorphic type in constexpr in
	C++20.
	* rtti.c (build_typeid): Remove obsolete FIXME comment.

	* g++.dg/cpp2a/constexpr-typeid1.C: New test.
	* g++.dg/cpp2a/constexpr-typeid2.C: New test.
	* g++.dg/cpp2a/constexpr-typeid3.C: New test.
	* g++.dg/cpp2a/constexpr-typeid4.C: New test.

From-SVN: r278635
2019-11-22 23:48:25 +00:00
Jakub Jelinek
bdaf8be1b2 re PR c/90677 (gcc-9.1.0 fails to build __gcc_diag__ souce: error: 'cgraph_node' is not defined as a type)
PR c/90677
	* c-common.h (identifier_global_tag): Declare.
	* c-format.c (get_pointer_to_named_type): Renamed to ...
	(get_named_type): ... this.  Use identifier_global_tag instead of
	identifier_global_value, handle the return value being a TYPE_P.
	(init_dynamic_diag_info): Adjust get_pointer_to_named_type callers
	to call get_named_type instead.  Formatting fixes.
c/
	* c-decl.c (identifier_global_tag): Define.
cp/
	* cp-objcp-common.c (identifier_global_tag): Define.
testsuite/
	* c-c++-common/pr90677.c: New test.

From-SVN: r278634
2019-11-22 22:45:27 +01:00
Jakub Jelinek
df418f1d3c re PR c++/92458 (Constraints do not work with precompiled headers)
PR c++/92458
	* tree-hash-traits.h (tree_decl_hash, tree_ssa_name_hash,
	tree_hash): Move to ...
	* tree.h (tree_decl_hash, tree_ssa_name_hash, tree_hash): ... here.
	(struct decl_tree_cache_traits, struct type_tree_cache_traits): New
	types.
	(decl_tree_cache_map, tree_tree_cache_map): New typedefs.

	* init.c (nsdmi_inst): Change type to
	decl_tree_cache_map * from tree_cache_map *.
	* constraint.cc (decl_constraints): Likewise.
	* decl.c (get_tuple_decomp_init): Likewise.
	* pt.c (defarg_inst, explicit_specifier_map): Likewise.
	(tsubst_default_argument, store_explicit_specifier): Use
	decl_tree_cache_map::create_ggc rather than
	tree_cache_map::create_ggc.
	* cp-objcp-common.c (debug_type_map): Change type to
	type_tree_cache_map * from tree_cache_map *.

	* g++.dg/pch/pr92458.C: New test.
	* g++.dg/pch/pr92458.Hs: New test.

From-SVN: r278633
2019-11-22 22:38:44 +01:00
Iain Sandoe
839e636a9a [Darwin, X86, testsuite] Update tests for common section use.
The tests amended here now have different code-gen with default
options because, previously, the access were indirected per Darwin
ABI for common accesses.  The revised code-gen does not match the
expected scan-asms because Darwin defaults to fPIC.  For these tests,
it seems that the best solution is to use '-mdynamic-no-pic' in the
m32 case which makes the output similar to the ElF platform default.

gcc/testsuite/ChangeLog:

2019-11-22  Iain Sandoe  <iain@sandoe.co.uk>

	* gcc.target/i386/pr27971.c: Use mdynamic-no-pic for m32 on
	Darwin.
	* gcc.target/i386/sse2-load-multi.c: Likewise.
	* gcc.target/i386/sse2-store-multi.c: Likewise.

From-SVN: r278631
2019-11-22 20:58:54 +00:00
Iain Sandoe
037ec35a41 [testsuite] Commit missed Changelog entry.
From-SVN: r278630
2019-11-22 20:45:34 +00:00
Jakub Jelinek
761df90687 Implement P1902R1, Missing feature-test macros 2017-2019.
* c-cppbuiltin.c (c_cpp_builtins): Bump __cpp_init_captures
	and __cpp_generic_lambdas for -std=c++2a.  Define
	__cpp_designated_initializers, __cpp_constexpr_in_decltype and
	__cpp_consteval for -std=c++2a.  Remove a FIXME comment about
	__cpp_concepts for -std=c++2a.

	* g++.dg/cpp1z/feat-cxx1z.C: Only compile with -std=c++17.
	* g++.dg/cpp2a/feat-cxx2a.C: Adjust for P1902R1 changes.
	* g++.dg/cpp2a/desig15.C: New test.
	* g++.dg/cpp2a/lambda-pack-init3.C: New test.
	* g++.dg/cpp2a/lambda-generic6.C: New test.
	* g++.dg/cpp2a/consteval15.C: New test.

From-SVN: r278628
2019-11-22 20:55:38 +01:00
Jakub Jelinek
204b0bebee re PR tree-optimization/92618 (error: type mismatch in binary expression in reassoc since r273490)
PR tree-optimization/92618
	* tree-ssa-reassoc.c (v_info): Change from auto_vec to a struct
	containing the auto_vec and a tree.
	(undistribute_bitref_for_vector): Handle the case when element type
	of vec is not the same as type of the BIT_FIELD_REF.  Formatting
	fixes.

	* gcc.c-torture/compile/pr92618.c: New test.
	* gcc.c-torture/execute/pr92618.c: New test.

From-SVN: r278626
2019-11-22 19:17:04 +01:00
Martin Sebor
54aa6b58fe PR middle-end/83859 - attributes to associate pointer arguments and sizes
gcc/ChangeLog:

	PR middle-end/83859
	* attribs.h (struct attr_access): New.
	* attribs.c (decl_attributes): Add an informational note.
	* builtins.c (check_access): Make extern.  Consistently set no-warning
	after issuing a warning.  Handle calls through function pointers.  Set
	no-warning.
	* builtins.h (check_access): Declare.
	* calls.c (rdwr_access_hash): New type.
	(rdwr_map): Same.
	(init_attr_rdwr_indices): New function.
	(maybe_warn_rdwr_sizes): Same.
	(initialize_argument_information): Call init_attr_rdwr_indices.
	Call maybe_warn_rdwr_sizes.
	(get_size_range): Avoid null argument.
	* doc/extend.texi (attribute access): Document new attribute.

gcc/c-family/ChangeLog:

	PR middle-end/83859
	* c-attribs.c (handle_access_attribute): New function.
	(c_common_attribute_table): Add new attribute.
	(get_argument_type): New function.
	(append_access_attrs): New function.
	(get_nonnull_operand): Rename...
	(get_attribute_operand): ...to this.
	* c-common.c (get_nonnull_operand): Rename...
	(get_attribute_operand): ...to this.

gcc/testsuite/ChangeLog:

	PR middle-end/83859
	* c-c++-common/attr-nonstring-8.c: Adjust text of expected warning.
	* gcc.dg/Wstringop-overflow-23.c: New test.
	* gcc.dg/Wstringop-overflow-24.c: New test.
	* gcc.dg/attr-access-read-only.c: New test.
	* gcc.dg/attr-access-read-write.c: New test.
	* gcc.dg/attr-access-read-write-2.c: New test.
	* gcc.dg/attr-access-write-only.c: New test.

From-SVN: r278624
2019-11-22 10:14:17 -07:00
Martin Sebor
b5338fb359 PR middle-end/88226 - missing warning on fprintf, fputs, and puts with an unterminated array
gcc/ChangeLog:

	PR middle-end/88226
	* builtins.c (check_nul_terminated_array): New function.
	(fold_builtin_0): Remove declaration.
	(fold_builtin_1): Same.
	(fold_builtin_2): Same.
	(fold_builtin_3): Same.
	(fold_builtin_strpbrk): Add argument.
	(fold_builtin_strspn): Same.
	(fold_builtin_strcspn): Same.
	(expand_builtin_strcat): Call it.  Remove unused argument.
	(expand_builtin_stpncpy): Same.
	(expand_builtin_strncat): Same.
	(expand_builtin_strncpy): Same.  Adjust indentation.
	(expand_builtin_strcmp): Same.
	(expand_builtin_strncmp): Same.
	(expand_builtin_fork_or_exec): Same.
	(expand_builtin): Handle more built-ins.
	(fold_builtin_2): Add argument.
	(fold_builtin_n): Make static.  Add argument.
	(fold_call_expr): Pass new argument to fold_builtin_n and fold_builtin_2.
	(fold_builtin_call_array): Pass new argument to fold_builtin_n.
	(fold_builtin_strpbrk): Add argument.  Call check_nul_terminated_array.
	(fold_call_stmt): Pass new argument to fold_builtin_n.
	* builtins.h: Correct a comment.
	* gimple-fold.c (gimple_fold_builtin_strchr): Call
	check_nul_terminated_array.
	* tree-ssa-strlen.c (handle_builtin_strlen): Call
	check_nul_terminated_array.
	(handle_builtin_strchr): Same.
	(handle_builtin_string_cmp): Same.

gcc/testsuite/ChangeLog:

	PR middle-end/88226
	* gcc.dg/Wstringop-overflow-22.c: New test.
	* gcc.dg/tree-ssa/builtin-fprintf-warn-1.c: Remove xfails.

From-SVN: r278623
2019-11-22 09:47:22 -07:00
Andrew Stubbs
86b0eb8183 Limit LDS usage.
2019-11-22  Andrew Stubbs  <ams@codesourcery.com>

	gcc/
	* config/gcn/gcn.c (OMP_LDS_SIZE): Define.
	(ACC_LDS_SIZE): Define.
	(OTHER_LDS_SIZE): Define.
	(LDS_SIZE): Redefine using above.
	(gcn_expand_prologue): Initialize m0 with LDS_SIZE-1.

From-SVN: r278622
2019-11-22 16:43:46 +00:00
Martin Sebor
d2f8402a08 PR tree-optimization/92501 - strncmp with constant unterminated arrays not folded
gcc/testsuite/ChangeLog:

	PR tree-optimization/92501
	* gcc.dg/strcmpopt_7.c: New test.

gcc/ChangeLog:

	PR tree-optimization/92501
	* gimple-fold.c ((gimple_fold_builtin_string_compare): Let strncmp
	handle unterminated arrays.  Rename local variables for clarity.

From-SVN: r278621
2019-11-22 09:39:37 -07:00
Andrew Stubbs
aa84ec8415 Use GFX9 granulated sgprs count correctly.
2019-11-22  Andrew Stubbs  <ams@codesourcery.com>

	gcc/
	* config/gcn/gcn.c (gcn_hsa_declare_function_name): Calculate
	granulated_sgprs according to architecture.

From-SVN: r278617
2019-11-22 14:42:49 +00:00
Jan Hubicka
9fd052e775 Release memory-block-pool memory back to malloc.
* ggc-page.c (ggc_collect): Call memory_block_pool::trim.
	* memory-block.cc (memory_block_pool::clear_free_list): Rename to ...
	(memory_block_pool::reduce_free_list): ... this one.
	(memory_block_pool::trim): New static function.
	* memory-block.h (memory_block_pool::freelist_size): New constant
	(memory_block_pool::clear_free_list): Rename to ...
	(memory_block_pool::reduce_free_list): ... this one.
	(memory_block_pool::trim): Declare.
	
	* lto.c (lto_wpa_write_files): Call memory_block_pool::trim.

From-SVN: r278616
2019-11-22 14:37:37 +00:00
Richard Sandiford
f2f3dbc67b Disable epilogue loop vectorisation for vect-widen-mult-u8-*.c
vect-widen-mult-u8.c and vect-widen-mult-u8-u32.c were failing
on arm-linux-gnueabihf with epilogue vectorisation because we
print the expected messages twice rather than once.  We could
fix that either by removing the counts or by disabling epilogue
loop vectorisation.  The other vect-widen-mult-* tests do the
latter, so I did the same here.

2019-11-22  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
	* gcc.dg/vect/vect-widen-mult-u8.c: Disable epilogue loop
	vectorization.
	* gcc.dg/vect/vect-widen-mult-u8-u32.c: Likewise.

From-SVN: r278613
2019-11-22 12:03:08 +00:00
Richard Sandiford
aa5521f298 Fix markup in gcc.dg/vect/vect-cond-reduc-3.c
gcc.dg/vect/vect-cond-reduc-3.c had been failing on
arm-linux-gnueabihf since the test was added, because the test needs
support for VEC_COND_EXPR <float cmp float, int, int> whereas the target
only supports VEC_COND_EXPRs in which all modes are the same.  (I have
a fix for that, but it's not really stage 3 material.)

2019-11-22  Richard Sandiford  <richard.sandiford@arm.com>

gcc/testsuite/
	* gcc.dg/vect/vect-cond-reduc-3.c: Require vect_cond_mixed
	rather than vect_condition.

From-SVN: r278612
2019-11-22 10:56:13 +00:00
Richard Sandiford
2707101352 Move EXTRACT_LAST_REDUCTION costing to vectorizable_condition
gcc.target/aarch64/sve/clastb_[57].c started failing after the increase
in the cost of vec_to_scalar (r278452).  The problem is that we were
double-counting the cost of the CLASTB: once in vect_model_reduction_cost
as a vec_to_scalar and once in vectorizable_condition as a plain
vector_stmt.

Based on the TODO above vect_model_reduction_cost, I think the
preferred long-term direction is for vectorizable_* to cost these
things itself, so that's what the patch does (for this one case only).

2019-11-22  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-stmts.c (vect_model_simple_cost): Take an optional
	vect_cost_for_stmt.
	(vectorizable_condition): Calculate the cost of EXTRACT_LAST_REDUCTION
	here rather than...
	* tree-vect-loop.c (vect_model_reduction_cost): ...here.

From-SVN: r278611
2019-11-22 09:58:08 +00:00
Claudiu Zissulescu
d9c50233e4 [ARC] Fix failing pr77309 for ARC700
The patterns neg_scc_insn and not_scc_insn are not correct, leading to
failing pr77309 test for ARC700. Add two new bic compare with zero
patterns to improve output code.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

	* config/arc/arc.md (bic_f): Use cc_set_register predicate.
	(bic_cmp0_noout): New pattern.
	(bic_cmp0): Likewise.
	(neg_scc_insn): Remove pattern.
	(not_scc_insn): Likewise.

From-SVN: r278610
2019-11-22 09:00:33 +01:00