Commit Graph

145906 Commits

Author SHA1 Message Date
David Malcolm
58d4c8364b Move name_to_pass_map into class pass_manager
gcc/ChangeLog:
	* pass_manager.h (pass_manager::register_pass_name): New method.
	(pass_manager::get_pass_by_name): New method.
	(pass_manager::create_pass_tab): New method.
	(pass_manager::m_name_to_pass_map): New field.
	* passes.c (name_to_pass_map): Delete global in favor of field
	"m_name_to_pass_map" of pass_manager.
	(register_pass_name): Rename from a function to...
	(pass_manager::register_pass_name): ...this method, updating
	for renaming of global "name_to_pass_map" to field
	"m_name_to_pass_map".
	(create_pass_tab): Rename from a function to...
	(pass_manager::create_pass_tab): ...this method, updating
	for renaming of global "name_to_pass_map" to field.
	(get_pass_by_name): Rename from a function to...
	(pass_manager::get_pass_by_name): ...this method.
	(enable_disable_pass): Convert use of get_pass_by_name to
	a method call, locating the pass_manager singleton.

From-SVN: r235977
2016-05-06 15:18:59 +00:00
David Malcolm
66b0fe8f4e Make argv const char ** in read_md_files etc
gcc/ChangeLog:
	* genattr-common.c (main): Convert argv from
	char ** to const char **.
	* genattr.c (main): Likewise.
	* genattrtab.c (main): Likewise.
	* genautomata.c (initiate_automaton_gen): Likewise.
	(main): Likewise.
	* gencodes.c (main): Likewise.
	* genconditions.c (main): Likewise.
	* genconfig.c (main): Likewise.
	* genconstants.c (main): Likewise.
	* genemit.c (main): Likewise.
	* genenums.c (main): Likewise.
	* genextract.c (main): Likewise.
	* genflags.c (main): Likewise.
	* genmddeps.c (main): Likewise.
	* genopinit.c (main): Likewise.
	* genoutput.c (main): Likewise.
	* genpeep.c (main): Likewise.
	* genpreds.c (main): Likewise.
	* genrecog.c (main): Likewise.
	* gensupport.c (init_rtx_reader_args_cb): Likewise.
	(init_rtx_reader_args): Likewise.
	* gensupport.h (init_rtx_reader_args_cb): Likewise.
	(init_rtx_reader_args): Likewise.
	* gentarget-def.c (main): Likewise.
	* read-md.c (read_md_files): Likewise.
	* read-md.h (read_md_files): Likewise.

From-SVN: r235976
2016-05-06 15:14:05 +00:00
Uros Bizjak
9c5e57dfb7 i386.md (int cmove peephole2s): Use general_reg_operand instead of register_and_not_any_fp_reg_operand as...
* config/i386/i386.md (int cmove peephole2s): Use general_reg_operand
	instead of register_and_not_any_fp_reg_operand as operand 0 predicate.
	* config/i386/predicates.md (register_and_not_any_fp_reg_operand):
	Remove unused predicate.
	(register_and_not_fp_reg_operand): Ditto.

From-SVN: r235975
2016-05-06 16:34:58 +02:00
Martin Liska
734c152691 Fix memory leak in tree-if-conv.c
* tree-if-conv.c (ifcvt_split_critical_edges): Use auto_vec
	instead of vec as the vector is local to the function.

From-SVN: r235974
2016-05-06 14:26:23 +00:00
Jakub Jelinek
9bdf001b7a sse.md (*<code>v8hi3, [...]): Add avx512bw alternative.
* config/i386/sse.md (*<code>v8hi3, *<code>v16qi3): Add
	avx512bw alternative.

From-SVN: r235973
2016-05-06 15:16:00 +02:00
Jakub Jelinek
dd3b6464c5 sse.md (<mask_codefor>ashr<mode>3<mask_name>): Move before the ashr<mode>3 pattern.
* config/i386/sse.md (<mask_codefor>ashr<mode>3<mask_name>): Move
	before the ashr<mode>3 pattern.

	* gcc.target/i386/avx512bw-vpsraw-3.c: New test.
	* gcc.target/i386/avx512vl-vpsrad-3.c: New test.

