Oleg Endo [Sat, 24 Jan 2015 13:04:53 +0000 (13:04 +0000)]
re PR target/49263 (SH Target: underutilized "TST #imm, R0" instruction)
gcc/
PR target/49263
PR target/53987
PR target/64345
PR target/59533
PR target/52933
PR target/54236
PR target/51244
* config/sh/sh-protos.h
(sh_extending_set_of_reg::can_use_as_unextended_reg,
sh_extending_set_of_reg::use_as_unextended_reg,
sh_is_nott_insn, sh_movt_set_dest, sh_movrt_set_dest, sh_is_movt_insn,
sh_is_movrt_insn, sh_insn_operands_modified_between_p,
sh_reg_dead_or_unused_after_insn, sh_in_recog_treg_set_expr,
sh_recog_treg_set_expr, sh_split_treg_set_expr): New functions.
(sh_treg_insns): New class.
* config/sh/sh.c (TARGET_LEGITIMATE_COMBINED_INSN): Define target hook.
(scope_counter): New class.
(sh_legitimate_combined_insn, sh_is_nott_insn, sh_movt_set_dest,
sh_movrt_set_dest, sh_reg_dead_or_unused_after_insn,
sh_extending_set_of_reg::can_use_as_unextended_reg,
sh_extending_set_of_reg::use_as_unextended_reg, sh_recog_treg_set_expr,
sh_in_recog_treg_set_expr, sh_try_split_insn_simple,
sh_split_treg_set_expr): New functions.
(addsubcosts): Handle treg_set_expr.
(sh_rtx_costs): Handle IF_THEN_ELSE and ZERO_EXTRACT.
(sh_rtx_costs): Use arith_reg_operand in SIGN_EXTEND and ZERO_EXTEND.
(sh_rtx_costs): Handle additional bit test patterns in EQ and AND cases.
(sh_insn_operands_modified_between_p): Make non-static.
* config/sh/predicates.md (zero_extend_movu_operand): Allow
simple_mem_operand in addition to displacement_mem_operand.
(zero_extend_operand): Don't allow zero_extend_movu_operand.
(treg_set_expr, treg_set_expr_not_const01,
arith_reg_or_treg_set_expr): New predicates.
* config/sh/sh.md (tstsi_t): Use arith_reg_operand and
arith_or_int_operand instead of logical_operand. Convert to
insn_and_split. Try to optimize constant operand in splitter.
(tsthi_t, tstqi_t): Fold into *tst<mode>_t. Convert to insn_and_split.
(*tstqi_t_zero): Delete.
(*tst<mode>_t_subregs): Add !sh_in_recog_treg_set_expr split condition.
(tstsi_t_and_not): Delete.
(tst<mode>_t_zero_extract_eq): Rename to *tst<mode>_t_zero_extract.
Convert to insn_and_split.
(unnamed split, tstsi_t_zero_extract_xor,
tstsi_t_zero_extract_subreg_xor_little,
tstsi_t_zero_extract_subreg_xor_big): Delete.
(*tstsi_t_shift_mask): New insn_and_split.
(cmpeqsi_t, cmpgesi_t): Add new split for const_int 0 operands and try
to recombine with surrounding insns when splitting.
(*negtstsi): Add !sh_in_recog_treg_set_expr condition.
(cmp_div0s_0, cmp_div0s_1, *cmp_div0s_0, *cmp_div0s_1): Rewrite as ...
(cmp_div0s, *cmp_div0s_1, *cmp_div0s_2, *cmp_div0s_3, *cmp_div0s_4,
*cmp_div0s_5, *cmp_div0s_6): ... these new insn_and_split patterns.
(*cbranch_div0s: Delete.
(*addc): Convert to insn_and_split. Use treg_set_expr as 3rd operand.
Try to recombine with surrounding insns when splitting. Add operand
order variants.
(*addc_t_r, *addc_r_t): Use treg_set_expr_not_const01.
(*addc_r_r_1, *addc_r_lsb, *addc_r_r_lsb, *addc_r_lsb_r, *addc_r_msb,
*addc_r_r_msb, *addc_2r_msb): Delete.
(*addc_2r_lsb): Rename to *addc_2r_t. Use treg_set_expr. Add operand
order variant.
(*addc_negreg_t): New insn_and_split.
(*subc): Convert to insn_and_split. Use treg_set_expr as 3rd operand.
Try to recombine with surrounding insns when splitting.
Add operand order variants.
(*subc_negt_reg, *subc_negreg_t, *reg_lsb_t, *reg_msb_t): New
insn_and_split patterns.
(*rotcr): Use arith_reg_or_treg_set_expr. Try to recombine with
surrounding insns when splitting.
(unnamed rotcr split): Use arith_reg_or_treg_set_expr.
(*rotcl): Likewise. Add zero_extract variant.
(*ashrsi2_31): New insn_and_split.
(*negc): Convert to insn_and_split. Use treg_set_expr.
(*zero_extend<mode>si2_disp_mem): Update comment.
(movrt_negc, *movrt_negc, nott): Add !sh_in_recog_treg_set_expr split
condition.
(*mov_t_msb_neg, mov_neg_si_t): Use treg_set_expr. Try to recombine
with surrounding insns when splitting.
(any_treg_expr_to_reg): New insn_and_split.
(*neg_zero_extract_0, *neg_zero_extract_1, *neg_zero_extract_2,
*neg_zero_extract_3, *neg_zero_extract_4, *neg_zero_extract_5,
*neg_zero_extract_6, *zero_extract_0, *zero_extract_1,
*zero_extract_2): New single bit zero extract patterns.
(bld_reg, *bld_regqi): Fold into bld<mode>_reg.
(*get_thread_pointersi, store_gbr, *mov<mode>_gbr_load,
*mov<mode>_gbr_load, *mov<mode>_gbr_load, *mov<mode>_gbr_load,
*movdi_gbr_load): Use arith_reg_dest instead of register_operand for
set destination.
(set_thread_pointersi, load_gbr): Use arith_reg_operand instead of
register_operand for set source.
Ian Lance Taylor [Fri, 23 Jan 2015 22:26:41 +0000 (22:26 +0000)]
re PR go/64595 (go programs abort when debug info is stripped)
PR go/64595
* go-lang.c (go_langhook_init_options_struct): Set default
debug_info_level.
(go_langhook_post_options): If debug_info_level is still the
default, make sure write_symbols is set.
* gccgo.texi (Invoking gccgo): Document that -g1 is the default.
Vladimir Makarov [Fri, 23 Jan 2015 20:15:56 +0000 (20:15 +0000)]
re PR rtl-optimization/64317 (Ineffective allocation of PIC base register)
2015-01-23 Vladimir Makarov <vmakarov@redhat.com>
PR target/64317
* lra-lives.c (make_hard_regno_born): Add parameter. Don't make
REAL_PIC_OFFSET_TABLE_REGNUM conflicting with pic offset pseudo.
(mark_regno_live, process_bb_lives): Pass new paramater value to
make_hard_regno_born.
2015-01-23 Vladimir Makarov <vmakarov@redhat.com>
PR target/64317
* gcc.target/i386/pr64317.c: New test.
Jakub Jelinek [Fri, 23 Jan 2015 19:55:16 +0000 (20:55 +0100)]
re PR rtl-optimization/63637 (CSE on x86 asm()-s no longer working due to PR/60663 fix)
PR rtl-optimization/63637
PR rtl-optimization/60663
* cse.c (merge_equiv_classes): Set new_elt->cost to MAX_COST
if elt->cost is MAX_COST for ASM_OPERANDS.
(find_sets_in_insn): Fix up comment typo.
(cse_insn): Don't set src_volatile for all non-volatile
ASM_OPERANDS in PARALLELs, but just those with multiple outputs
or with "memory" clobber. Set elt->cost to MAX_COST
for ASM_OPERANDS in PARALLEL. Set src_elt->cost to MAX_COST
if new_src is ASM_OPERANDS and elt->cost is MAX_COST.
* gcc.dg/pr63637-1.c: New test.
* gcc.dg/pr63637-2.c: New test.
* gcc.dg/pr63637-3.c: New test.
* gcc.dg/pr63637-4.c: New test.
* gcc.dg/pr63637-5.c: New test.
* gcc.dg/pr63637-6.c: New test.
* gcc.target/i386/pr63637-1.c: New test.
* gcc.target/i386/pr63637-2.c: New test.
* gcc.target/i386/pr63637-3.c: New test.
* gcc.target/i386/pr63637-4.c: New test.
* gcc.target/i386/pr63637-5.c: New test.
* gcc.target/i386/pr63637-6.c: New test.
David Malcolm [Fri, 23 Jan 2015 16:28:14 +0000 (16:28 +0000)]
PR jit/64721: toplev: don't install signal-handlers when running within libgccjit
gcc/ChangeLog:
PR jit/64721
* main.c (main): Construct toplev instances with init_signals=true.
* toplev.c (general_init): Add param "init_signals", and use it to
conditionalize the calls to signal and host_hooks.extra_signals.
(toplev::toplev): Add param "init_signals".
(toplev::main): When invoking general_init, pass m_init_signals
to control whether signal-handlers are installed.
* toplev.h (toplev::toplev): Add param "init_signals".
(toplev::m_init_signals): New field.
David Malcolm [Fri, 23 Jan 2015 15:57:42 +0000 (15:57 +0000)]
PR jit/64722: fix corruption of %ebx on 32-bit i386 with libgccjit
gcc/ChangeLog:
PR jit/64722
* emit-rtl.c (init_emit_regs): Set pic_offset_table_rtx to
NULL_RTX before testing PIC_OFFSET_TABLE_REGNUM, since the
latter may be affected by the former (e.g. on i686).
Jakub Jelinek [Fri, 23 Jan 2015 08:51:10 +0000 (09:51 +0100)]
diagnostic-core.h (internal_error_no_backtrace): New prototype.
* diagnostic-core.h (internal_error_no_backtrace): New prototype.
* diagnostic.def (DK_ICE_NOBT): New kind.
* diagnostic.c (diagnostic_action_after_output): Handle DK_ICE_NOBT
like DK_ICE, but never print backtrace.
(diagnostic_report_diagnostic): Handle DK_ICE_NOBT like DK_ICE.
(internal_error_no_backtrace): New function.
* gcc.c (execute): Use internal_error_no_backtrace instead of
internal_error.
fortran/
* gfc-diagnostic.def (DK_ICE_NOBT): New kind.
Jerry DeLisle [Fri, 23 Jan 2015 02:01:10 +0000 (02:01 +0000)]
re PR fortran/61933 (Inquire on internal units)
2015-01-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/61933
* io/inquire.c (inquire_via_unit): Set existing to true for
any negative unit that is currently connected and any positive
units within range of KIND=4 value. The unit value for any out
of range case that may occur if the user is using a KIND=8 will
have been set to -2 which is reserved and can never be opened,
and therefore the unit does not exist.
Jerry DeLisle [Fri, 23 Jan 2015 01:59:23 +0000 (01:59 +0000)]
re PR fortran/61933 (Inquire on internal units)
2015-01-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/61933
* libgfortran.h:
* trans-io.c (set_parameter_value): Delete use of has_iostat.
Redefine to not generate any runtime error check calls.
(set_parameter_value_chk): Rename of the former
set_parameter_value with the runtime error checks and fix
whitespace. (set_parameter_value_inquire): New function that
builds a runtime conditional block to set the INQUIRE
common parameter block unit number to -2 when unit numbers
exceed positive KIND=4 limits. (gfc_trans_open): Whitespace.
For unit, use the renamed set_parameter_value_chk.
(gfc_trans_close): Likewise use renamed function.
(build_filepos): Whitespace and use renamed function.
(gfc_trans_inquire): Whitespace and for unit use
set_parameter_value and set_parameter_value_inquire.
(gfc_trans_wait): Remove p->iostat from call to
set_parameter_value. Use new set_parameter_value_chk for unit.
(build_dt): Use the new set_parameter_value without p->iostat
and fix whitespace. Use set_parameter_value_chk for unit.
Jeff Law [Thu, 22 Jan 2015 21:24:28 +0000 (14:24 -0700)]
re PR target/52076 (bloated code for setting single bits in bitfields on m68k)
PR target/52076
* config/m68k/m68k.md (xorsi3_internal): Twiddle constraints to
improve code density for small immediate to memory case.
(insv): Better handle bitfield assignments when the field is
being set to all ones.
* config/m68k/predicates.md (reg_or_pow2_m1_operand): New
operand predicate.
PR target/52076
* gcc.target/m68k/pr52076-1.c: New test.
* gcc.target/m68k/pr52076-2.c: New test.
Tim Shen [Thu, 22 Jan 2015 05:07:03 +0000 (05:07 +0000)]
re PR libstdc++/64680 (basic_regex::operator= does not reset flags)
PR libstdc++/64680
* include/bits/regex.h (basic_regex<>::basic_regex,
basic_regex<>::operator=, basic_regex<>::imbue): Conform to the
standard interface.
* testsuite/28_regex/basic_regex/assign/char/cstring.cc: New testcase.
re PR rtl-optimization/64682 (wrong code at -O2 and -O3 on x86_64-linux-gnu)
PR rtl-optimization/64682
* combine.c (distribute_notes): When moving a death note for
a register that is set in the new I2, make sure to put it
before that new I2.
PR rtl-optimization/64682
* gcc.c-torture/execute/pr64682.c: New file.
Jakub Jelinek [Wed, 21 Jan 2015 21:51:43 +0000 (22:51 +0100)]
re PR rtl-optimization/62078 (ICE: verify_flow_info failed: missing REG_EH_REGION note at the end of bb 2 with -fdelete-dead-exceptions)
PR rtl-optimization/62078
* dse.c: Include cfgcleanup.h.
(rest_of_handle_dse): For -fnon-call-exceptions, if DSE removed
anything call purge_all_dead_edges and cleanup_cfg at the end
of the pass.
Jakub Jelinek [Wed, 21 Jan 2015 21:23:04 +0000 (22:23 +0100)]
re PR c/63307 (Cilk+ breaks -fcompare-debug bootstrap)
PR c/63307
* cilk.c (fill_decls_vec): Only put decls into vector v.
(compare_decls): Fix up formatting.
* c-c++-common/cilk-plus/CK/pr63307.c: New test.
2015-01-21 Igor Zamyatin <igor.zamyatin@intel.com>
PR c/63307
* cilk.c: Include vec.h.
(struct cilk_decls): New structure.
(wrapper_parm_cb): Split this function to...
(fill_decls_vec): ...this...
(create_parm_list): ...and this.
(compare_decls): New function.
(for_local_cb): Remove.
(wrapper_local_cb): Ditto.
(build_wrapper_type): For now first traverse and fill vector of
declarations then sort it and then deal with sorted vector.
(cilk_outline): Ditto.
(declare_one_free_variable): Ditto.
Thomas Koenig [Wed, 21 Jan 2015 19:40:54 +0000 (19:40 +0000)]
re PR fortran/57023 (Not packing arrays with changing variable used for size)
2015-01-21 Thomas Koenig <tkoenig@netcologne.de>
PR fortran/57023
* dependency.c (callback_dummy_intent_not_int): New function.
(dummy_intent_not_in): New function.
(gfc_full_array_ref_p): Use dummy_intent_not_in.
2015-01-21 Thomas Koenig <tkoenig@netcologne.de>
PR fortran/57023
* gfortran.dg/internal_pack_15.f90: New test.
David Sherwood [Wed, 21 Jan 2015 17:53:44 +0000 (17:53 +0000)]
gcc/
2015-01-21 David Sherwood <david.sherwood@arm.com>
Tejas Belagod <Tejas.Belagod@arm.com>
* config/aarch64/aarch64-protos.h (aarch64_simd_attr_length_rglist)
(aarch64_reverse_mask): New decls.
* config/aarch64/iterators.md (UNSPEC_REV_REGLIST): New enum.
(insn_count): New mode_attr.
* config/aarch64/aarch64-simd.md (vec_store_lanesoi, vec_store_lanesci)
(vec_store_lanesxi, vec_load_lanesoi, vec_load_lanesci)
(vec_load_lanesxi): Made ABI compliant for Big Endian targets.
(aarch64_rev_reglist, aarch64_simd_ld2, aarch64_simd_ld3)
(aarch64_simd_ld4, aarch64_simd_st2, aarch64_simd_st3)
(aarch64_simd_st4): New patterns.
* config/aarch64/aarch64.c (aarch64_simd_attr_length_rglist)
(aarch64_reverse_mask): New functions.
gcc/
* config/aarch64/aarch64-protos.h (aarch64_simd_disambiguate_copy):
Declare.
* config/aarch64/aarch64.c (aarch64_classify_address): Allow extra
addressing modes for BE.
(aarch64_print_operand): Add 'R' specifier.
(aarch64_simd_disambiguate_copy): Delete.
(aarch64_simd_emit_reg_reg_move): New function.
* config/aarch64/aarch64-simd.md: Use aarch64_simd_emit_reg_reg_move
in define_splits for structural moves.
(mov<mode>): Use less restrictive predicates.
(*aarch64_mov<mode>): Simplify and only allow for LE.
(*aarch64_be_movoi, *aarch64_be_movci, *aarch64_be_movxi): New.