From-SVN: r235972
2016-05-06 15:15:24 +02:00
Jakub Jelinek
58ec1d0e67 sse.md (*avx2_pmaddwd, [...]): Use v instead of x in vex or maybe_vex alternatives...
* config/i386/sse.md (*avx2_pmaddwd, *sse2_pmaddwd): Use
	v instead of x in vex or maybe_vex alternatives, use
	maybe_evex instead of vex in prefix.

	* gcc.target/i386/avx512bw-vpmaddwd-3.c: New test.

From-SVN: r235971
2016-05-06 15:14:34 +02:00
Jakub Jelinek
5111f1d4ac sse.md (*vec_extractv4sf_0, [...]): Use v instead of x in vex or maybe_vex alternatives...
* config/i386/sse.md (*vec_extractv4sf_0, *sse4_1_extractps,
	*vec_extractv4sf_mem, vec_extract_lo_v16hi, vec_extract_hi_v16hi,
	vec_extract_lo_v32qi, vec_extract_hi_v32qi): Use v instead of x
	in vex or maybe_vex alternatives, use maybe_evex instead of vex
	in prefix.

From-SVN: r235970
2016-05-06 15:13:09 +02:00
Jakub Jelinek
17f9471472 sse.md (*vec_concatv2sf_sse4_1, [...]): Use v instead of x in vex or maybe_vex alternatives...
* config/i386/sse.md (*vec_concatv2sf_sse4_1, *vec_concatv4sf): Use
	v instead of x in vex or maybe_vex alternatives, use
	maybe_evex instead of vex in prefix.

From-SVN: r235969
2016-05-06 15:12:32 +02:00
Jakub Jelinek
e239397b2c sse.md (sse_shufps_<mode>, [...]): Use v instead of x in vex or maybe_vex alternatives...
* config/i386/sse.md (sse_shufps_<mode>, sse_storehps, sse_loadhps,
	sse_storelps, sse_movss, avx2_vec_dup<mode>, avx2_vec_dupv8sf_1,
	sse2_shufpd_<mode>, sse2_storehpd, sse2_storelpd, sse2_loadhpd,
	sse2_loadlpd, sse2_movsd): Use v instead of x in vex or maybe_vex
	alternatives, use maybe_evex instead of vex in prefix.

From-SVN: r235968
2016-05-06 15:11:56 +02:00
Jakub Jelinek
fa13cb1519 * config/i386/sse.md (vec_interleave_lowv4sf,
*vec_interleave_highv2df, *vec_interleave_lowv2df): Use
	v instead of x in vex or maybe_vex alternatives, use
	maybe_evex instead of vex in prefix.

From-SVN: r235967
2016-05-06 15:11:17 +02:00
Jakub Jelinek
924099a0dc sse.md (sse_movhlps, [...]): Use v instead of x in vex or maybe_vex alternatives...
* config/i386/sse.md (sse_movhlps, sse_movlhps): Use
	v instead of x in vex or maybe_vex alternatives, use
	maybe_evex instead of vex in prefix.

From-SVN: r235966
2016-05-06 15:10:39 +02:00
Jakub Jelinek
59401c609c sse.md (*avx_cvtpd2dq256_2, [...]): Use v constraint instead of x.
* config/i386/sse.md (*avx_cvtpd2dq256_2, *avx_cvtps2pd256_2): Use
	v constraint instead of x.

From-SVN: r235965
2016-05-06 15:09:53 +02:00
Nathan Sidwell
3433ee3503 gimple.c (gimple_call_same_target_p): Unique functions are eq.
* gimple.c (gimple_call_same_target_p): Unique functions are eq.
	* tree-ssa-tail-merge.c (same_succ::equal): Check pointer eq
	equality first.

From-SVN: r235964
2016-05-06 13:02:42 +00:00
Richard Biener
ab4ccf2094 re PR tree-optimization/70948 (r235622 caused gcc.c-torture/execute/va-arg-pack-1.c execution failure AArch64)
2016-05-06  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/70948
	* tree-ssa-structalias.c (find_func_aliases_for_builtin_call):
	Properly clobber all fields of va_list for __builtin_va_start.

From-SVN: r235963
2016-05-06 12:53:26 +00:00
Yuri Rumyantsev
19aa23d84e re PR debug/70935 (ICE: verify_ssa failed (error: definition in block 9 does not dominate use in block 12) w/ -O3 -g)
gcc/

2016-05-06  Yuri Rumyantsev  <ysrumyan@gmail.com>

	PR debug/70935
	* tree-ssa-loop-unswitch.c (find_loop_guard): Reject guard edge with
	loop latch destination.

gcc/testsuite/

2016-05-06  Yuri Rumyantsev  <ysrumyan@gmail.com>

	PR debug/70935
	* gcc.dg/torture/pr70935.c: New test.

From-SVN: r235962
2016-05-06 12:07:25 +00:00
Martin Liska
ac0e4fdebc Manual changes to GCC coding style in tree-ssa-uninit.c
* tree-ssa-uninit.c: Apply manual changes
	to the GNU coding style.
	(prune_uninit_phi_opnds): Rename from
	prune_uninit_phi_opnds_in_unrealizable_paths.

From-SVN: r235961
2016-05-06 11:27:28 +00:00
Oleg Endo
d8997c4415 sh.opt (madjust-unroll, [...]): Remove deprecated options.
gcc/
	* config/sh/sh.opt (madjust-unroll, minvalid-symbols, msoft-atomic,
	mspace): Remove deprecated options.
	* doc/invoke.texi (SH options): Remove -mspace.

From-SVN: r235960
2016-05-06 11:05:49 +00:00
Oleg Endo
c8c4abf28f sh.md (ic_invalidate_line_sh4a): Fix insn length.
gcc/
	* config/sh/sh.md (ic_invalidate_line_sh4a): Fix insn length.

From-SVN: r235957
2016-05-06 10:35:42 +00:00
Oleg Endo
74d5be8c57 sh.md (*cmpeqsi_t): Remove combine insn pattern and similar corresponding combine split pattern.
gcc/
	* config/sh/sh.md (*cmpeqsi_t): Remove combine insn pattern and similar
	corresponding combine split pattern.

From-SVN: r235956
2016-05-06 10:29:33 +00:00
Oleg Endo
ce23a8ff10 Fix ChangeLog formatting.
From-SVN: r235955
2016-05-06 10:23:48 +00:00
Oleg Endo
ae5f0df1d5 re PR target/58219 ([SH] mov.l insn length is wrong on SH2A)
gcc/
	PR target/58219
	* config/sh/predicates.md (long_displacement_mem_operand): New.
	* config/sh/sh.md (movsi_i): Allow for SH2A, disallow for any FPU.
	Add movi20, movi20s alternatives.  Adjust length attribute for
	alternatives.
	(movsi_ie): Allow for any FPU.  Adjust length attribute for
	alternatives.
	(movsi_i_lowpart): Add movi20, movi20s alternatives.  Adjust length
	attribute for alternatives.
	(*mov<mode>): Use long_displacement_mem_operand for length attribute.
	(*movdi_i, movdf_k, movdf_i4, movsf_i, movsf_ie, movsf_ie_ra): Adjust
	length attribute for alternatives.

gcc/testsuite/
	PR target/58219
	*gcc.target/sh/pr58219.c: New tests.

From-SVN: r235954
2016-05-06 10:20:13 +00:00
Richard Biener
078f7e37ba re PR tree-optimization/70960 (ICE: tree check: expected ssa_name, have integer_cst in ifcvt_walk_pattern_tree, at tree-if-conv.c:2465)
2016-05-06  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/70960
	* tree-if-conv.c (ifcvt_walk_pattern_tree): Handle non-SSA ops.

	* gfortran.fortran-torture/compile/pr70960.f90: New testcase.

From-SVN: r235953
2016-05-06 10:18:59 +00:00
Oleg Endo
765d7b5470 re PR target/52933 (SH Target: Use div0s for integer sign comparisons)
gcc/
	PR target/52933
	* config/sh/sh.md (*cmp_div0s_7, *cmp_div0s_8): Add div0s variants.
	* config/sh/sh.c (sh_rtx_costs): Add another div0s case.

gcc/testsuite/
	PR target/52933
	* gcc.target/sh/pr52933-1.c (test_31, test_32, test_33, test_34,
	test_35, test_36, test_37, test_38, test_39, test_40): New sub-tests.
	Adjust expected instruction counts.
	* gcc.target/sh/pr52933-2.c: Adjust expected instruction counts.

From-SVN: r235952
2016-05-06 09:52:35 +00:00
Marek Polacek
29c94e65e1 re PR sanitizer/70875 (ICE in get_ubsan_type_info_for_type with -fsanitize=undefined)
PR sanitizer/70875
	* ubsan.c (get_ubsan_type_info_for_type): Remove assert.

	* gcc.dg/ubsan/bounds-3.c: New test.

From-SVN: r235951
2016-05-06 09:47:25 +00:00
Oleg Endo
3684b02efb re PR target/54089 ([SH] Refactor shift patterns)
gcc/
	PR target/54089
	* config/sh/sh.md (*rotcr): Add another variant.

gcc/testsuite/
	PR target/54089
	* gcc.target/sh/pr54089-1.c (test_24): Add new sub-test.

From-SVN: r235950
2016-05-06 09:41:57 +00:00
Eric Botcazou
498988ad6a re PR ada/70969 (bootstrap failure: s-unstyp.ads:40:15: violation of No_Elaboration_Code_All at line 42)
PR ada/70969
	* system-darwin-ppc64.ads: Add pragma No_Elaboration_Code_All.
	* system-linux-armeb.ads: Likewise.
	* system-linux-mips64el.ads: Likewise.
	* system-linux-mips.ads: Likewise.
	* system-linux-mipsel.ads: Likewise.
	* system-linux-ppc64.ads: Likewise.
	* system-linux-sparcv9.ads: Likewise.
	* system-rtems.ads: Likewise.

From-SVN: r235946
2016-05-06 09:11:38 +00:00
Richard Biener
8706773f5a re PR fortran/70931 (ICE with -g in native_encode_initializer, bei dwarf2out.c:17768)
2016-05-06  Richard Biener  <rguenther@suse.de>

	PR middle-end/70931
	* dwarf2out.c (native_encode_initializer): Skip zero-sized fields.

	* gfortran.dg/pr70931.f90: New testcase.

From-SVN: r235944
2016-05-06 07:44:22 +00:00
Richard Biener
a4f510181a re PR target/70941 (Test miscompiled with -O2.)
2016-05-06  Richard Biener  <rguenther@suse.de>

	PR middle-end/70941
	* fold-const.c (split_tree): Always convert to the original type
	before negating.

	* gcc.dg/torture/pr70941.c: New testcase.

From-SVN: r235943
2016-05-06 07:38:27 +00:00
Richard Biener
f5d6c2d81c fwprop.c (fwprop): Remove duplicate cleanup_cfg call.
2016-05-06  Richard Biener  <rguenther@suse.de>

	* fwprop.c (fwprop): Remove duplicate cleanup_cfg call.
	(fwprop_addr): Likewise.

From-SVN: r235942
2016-05-06 07:27:33 +00:00
GCC Administrator
d0b2932ae8 Daily bump.
From-SVN: r235940
2016-05-06 00:16:17 +00:00
Uros Bizjak
38302a2102 re PR target/70873 ([7 Regressio] 20% performance regression at 482.sphinx3 after r235442 with -O2 -m32 on Haswell.)
PR target/70873
	* config/i386/i386-protos.h (ix86_standard_x87sse_constant_load_p):
	New prototype.
	* config/i386/i386.c (ix86_standard_x87sse_constant_load_p): New.
	* config/i386/i386.md (push mem splitter): Use find_constant_src in
	the splitter condition.
	(FP load splitter): Use ix86_standard_x87sse_constant_load_p in
	the splitter condition.
	(FP float_extend load splitter): Ditto.

From-SVN: r235936
2016-05-06 00:48:29 +02:00
Uros Bizjak
c366c55073 i386.md (peehole2 patterns): Change true_regnum to REGNUM in all peephole2 patterns.
* config/i386/i386.md (peehole2 patterns): Change true_regnum
	to REGNUM in all peephole2 patterns.
	(post-reload splitters): Change true_regnum to REGNUM in
	post-reload splitters.
	(zero_extend splitters): Use general_reg_operand and
	nonimmediate_gr_operand predicates.

From-SVN: r235933
2016-05-05 22:33:42 +02:00
Rainer Orth
40436d8169 Enable dg-reqire-sharedlib on Solaris
* testsuite/lib/libstdc++.exp (libstdc++_init): Enable on *-*-solaris*.

From-SVN: r235931
2016-05-05 19:54:42 +00:00
Bin Cheng
c4f2425fe8 re PR tree-optimization/57206 (Auto-vectorization fails when array index is an unsigned int expression)
gcc/testsuite
	PR tree-optimization/57206
	* gcc.dg/vect/pr57206.c: New test.

From-SVN: r235926
2016-05-05 16:20:54 +00:00
Rainer Orth
5dc081978c Declare isnanf in gcc.dg/ipa/inline-8.c
* gcc.dg/ipa/inline-8.c	(isnanf): Declare.

From-SVN: r235925
2016-05-05 14:29:47 +00:00
Jason Merrill
17ee9a4e8c * decl.c: Update comment.
From-SVN: r235923
2016-05-05 09:33:35 -04:00
Jakub Jelinek
0f66751a5f openmp.c (gfc_match_omp_clauses): Restructuralize...
* openmp.c (gfc_match_omp_clauses): Restructuralize, so that clause
	parsing is done in a big switch based on gfc_peek_ascii_char and
	individual clauses under their first letters are sorted too.

From-SVN: r235922
2016-05-05 15:31:02 +02:00
Jakub Jelinek
568bac8c8a sse.md (<avx512>_fmadd_<mode>_mask3<round_name>): Use v constraint instead of x.
* config/i386/sse.md (<avx512>_fmadd_<mode>_mask3<round_name>): Use
	v constraint instead of x.

	* gcc.target/i386/avx512f-vfmadd-1.c: New test.

From-SVN: r235921
2016-05-05 15:29:54 +02:00
Jakub Jelinek
351f85c5be c-parser.c (c_parser_switch_statement): Add IF_P argument, parse it through to c_parser_c99_block_statement.
* c-parser.c (c_parser_switch_statement): Add IF_P argument,
	parse it through to c_parser_c99_block_statement.
	(c_parser_statement_after_labels): Adjust c_parser_switch_statement
	caller.

	* parser.c (cp_parser_selection_statement): For RID_SWITCH,
	pass if_p instead of NULL to cp_parser_implicitly_scoped_statement.

	* c-c++-common/Wdangling-else-4.c: New test.

From-SVN: r235920
2016-05-05 15:26:59 +02:00
Jonathan Wakely
f5c40ce2cf Add dg-require-filesystem-ts directive to test
* testsuite/experimental/filesystem/path/native/string.cc: Add
	dg-require-filesystem-ts directive.

From-SVN: r235919
2016-05-05 11:03:56 +01:00
GCC Administrator
db178de89f Daily bump.
From-SVN: r235918
2016-05-05 00:16:21 +00:00
Alan Modra
6a67e81be7 [RS6000] TARGET_RELOCATABLE
For ABI_V4, -mrelocatable and -fPIC both generate position independent
code, with some extra "fixup" output for -mrelocatable.  The
similarity of these two options has led to the situation where the
sysv4.h SUBTARGET_OVERRIDE_OPTIONS sets flag_pic on seeing
-mrelocatable, and sets TARGET_RELOCATABLE on seeing -fPIC.  That
prevents LTO from properly optimizing position dependent executables,
because the mutual dependence of the flags and the fact that LTO
streaming records the state of rs6000_isa_flags, result in flag_pic
being set when it shouldn't be.

So, don't set TARGET_RELOCATABLE when -fPIC.  Places that currently
test TARGET_RELOCATABLE can instead test
TARGET_RELOCATABLE || (DEFAULT_ABI == ABI_V4 && flag_pic > 1)
or since TARGET_RELOCATABLE can only be enabled when ABI_V4,
DEFAULT_ABI == ABI_V4 && (TARGET_RELOCATABLE || flag_pic > 1).

Also, since flag_pic is set by -mrelocatable, a number of places that
currently test TARGET_RELOCATABLE can be simplified.  I also made
-mrelocatable set TARGET_NO_FP_IN_TOC, allowing TARGET_RELOCATABLE to
be removed from ASM_OUTPUT_SPECIAL_POOL_ENTRY_P.  Reducing occurrences
of TARGET_RELOCATABLE is a good thing.

	PR target/68662
	* config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Don't
	set OPTION_MASK_RELOCATABLE when flag_pic == 2.  Set
	TARGET_NO_FP_IN_TOC for -mrelocatable.
	(MINIMAL_TOC_SECTION_ASM_OP): Remove redundant
	TARGET_RELOCATABLE test.
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Likewise.
	(ASM_PREFERRED_EH_DATA_FORMAT): Likewise.
	* config/rs6000/linux64.h (MINIMAL_TOC_SECTION_ASM_OP): Likewise.
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Likewise.
	(ASM_PREFERRED_EH_DATA_FORMAT): Likewise.
	* config/rs6000/freebsd64.h (MINIMAL_TOC_SECTION_ASM_OP): Likewise.
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Likewise.
	(ASM_PREFERRED_EH_DATA_FORMAT): Likewise.
	* config/rs6000/predicates.md (easy_fp_constant): Likewise.
	* config/rs6000/rs6000.c (rs6000_elf_output_toc_section_asm_op):
	Likewise.
	(rs6000_assemble_integer): Update TARGET_RELOCATABLE test.
	(rs6000_stack_info): Likewise.
	(rs6000_elf_asm_out_constructor): Likewise.
	(rs6000_elf_asm_out_destructor): Likewise.
	(rs6000_elf_declare_function_name): Likewise.
	* config/rs6000/rs6000.md (load_toc_aix_di): Likewise.
	* config/rs6000/rs6000.h (MASK_RELOCATABLE, MASK_MINIMAL_TOC):
	Don't define.

From-SVN: r235914
2016-05-05 09:37:27 +09:30
Alan Modra
552d4a3dc6 [RS6000] Rewrite rs6000_frame_related to use simplify_replace_rtx
Modify SETs rather than using replace_rtx on the whole insn.
Removes fragile hacks preventing USE and CLOBBER being modified.

	* config/rs6000/rs6000.c (rs6000_frame_related): Rewrite.

From-SVN: r235913
2016-05-05 09:31:26 +09:30
Alan Modra
662fa3ba61 [RS6000] out-of-line exit register restore funcs
* config/rs6000/rs6000.c (rs6000_savres_strategy): Don't use
	out-of-line gpr restore for one or two regs if that would add
	a save of lr.

From-SVN: r235907
2016-05-05 07:02:27 +09:30
Uros Bizjak
fdab73dc76 re PR target/70873 ([7 Regressio] 20% performance regression at 482.sphinx3 after r235442 with -O2 -m32 on Haswell.)
PR target/70873
	* config/i386/i386.md
	(TARGET_SSE_PARTIAL_REG_DEPENDENCY float_extend sf->df peephole2):
	Change to post-epilogue_completed late splitter.  Use sse_reg_operand
	as operand 0 predicate.
	(TARGET_SSE_PARTIAL_REG_DEPENDENCY float_truncate df->sf peephole2):
	Ditto.
	(TARGET_SSE_PARTIAL_REG_DEPENDENCY float {si,di}->{sf,df} peephole2):
	Ditto.  Emit the pattern using RTX.

	(TARGET_USE_VECTOR_FP_CONVERTS float_extend sf->df splitter):
	Use sse_reg_opreand as operand 0 predicate.  Do not use true_regnum in
	the post-reload splitter.  Use lowpart_subreg instead of gen_rtx_REG.
	(TARGET_USE_VECTOR_FP_CONVERTS float_truncate df->sf splitter):
	Ditto.
	(TARGET_USE_VECTOR_CONVERTS float si->{sf,df} splitter): Use
	sse_reg_operand as operand 0 predicate.

	(TARGET_SPLIT_MEM_OPND_FOR_FP_CONVERTS float_extend sf->df peephole2):
	Use sse_reg_opreand as operand 0 predicate.  Use lowpart_subreg
	instead of gen_rtx_REG.
	(TARGET_SPLIT_MEM_OPND_FOR_FP_CONVERTS float_truncate sf->df peephole2):
	Ditto.

From-SVN: r235906
2016-05-04 23:13:13 +02:00
Segher Boessenkool
d07d21777f shrink-wrap: Remove complicated simple_return manipulations
Now that cfgcleanup knows how to optimize with return statements, the
epilogue insertion code doesn't have to deal with it itself anymore.


	* function.c (emit_use_return_register_into_block): Delete.
	(gen_return_pattern): Delete.
	(emit_return_into_block): Delete.
	(active_insn_between): Delete.
	(convert_jumps_to_returns): Delete.
	(emit_return_for_exit): Delete.
	(thread_prologue_and_epilogue_insns): Delete all code dealing with
	simple_return for shrink-wrapped blocks.
	* shrink-wrap.c (try_shrink_wrapping): Insert simple_return at the
	end of blocks that need one.
	(get_unconverted_simple_return): Delete.
	(convert_to_simple_return): Delete.
	* shrink-wrap.c (get_unconverted_simple_return): Delete declaration.
	(convert_to_simple_return): Ditto.

From-SVN: r235905
2016-05-04 22:57:08 +02:00
Segher Boessenkool
45676a7c8a cfgcleanup: Fold jumps and conditional branches with returns
This patch makes cfgcleanup optimize jumps to returns.  There are three
cases this handles:

-- A jump to a return; this is simplified to just that return.
-- A conditional branch to a return; simplified to a conditional return.
-- A conditional branch that falls through to a return.  This is simplified
   to a conditional return (with the condition inverted), falling through
   to a jump to the original destination.  That jump can then be optimized
   further, as usual.

This handles all cases the current function.c does, and a few it misses.


	* cfgcleanup.c (bb_is_just_return): New function.
	(try_optimize_cfg): Simplify jumps to return, branches to return,
	and branches around return.

From-SVN: r235904
2016-05-04 22:54:47 +02:00
Segher Boessenkool
1a8fb012bd cfgcleanup: Bugfix in try_simplify_condjump
If the jump_block here contains just a return, we will crash later
in invert_jump.  Don't allow that case.


	* cfgcleanup.c (try_simplify_condjump): Don't try to simplify a
	branch to a return.

From-SVN: r235903
2016-05-04 22:50:12 +02:00
Jakub Jelinek
2d1ac15a6a re PR c++/70906 (ice in add_expr, at tree.c:7925)
PR c++/70906
	PR c++/70933
	* tree-core.h (enum operand_equal_flag): Add OEP_HASH_CHECK.
	* tree.c (inchash::add_expr): If !IS_EXPR_CODE_CLASS (tclass),
	assert flags & OEP_HASH_CHECK, instead of asserting it
	never happens.  Handle TARGET_EXPR.
	* fold-const.c (operand_equal_p): For hash verification,
	or in OEP_HASH_CHECK into flags.

	* g++.dg/opt/pr70906.C: New test.
	* g++.dg/opt/pr70933.C: New test.

From-SVN: r235902
2016-05-04 22:44:40 +02:00