Age | Commit message (Collapse) | Author | Files | Lines |
|
character literal)
2019-09-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/91717
* dependency.c (gfc_dep_resolver): Flag identical components
and exit with return value 1 if set and no array refs.
2019-09-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/91717
* gfortran.dg/dependency_55.f90 : New test.
From-SVN: r275696
|
|
From-SVN: r275695
|
|
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194698
From-SVN: r275691
|
|
High with Round and Scale) instruction)
PR tree-optimization/89386
* config/i386/sse.md (smulhrs<mode>3): New expander.
(smulhrsv4hi3): Ditto.
testsuite/ChangeLog:
PR tree-optimization/89386
* gcc.target/i386/pr89386.c: New test.
* gcc.target/i386/pr89386-1.c: Ditto.
From-SVN: r275689
|
|
overflows)
2019-09-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/91750
* tree-vect-loop.c (vectorizable_induction): Compute IV increments
in the type of the evolution.
* gcc.dg/vect/pr91750.c: New testcase.
From-SVN: r275685
|
|
2019-09-12 Yuliang Wang <yuliang.wang@arm.com>
gcc/
PR tree-optimization/89386
* config/aarch64/aarch64-sve2.md (<su>mull<bt><Vwide>)
(<r>shrnb<mode>, <r>shrnt<mode>): New SVE2 patterns.
(<su>mulh<r>s<mode>3): New pattern for MULHRS.
* config/aarch64/iterators.md (UNSPEC_SMULLB, UNSPEC_SMULLT)
(UNSPEC_UMULLB, UNSPEC_UMULLT, UNSPEC_SHRNB, UNSPEC_SHRNT)
(UNSPEC_RSHRNB, UNSPEC_RSHRNT, UNSPEC_SMULHS, UNSPEC_SMULHRS)
UNSPEC_UMULHS, UNSPEC_UMULHRS): New unspecs.
(MULLBT, SHRNB, SHRNT, MULHRS): New int iterators.
(su, r): Handle the unspecs above.
(bt): New int attribute.
* internal-fn.def (IFN_MULHS, IFN_MULHRS): New internal functions.
* internal-fn.c (first_commutative_argument): Commutativity info for
above.
* optabs.def (smulhs_optab, smulhrs_optab, umulhs_optab)
(umulhrs_optab): New optabs.
* doc/md.texi (smulhs$var{m3}, umulhs$var{m3})
(smulhrs$var{m3}, umulhrs$var{m3}): Documentation for the above.
* tree-vect-patterns.c (vect_recog_mulhs_pattern): New pattern
function.
(vect_vect_recog_func_ptrs): Add it.
* testsuite/gcc.target/aarch64/sve2/mulhrs_1.c: New test.
* testsuite/gcc.dg/vect/vect-mulhrs-1.c: As above.
* testsuite/gcc.dg/vect/vect-mulhrs-2.c: As above.
* testsuite/gcc.dg/vect/vect-mulhrs-3.c: As above.
* testsuite/gcc.dg/vect/vect-mulhrs-4.c: As above.
* doc/sourcebuild.texi (vect_mulhrs_hi): Document new target selector.
* testsuite/lib/target-supports.exp
(check_effective_target_vect_mulhrs_hi): Return true for AArch64
with SVE2.
From-SVN: r275682
|
|
From-SVN: r275680
|
|
2019-09-11 Sandra Loosemore <sandra@codesourcery.com>
PR testsuite/83889
gcc/testsuite/
* gcc.dg/vect/pr81740-2.c: Remove explicit dg-do run.
* gcc.dg/vect/pr88598-1.c: Likewise.
* gcc.dg/vect/pr88598-2.c: Likewise.
* gcc.dg/vect/pr88598-3.c: Likewise.
* gcc.dg/vect/pr88598-4.c: Likewise.
* gcc.dg/vect/pr88598-5.c: Likewise.
* gcc.dg/vect/pr88598-6.c: Likewise.
* gcc.dg/vect/pr89440.c: Likewise.
* gcc.dg/vect/pr90018.c: Likewise.
* gcc.dg/vect/pr91293-1.c: Likewise.
* gcc.dg/vect/pr91293-2.c: Likewise.
* gcc.dg/vect/pr91293-3.c: Likewise.
From-SVN: r275667
|
|
2019-09-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91553
* simplify.c (gfc_convert_constant): During conversion check if the
constant is enclosed in parenthesis, and simplify expression.
2019-09-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91553
* gfortran.dg/pr91553.f90: New test.
From-SVN: r275657
|
|
fortran/trans-io.c:2507))
2019-09-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91642
* io.c (gfc_match_inquire): null() cannot be in an iolength inquire
list.
2019-09-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91642
* gfortran.dg/pr91642.f90: New test.
From-SVN: r275655
|
|
2019-09-11 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/predicates.md (non_add_cint_operand): Simplify the
code.
From-SVN: r275652
|
|
Change Named_object::get_backend to ignore aliases when creating type
descriptors for types, to be consistent with
Type::needs_specific_type_functions and the Specific_type_functions
traversal class. For example, when compiling a package that creates an
alias to an an externally defined type, e.g.
import "foo"
type MyFoo = foo.Foo
it makes sense to skip the alias (not try to generate type specific
functions for it) and let the normal mechanisms take care of the alias
target, depending on whether the target is defined locally or defined
elsewhere.
Testcase for this problen can be found in CL 193261.
Fixes golang/go#33866.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/191961
From-SVN: r275651
|
|
Should fix the build on riscv64 and other systems.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194641
From-SVN: r275650
|
|
When compiling the x_test package, force the test package to be
imported first. That ensures that we will see the types defined in
the test package before the types defined in the non-test version of
the package. This matters if the types differ in some way, such as by
adding a new method.
This avoids a failure in internal/poll on Solaris, in which the test
package adds a method to a type (FD.EOFError). I think it was Solaris-
specific because files are sorted in a different order by default.
The go tool handles this kind of thing correctly, by rebuilding
dependent packages. This is just a hack sufficient to run the libgo
testsuite without using the go tool.
Fixes https://gcc.gnu.org/PR91712
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194637
From-SVN: r275648
|
|
-fno-forward-propagate with __builtin_sub_overflow())
PR rtl-optimization/89435
PR rtl-optimization/89795
PR rtl-optimization/91720
* gcc.dg/pr89435.c: New test.
* gcc.dg/pr89795.c: New test.
* gcc.dg/pr91720.c: New test.
From-SVN: r275642
|
|
https://gcc.gnu.org/ml/gcc-patches/2019-09/msg00697.html
gcc/
* tree.h (MARK_TS_TYPE_NON_COMMON): New.
* tree.c (tree_node_structure_for_code): Reformat and alphabetize.
gcc/cp/
* c-objcp-common.c (cp-objcp-common.c): Alphababetize and
correctly mark all C++ nodes.
From-SVN: r275641
|
|
2019-09-11 Richard Biener <rguenther@suse.de>
* lto-opts.c (lto_write_options): Stream -g when debug is enabled.
* lto-wrapper.c (merge_and_complain): Pick up -g.
(append_compiler_options): Likewise.
(run_gcc): Re-instantiate handling -g0 at link-time.
* doc/invoke.texi (flto): Document debug info generation.
From-SVN: r275640
|
|
2019-09-11 Richard Biener <rguenther@suse.de>
PR tree-optimization/90387
* vr-values.c (vr_values::extract_range_basic): After inlining
simplify non-constant __builtin_constant_p to false.
* gcc.dg/Warray-bounds-44.c: New testcase.
From-SVN: r275639
|
|
-fno-forward-propagate -fno-sched-pressure)
PR rtl-optimization/89795
* rtlanal.c (nonzero_bits1) <SUBREG>: Do not propagate results from
inner REGs to paradoxical SUBREGs if WORD_REGISTER_OPERATIONS is set.
From-SVN: r275635
|
|
PR tree-optimization/91723
* tree-vect-stmts.c (vectorizable_call): Use types_compatible_p check
instead of pointer equality when checking if argument vectypes are
the same.
* gcc.dg/vect/vect-fma-3.c: New test.
From-SVN: r275634
|
|
PR middle-end/91725
* match.pd ((A / (1 << B)) -> (A >> B)): Call tree_nonzero_bits instead
of get_nonzero_bits, only call it for integral types.
* gcc.c-torture/compile/pr91725.c: New test.
From-SVN: r275633
|
|
on the widest type in...
2019-09-11 Richard Biener <rguenther@suse.de>
Revert
2019-09-09 Barnaby Wilks <barnaby.wilks@arm.com>
* match.pd: Add flag_unsafe_math_optimizations check
before deciding on the widest type in a binary math operation.
* gcc.dg/fold-binary-math-casts.c: New test.
From-SVN: r275632
|
|
From-SVN: r275622
|
|
* parser.c (CP_PARSER_FLAGS_DELAY_NOEXCEPT): New parser flag.
(cp_parser_lambda_declarator_opt): Pass CP_PARSER_FLAGS_NONE to
cp_parser_exception_specification_opt.
(cp_parser_direct_declarator): Adjust a call to
cp_parser_exception_specification_opt.
(cp_parser_member_declaration): Pass CP_PARSER_FLAGS_DELAY_NOEXCEPT
to cp_parser_declarator if not processing a friend or typedef
declaration.
(cp_parser_late_noexcept_specifier): Adjust a call to
cp_parser_noexcept_specification_opt.
(cp_parser_noexcept_specification_opt): New parameter for parser flags,
drop the FRIEND_P parameter. Use the new parameter.
(cp_parser_exception_specification_opt): Likewise.
(cp_parser_transaction): Adjust a call to
cp_parser_noexcept_specification_opt.
(cp_parser_transaction_expression): Likewise.
* g++.dg/cpp1z/using7.C: New test.
* g++.dg/cpp1z/using8.C: New test.
From-SVN: r275617
|
|
* constexpr.c (cxx_eval_increment_expression): Call fold_simple on
the offset.
* g++.dg/cpp1y/constexpr-incr2.C: New test.
From-SVN: r275613
|
|
Restore Solaris compatibility fixes lost when internal/x/net/lif moved
to golang.org/x/net/lif. Also fix the Makefile for x/net/lif and
x/net/route.
Change x/sys/cpu to get the cache line size from goarch.sh as the
gofrontend version of internal/cpu does.
Partially based on work by Rainer Orth.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194438
From-SVN: r275611
|
|
PR go/91621
mksysinfo: change test == to test =
Fixes https://gcc.gnu.org/PR91621
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194569
From-SVN: r275608
|
|
Backport of https://golang.org/cl/194440. Original description:
If an embedded field refers to a type via a pointer, the parser needs
to know the name of the embedded field. It is possible that the
pointer type is not yet resolved. This CL fixes the parser to handle
that case by setting the pointer element type to the unresolved named
type while the pointer is being resolved.
Updates golang/go#34182
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/194562
From-SVN: r275606
|
|
After previous patches, it's now possible for call_used_regs to be
the "real" set of call-clobbered registers, without any special
handling for fixed registers. This patch therefore removes the
separate call_really_used_regs and updates the targets that define
CALL_REALLY_USED_REGISTERS so that they handle call_used_regs in
the same way that they used to handle call_really_used_regs.
With this change, it's no longer necessary for targets that define
CALL_REALLY_USED_REGISTERS to define CALL_USED_REGISTER as well.
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* doc/tm.texi.in: Document that exactly one of CALL_USED_REGISTERS
and CALL_REALLY_USED_REGISTERS must be defined, and that
CALL_REALLY_USED_REGISTERS is preferred.
* doc/tm.texi: Regenerate.
* hard-reg-set.h (target_hard_regs::x_call_really_used_regs): Delete.
(call_really_used_regs): Likewise.
* reginfo.c: Raise an #error if both CALL_USED_REGISTERS and
CALL_REALLY_USED_REGISTERS are defined.
(initial_call_used_regs): Use CALL_REALLY_USED_REGISTERS as the
initial value if defined.
(initial_call_really_used_regs): Delete.
(saved_call_really_used_regs): Likewise.
(CALL_REALLY_USED_REGNO_P): Likewise.
(init_reg_sets): Remove handling of call_really_used_regs.
(save_register_info, restore_register_info, globalize_reg): Likewise.
(init_reg_sets_1): Likewise. Use call_used_regs instead of
CALL_REALLY_USED_REGNO_P. Don't set call_used_regs for registers
outside operand_reg_set.
(fix_register): Don't change call_used_regs if
CALL_REALLY_USED_REGISTERS is defined.
* config/csky/csky.h (CALL_USED_REGISTERS): Delete.
* config/csky/csky.c (get_csky_live_regs): Use call_used_regs
instead of call_really_used_regs.
(csky_conditional_register_usage): Remove the old handling of
call_used_regs and change the handling of call_really_used_regs
to use call_used_regs instead.
* config/ia64/ia64.h (CALL_USED_REGISTERS): Delete.
* config/ia64/ia64.c (fix_range): Don't set call_used_regs when
making a register fixed.
* config/m32r/m32r.h (CALL_USED_REGISTERS): Delete.
* config/m32r/m32r.c (MUST_SAVE_REGISTER): Use call_used_regs
instead of call_really_used_regs.
(m32r_conditional_register_usage): Don't set call_used_regs when
making a register fixed.
* config/mips/mips.h (CALL_USED_REGISTERS): Delete.
* config/mips/mips.c (mips_global_pointer): Use call_used_regs
instead of call_really_used_regs.
(mips_interrupt_extra_call_saved_reg_p): Likewise.
(mips_cfun_call_saved_reg_p): Likewise.
(mips_swap_registers): Remove the old handling of call_used_regs
and change the handling of call_really_used_regs to use call_used_regs
instead.
(mips_conditional_register_usage): Likewise.
* config/mn10300/mn10300.h (CALL_USED_REGISTERS): Delete.
* config/mn10300/mn10300.c (fp_regs_to_save): Use call_used_regs
instead of call_really_used_regs.
(mn10300_get_live_callee_saved_regs): Likewise.
(mn10300_expand_prologue, mn10300_expand_epilogue): Likewise.
(mn10300_conditional_register_usage): Don't set call_used_regs when
making a register fixed.
* config/rs6000/rs6000.h (CALL_USED_REGISTERS): Delete.
* config/rs6000/rs6000.c (rs6000_conditional_register_usage):
Remove the old handling of call_used_regs and change the handling
of call_really_used_regs to use call_used_regs instead.
* config/s390/s390.h (CALL_USED_REGISTERS): Delete.
* config/s390/s390.c (s390_regs_ever_clobbered): Use call_used_regs
instead of call_really_used_regs.
(s390_register_info_gprtofpr, s390_register_info): Likewise.
(s390_hard_regno_rename_ok, s390_hard_regno_scratch_ok): Likewise.
(s390_emit_prologue, s300_set_up_by_prologue): Likewise.
(s390_can_use_return_insn, s390_optimize_prologue): Likewise.
(s390_conditional_register_usage): Remove the old handling of
call_used_regs and change the handling of call_really_used_regs
to use call_used_regs instead.
* config/sh/sh.h (CALL_USED_REGISTERS): Delete.
* config/sh/sh.c (output_stack_adjust, calc_live_regs): Likewise.
(sh_fix_range, reg_unused_after): Likewise.
(sh_conditional_register_usage): Remove the old handling of
call_used_regs and change the handling of call_really_used_regs
to use call_used_regs instead.
* config/sparc/sparc.h (CALL_USED_REGISTERS): Delete.
* config/sparc/sparc.c (sparc_conditional_register_usage): Don't set
call_used_regs when making a register fixed.
* config/tilegx/tilegx.h (CALL_USED_REGISTERS): Delete.
* config/tilegx/tilegx.c (tilegx_conditional_register_usage): Don't set
call_used_regs when making a register fixed.
* config/tilepro/tilepro.h (CALL_USED_REGISTERS): Delete.
* config/tilepro/tilepro.c (tilepro_conditional_register_usage): Don't
set call_used_regs when making a register fixed.
* config/visium/visium.h (CALL_USED_REGISTERS): Delete.
* config/visium/visium.c (visium_conditional_register_usage): Remove
the old handling of call_used_regs and change the handling of
call_really_used_regs to use call_used_regs instead.
From-SVN: r275605
|
|
Now that tests of call_used_regs go through call_used_or_fixed_reg_p,
we can hide call_used_regs from target-independent code. (It still
needs to be available to targets for the conditional register usage
hooks.)
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* hard-reg-set.h (call_used_regs): Only define if IN_TARGET_CODE.
(call_used_or_fixed_reg_p): Expand definition of call_used_regs.
* reginfo.c (call_used_regs): New macro.
From-SVN: r275604
|
|
This patch removes redundant fixed_regs tests in things like:
!fixed_regs[i] && !call_used_or_fixed_reg_p (i)
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/alpha/alpha.c (alpha_compute_frame_layout): Remove redundant
fixed_regs test.
* config/bpf/bpf.c (bpf_compute_frame_layout, bpf_expand_prologue)
(bpf_expand_epilogue): Likewise.
* config/c6x/c6x.c (c6x_save_reg): Likewise.
* config/ft32/ft32.c (ft32_expand_prologue): Likewise.
(ft32_expand_epilogue): Likewise.
* config/i386/i386.c (ix86_save_reg): Likewise.
* config/moxie/moxie.c (moxie_expand_prologue): Likewise.
(moxie_expand_epilogue): Likewise.
* config/tilegx/tilegx.c (need_to_save_reg): Likewise.
* config/tilepro/tilepro.c (need_to_save_reg): Likewise.
* config/xtensa/xtensa.c (xtensa_call_save_reg): Likewise.
From-SVN: r275603
|
|
Similarly to the call_used_or_fixed_regs patch, this one replaces
tests of call_used_regs[i] with call_used_or_fixed_reg_p (i).
The only remaining direct uses of call_used_regs are in reginfo.c
and in the conditional register usage hooks.
Again, this is purely mechanical. A later patch will clear up the
oddities in config/ code.
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* hard-reg-set.h (call_used_or_fixed_reg_p): New macro.
* cfgloopanal.c (init_set_costs): Use call_used_or_fixed_reg_p
instead of testing call_used_regs directly.
* config/aarch64/aarch64.c (aarch64_layout_frame): Likewise.
(aarch64_components_for_bb): Likewise.
* config/alpha/alpha.c (alpha_compute_frame_layout): Likewise.
* config/arc/arc.c (arc_must_save_register): Likewise.
(arc_epilogue_uses): Likewise.
* config/arm/arm.c (arm_option_override, use_return_insn): Likewise.
(legitimize_pic_address, callee_saved_reg_p): Likewise.
(arm_compute_save_reg0_reg12_mask): Likewise.
(arm_compute_save_core_reg_mask): Likewise.
(arm_get_vfp_saved_size, arm_compute_frame_layout): Likewise.
(arm_save_coproc_regs, thumb1_extra_regs_pushed): Likewise.
(cmse_nonsecure_entry_clear_before_return): Likewise.
(thumb1_expand_epilogue, arm_expand_epilogue_apcs_frame): Likewise.
(arm_expand_epilogue): Likewise.
* config/avr/avr.c (avr_regs_to_save, sequent_regs_live): Likewise.
(avr_function_arg_advance, avr_find_unused_d_reg): Likewise.
(_reg_unused_after): Likewise.
* config/bfin/bfin.c (must_save_p, expand_prologue_reg_save): Likewise.
(expand_epilogue_reg_restore, n_regs_saved_by_prologue): Likewise.
(add_to_reg, hwloop_optimize): Likewise.
* config/bpf/bpf.c (bpf_compute_frame_layout, bpf_expand_prologue)
(bpf_expand_epilogue): Likewise.
* config/c6x/c6x.c (c6x_save_reg, c6x_regno_reg_class): Likewise.
* config/cr16/cr16.c (cr16_compute_save_regs): Likewise.
* config/cris/cris.c (cris_reg_saved_in_regsave_area): Likewise.
* config/epiphany/epiphany.c (epiphany_init_reg_tables): Likewise.
(epiphany_compute_function_type, MUST_SAVE_REGISTER): Likewise.
(epiphany_output_mi_thunk, epiphany_start_function): Likewise.
* config/fr30/fr30.c (fr30_num_arg_regs): Likewise.
* config/frv/frv.c (frv_stack_info): Likewise.
* config/ft32/ft32.c (ft32_compute_frame): Likewise.
(ft32_expand_prologue, ft32_expand_epilogue): Likewise.
* config/gcn/gcn.c (gcn_compute_frame_offsets): Likewise.
(move_callee_saved_registers): Likewise.
* config/h8300/h8300.c (byte_reg): Likewise.
* config/i386/i386-options.c (ix86_set_current_function): Likewise.
* config/i386/i386.c (ix86_save_reg, ix86_expand_prologue): Likewise.
(ix86_expand_epilogue, x86_order_regs_for_local_alloc): Likewise.
* config/i386/predicates.md (sibcall_memory_operand): Likewise.
* config/ia64/ia64.c (emit_safe_across_calls, find_gr_spill): Likewise.
(next_scratch_gr_reg, ia64_compute_frame_size): Likewise.
* config/iq2000/iq2000.h (MUST_SAVE_REGISTER): Likewise.
* config/lm32/lm32.c (lm32_compute_frame_size): Likewise.
* config/m32c/m32c.c (need_to_save): Likewise.
* config/m68k/m68k.c (m68k_save_reg): Likewise.
* config/mcore/mcore.c (calc_live_regs): Likewise.
* config/microblaze/microblaze.c (microblaze_must_save_register):
Likewise.
* config/mmix/mmix.c (mmix_local_regno): Likewise.
(mmix_initial_elimination_offset, mmix_reorg): Likewise.
(mmix_use_simple_return, mmix_expand_prologue): Likewise.
(mmix_expand_epilogue): Likewise.
* config/moxie/moxie.c (moxie_compute_frame): Likewise.
(moxie_expand_prologue, moxie_expand_epilogue): Likewise.
* config/msp430/msp430.c (msp430_preserve_reg_p): Likewise.
* config/nds32/nds32.h (nds32_16bit_address_type): Likewise.
(NDS32_REQUIRED_CALLEE_SAVED_P): Likewise.
* config/nios2/nios2.c (prologue_saved_reg_p): Likewise.
* config/or1k/or1k.c (callee_saved_regno_p): Likewise.
* config/pa/pa.c (pa_expand_prologue, pa_expand_epilogue): Likewise.
* config/pdp11/pdp11.c (pdp11_saved_regno): Likewise.
* config/pru/pru.c (prologue_saved_reg_p): Likewise.
* config/riscv/riscv.c (riscv_save_reg_p): Likewise.
(riscv_epilogue_uses, riscv_hard_regno_mode_ok): Likewise.
* config/rl78/rl78.c (need_to_save): Likewise.
* config/rs6000/rs6000-logue.c (save_reg_p): Likewise.
(rs6000_stack_info, generate_set_vrsave): Likewise.
(rs6000_emit_prologue, rs6000_emit_epilogue): Likewise.
* config/rs6000/rs6000.c (rs6000_debug_reg_print): Likewise.
* config/rx/rx.c (rx_get_stack_layout): Likewise.
* config/s390/s390.c (s390_call_saved_register_used): Likewise.
* config/sh/sh.c (calc_live_regs, sh_output_mi_thunk): Likewise.
* config/sparc/sparc.c (save_global_or_fp_reg_p): Likewise.
(save_local_or_in_reg_p): Likewise.
* config/stormy16/stormy16.c (REG_NEEDS_SAVE): Likewise.
(xstormy16_epilogue_uses): Likewise.
* config/tilegx/tilegx.c (need_to_save_reg): Likewise.
* config/tilepro/tilepro.c (need_to_save_reg): Likewise.
* config/v850/v850.c (compute_register_save_size): Likewise.
* config/vax/vax.c (vax_expand_prologue): Likewise.
* config/visium/visium.c (visium_save_reg_p): Likewise.
* config/xtensa/xtensa.c (xtensa_call_save_reg): Likewise.
* cselib.c (cselib_process_insn): Likewise.
* df-scan.c (df_get_entry_block_def_set): Likewise.
* function.c (aggregate_value_p): Likewise.
* haifa-sched.c (alloc_global_sched_pressure_data): Likewise.
* ira-lives.c (process_bb_node_lives): Likewise.
* ira.c (do_reload): Likewise.
* lra-lives.c (process_bb_lives): Likewise.
* lra-remat.c (lra_remat): Likewise.
* lra.c (lra): Likewise.
* postreload.c (reload_combine_recognize_pattern): Likewise.
(reload_cse_move2add): Likewise.
* recog.c (peep2_find_free_register): Likewise.
* regrename.c (check_new_reg_p): Likewise.
* reload.c (find_equiv_reg): Likewise.
* reload1.c (reload, find_reg): Likewise.
* sel-sched.c (init_hard_regs_data): Likewise.
From-SVN: r275602
|
|
This cleans up a couple of places in which the previous patch had:
call_used_or_fixed_regs & ~fixed_reg_set
In that context, regs_invalidated_by_call is IMO more obvious.
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/frv/frv.c (frv_ifcvt_modify_tests): Use
regs_invalidated_by_call & ~fixed_reg_set instead of
call_used_or_fixed_regs & ~fixed_reg_set.
* config/sh/sh.c (output_stack_adjust): Likewise.
From-SVN: r275601
|
|
CALL_USED_REGISTERS and call_used_regs infamously contain all fixed
registers (hence the need for CALL_REALLY_USED_REGISTERS etc.).
We try to recover from this to some extent with:
/* Contains 1 for registers that are set or clobbered by calls. */
/* ??? Ideally, this would be just call_used_regs plus global_regs, but
for someone's bright idea to have call_used_regs strictly include
fixed_regs. Which leaves us guessing as to the set of fixed_regs
that are actually preserved. We know for sure that those associated
with the local stack frame are safe, but scant others. */
HARD_REG_SET x_regs_invalidated_by_call;
Since global registers are added to fixed_reg_set and call_used_reg_set
too, it's always the case that:
call_used_reg_set == regs_invalidated_by_call | fixed_reg_set
This patch replaces all uses of call_used_reg_set with a new macro
call_used_or_fixed_regs to make this clearer.
This is part of a series that allows call_used_regs to be what is
now call_really_used_regs. It's a purely mechanical replacement;
later patches clean up obvious oddities like
"call_used_or_fixed_regs & ~fixed_regs".
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* hard-reg-set.h (target_hard_regs::x_call_used_reg_set): Delete.
(call_used_reg_set): Delete.
(call_used_or_fixed_regs): New macro.
* reginfo.c (init_reg_sets_1, globalize_reg): Remove initialization
of call_used_reg_set.
* caller-save.c (setup_save_areas): Use call_used_or_fixed_regs
instead of call_used_regs.
(save_call_clobbered_regs): Likewise.
* cfgcleanup.c (old_insns_match_p): Likewise.
* config/c6x/c6x.c (c6x_call_saved_register_used): Likewise.
* config/epiphany/epiphany.c (epiphany_conditional_register_usage):
Likewise.
* config/frv/frv.c (frv_ifcvt_modify_tests): Likewise.
* config/sh/sh.c (output_stack_adjust): Likewise.
* final.c (collect_fn_hard_reg_usage): Likewise.
* ira-build.c (ira_build): Likewise.
* ira-color.c (calculate_saved_nregs): Likewise.
(allocno_reload_assign, calculate_spill_cost): Likewise.
* ira-conflicts.c (ira_build_conflicts): Likewise.
* ira-costs.c (ira_tune_allocno_costs): Likewise.
* ira-lives.c (process_bb_node_lives): Likewise.
* ira.c (setup_reg_renumber): Likewise.
* lra-assigns.c (find_hard_regno_for_1, lra_assign): Likewise.
* lra-constraints.c (need_for_call_save_p): Likewise.
(need_for_split_p, inherit_in_ebb): Likewise.
* lra-lives.c (process_bb_lives): Likewise.
* lra-remat.c (call_used_input_regno_present_p): Likewise.
* postreload.c (reload_combine): Likewise.
* regrename.c (find_rename_reg): Likewise.
* reload1.c (reload_as_needed): Likewise.
* rtlanal.c (find_all_hard_reg_sets): Likewise.
* sel-sched.c (mark_unavailable_hard_regs): Likewise.
* shrink-wrap.c (requires_stack_frame_p): Likewise.
From-SVN: r275600
|
|
Reusing the reasoning from the call_fixed_reg_set patch:
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
for (j = 1; j <= MOVE_MAX_WORDS; j++)
if (reg_save_code (i,regno_save_mode[i][j]) == -1)
should be true whenever regno_save_mode[i][j] == VOIDmode,
which it is for:
~call_used_reg_set | ~have_save_mode
So this condition amounts to:
~call_used_reg_set | ~have_save_mode | ~have_save_insn
== ~call_used_reg_set | ~savable_regs
no_caller_save_reg_set is then set if call_used_regs[i], so
no_caller_save_reg_set is:
call_used_reg_set & (~call_used_reg_set | ~savable_regs)
== call_used_reg_set & ~savable_regs
This patch expands its single user accordingly.
Note that ~savable_regs is always empty on LRA targets.
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* hard-reg-set.h (target_hard_regs::x_no_caller_save_reg_set): Delete.
(no_caller_save_reg_set): Delete.
* caller-save.c (init_caller_save): Don't initialize it.
* ira-conflicts.c (ira_build_conflicts): Calculate
no_caller_save_reg_set locally from call_used_reg_set and savable_regs.
From-SVN: r275599
|
|
On targets that use reload, call_fixed_reg_set is structurally:
fixed_reg_set -- reginfo.c
| (call_used_reg_set & ~have_save_mode) -- first loop in init_caller_save
| ~have_save_insn -- final loop in init_caller_save
(where "have_save_mode" and "have_save_insn" are just my names).
But the final loop in init_caller_save does:
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
for (j = 1; j <= MOVE_MAX_WORDS; j++)
if (reg_save_code (i,regno_save_mode[i][j]) == -1)
This last condition ought to be true whenever:
regno_save_mode[i][j] == VOIDmode
since either targetm.hard_regno_mode_ok (i, VOIDmode) should be
false or the VOIDmode save & restore shouldn't match any move insn.
And after the first loop, regno_save_mode[i][j] == VOIDmode whenever
!call_used_regs[i]. So the above is actually:
fixed_reg_set
| (call_used_reg_set & ~have_save_mode)
| (~call_used_reg_set | ~have_save_insn)
which simplifies to:
fixed_reg_set -- reginfo.c
| ~have_save_mode -- first loop in init_caller_save
| ~have_save_insn -- final loop in init_caller_save
| ~call_used_reg_set -- final loop in init_caller_save
So:
~call_fixed_reg_set == (~fixed_reg_set
& have_save_mode
& have_save_insn
& call_used_reg_set) [A]
All users have the form:
(call_used_reg_set or some subset) & ~(call_fixed_reg_set | ...)
i.e.:
(call_used_reg_set or some subset) & ~call_fixed_reg_set & ~(...)
We can therefore drop the "& call_used_reg_set" from [A], leaving:
~fixed_reg_set & have_save_mode & have_save_insn
This patch combines have_save_mode & have_save_insn into a single
condition "a save is possible", represented as savable_regs.
We can then substitute:
~call_fixed_reg_set --> ~fixed_reg_set & savable_regs
(registers we can actually save around calls)
The patch also sets regno_save_mode[i][j] for all registers,
in case non-default ABIs require a save when the default ABI
doesn't. This ensures that savable_regs (like fixed_reg_set but
unlike call_fixed_reg_set) isn't affected by the ABI. This only
becomes significant with later patches and at this point is just
a simplification.
Since init_caller_save is only called for reload targets,
the default assumption for LRA is that all registers are savable,
just like the default assumption before the patch was that
(~)call_fixed_reg_set == (~)fixed_reg_set.
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* hard-reg-set.h (target_hard_regs::x_call_fixed_reg_set): Delete.
(target_hard_regs::x_savable_regs): New field.
(call_fixed_reg_set): Delete.
(savable_regs): New macro,
* reginfo.c (globalize_reg): Don't set call_fixed_reg_set.
(init_reg_sets_1): Likewise. Initialize savable_regs.
* caller-save.c (init_caller_save): Invoke HARD_REGNO_CALLER_SAVE_MODE
for all registers. Set savable_regs instead of call_fixed_reg_set.
(setup_save_areas, save_call_clobbered_regs): Replace uses of
~call_fixed_reg_set with ~fixed_reg_set & savable_regs.
* config/sh/sh.c (output_stack_adjust): Likewise.
From-SVN: r275598
|
|
I have a series of patches that hides call_used_regs from target-
independent code, a knock-on effect of which is that (public) target
macros can't use call_used_regs either. This patch fixes the only
case in which that was a problem.
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/c6x/c6x-protos.h (c6x_set_return_address): Declare.
* config/c6x/c6x.h (REGNO_REG_CLASS): Move implementation to
* config/c6x/c6x.c (c6x_regno_reg_class): ...this new function.
From-SVN: r275597
|
|
Only one caller (in dwarf2out.c) was preventing get_call_rtx_from
from taking an rtx_insn *. Since that caller just passes a PATTERN,
it's a trivial change to make.
2019-09-10 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* rtl.h (get_call_rtx_from): Take a const rtx_insn * instead of an rtx.
* rtlanal.c (get_call_rtx_from): Likewise.
* dwarf2out.c (dwarf2out_var_location): Pass the insn rather
than the pattern to get_call_rtx_from.
* config/i386/i386-expand.h (ix86_notrack_prefixed_insn_p): Take
an rtx_insn * instead of an rtx.
* config/i386/i386-expand.c (ix86_notrack_prefixed_insn_p): Likewise.
From-SVN: r275593
|
|
2019-09-10 Martin Liska <mliska@suse.cz>
* common.opt: Use newly added WarnRemoved.
* config/aarch64/aarch64.opt: Likewise.
* config/arm/arm.opt: Likewise.
* config/i386/i386.opt: Likewise.
* config/ia64/ia64.opt: Likewise.
* config/rs6000/rs6000.opt: Likewise.
* doc/options.texi: Document WarnRemoved properly.
* dwarf2out.c (gen_producer_string): Handle renamed
OPT_SPECIAL_warn_removed.
* lto-opts.c (lto_write_options): Likewise.
* lto-wrapper.c (merge_and_complain): Likewise.
* opts-common.c (decode_cmdline_option): Likewise.
(prune_options): Likewise.
(read_cmdline_option): Likewise.
(control_warning_option): Likewise.
* opts.c (print_filtered_help): Likewise.
* optc-gen.awk: Parse for WarnRemoved and make usage
of Deprecated an error.
* opth-gen.awk: Generate new OPT_SPECIAL_warn_removed.
2019-09-10 Martin Liska <mliska@suse.cz>
* c.opt: Use newly added WarnRemoved.
From-SVN: r275592
|
|
* gfortran.dg/default_format_1.f90: Remove XFAIL AIX.
* gfortran.dg/default_format_denormal_1.f90: Same.
From-SVN: r275591
|
|
From-SVN: r275589
|
|
2 division)
PR middle-end/91680
* match.pd ((A / (1 << B)) -> (A >> B)): Allow widening cast from
the shift type to type.
* gcc.dg/tree-ssa/pr91680.c: New test.
* g++.dg/torture/pr91680.C: New test.
From-SVN: r275587
|
|
/cp
2019-09-10 Paolo Carlini <paolo.carlini@oracle.com>
* decl.c (has_designator_problem): Use cp_expr_loc_or_input_loc
in error_at.
(build_enumerator): Likewise.
(cp_finish_decl): Use DECL_SOURCE_LOCATION.
(grokdeclarator): Use id_loc in two error_at; change errror
message about constinit together constexpr to use two ranges.
/testsuite
2019-09-10 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/cpp0x/enum29.C: Test location(s) too.
* g++.dg/cpp0x/lambda/lambda-ice10.C: Likewise.
* g++.dg/cpp2a/constinit3.C: Likewise.
* g++.dg/ext/desig4.C: Likewise.
* g++.dg/ext/label10.C: Likewise.
* g++.old-deja/g++.other/dtor3.C: Likewise.
From-SVN: r275585
|
|
support
Since FDPIC does not support -static, skip the related tests.
2019-09-10 Christophe Lyon <christophe.lyon@st.com>
gcc/testsuite/
* lib/target-supports.exp (check_effective_target_static): Disable
for ARM FDPIC target.
From-SVN: r275583
|
|
The recent stack_protect_combined_set_insn and
stack_protect_combined_test_insn force recomputing of GOT base, but
need to take into account that in FDPIC mode, the PIC register is
fixed by the ABI (r9).
2019-09-10 Christophe Lyon <christophe.lyon@st.com>
gcc/
* config/arm/arm.md (stack_protect_combined_set_insn): Handle
FDPIC mode.
(stack_protect_combined_test_insn): Likewise.
From-SVN: r275582
|
|
with uclibc.
uclibc defines bswap_32, so use a different name in this test.
2019-09-10 Christophe Lyon <christophe.lyon@st.com>
gcc/testsuite/
* gcc.target/arm/pr43698.c (bswap_32): Rename as my_bswap_32.
From-SVN: r275581
|
|
Some tests have the "nonpic" guard, but pass on
arm*-*-uclinuxfdpiceabi because it is in PIE mode by default. Rather
than adding this target to all these tests, add the "pie_enabled"
effective target.
2019-09-10 Christophe Lyon <christophe.lyon@st.com>
gcc/testsuite/
* g++.dg/cpp0x/noexcept03.C: Add pie_enabled.
* g++.dg/ipa/devirt-c-7.C: Likewise.
* g++.dg/ipa/ivinline-1.C: Likewise.
* g++.dg/ipa/ivinline-2.C: Likewise.
* g++.dg/ipa/ivinline-3.C: Likewise.
* g++.dg/ipa/ivinline-4.C: Likewise.
* g++.dg/ipa/ivinline-5.C: Likewise.
* g++.dg/ipa/ivinline-7.C: Likewise.
* g++.dg/ipa/ivinline-8.C: Likewise.
* g++.dg/ipa/ivinline-9.C: Likewise.
* g++.dg/tls/pr79288.C: Likewise.
* gcc.dg/addr_equal-1.c: Likewise.
* gcc.dg/const-1.c: Likewise.
* gcc.dg/ipa/pure-const-1.c: Likewise.
* gcc.dg/noreturn-8.c: Likewise.
* gcc.dg/pr33826.c: Likewise.
* gcc.dg/torture/ipa-pta-1.c: Likewise.
* gcc.dg/tree-ssa/alias-2.c: Likewise.
* gcc.dg/tree-ssa/ipa-split-5.c: Likewise.
* gcc.dg/tree-ssa/loadpre6.c: Likewise.
* gcc.dg/uninit-19.c: Likewise.
From-SVN: r275580
|
|
Add *-*-uclinux* to tests that work on this target.
2019-09-10 Christophe Lyon <christophe.lyon@st.com>
gcc/testsuite/
* g++.dg/abi/forced.C: Add *-*-uclinux*.
* g++.dg/abi/guard2.C: Likewise.
* g++.dg/ext/cleanup-10.C: Likewise.
* g++.dg/ext/cleanup-11.C: Likewise.
* g++.dg/ext/cleanup-8.C: Likewise.
* g++.dg/ext/cleanup-9.C: Likewise.
* g++.dg/ext/sync-4.C: Likewise.
* g++.dg/ipa/comdat.C: Likewise.
* gcc.dg/20041106-1.c: Likewise.
* gcc.dg/cleanup-10.c: Likewise.
* gcc.dg/cleanup-11.c: Likewise.
* gcc.dg/cleanup-8.c: Likewise.
* gcc.dg/cleanup-9.c: Likewise.
* gcc.dg/fdata-sections-1.c: Likewise.
* gcc.dg/fdata-sections-2.c: Likewise.
* gcc.dg/pr39323-1.c: Likewise.
* gcc.dg/pr39323-2.c: Likewise.
* gcc.dg/pr39323-3.c: Likewise.
* gcc.dg/pr65780-1.c: Likewise.
* gcc.dg/pr65780-2.c: Likewise.
* gcc.dg/pr67338.c: Likewise.
* gcc.dg/pr78185.c: Likewise.
* gcc.dg/pr83100-1.c: Likewise.
* gcc.dg/pr83100-4.c: Likewise.
* gcc.dg/strlenopt-12g.c: Likewise.
* gcc.dg/strlenopt-14g.c: Likewise.
* gcc.dg/strlenopt-14gf.c: Likewise.
* gcc.dg/strlenopt-16g.c: Likewise.
* gcc.dg/strlenopt-17g.c: Likewise.
* gcc.dg/strlenopt-18g.c: Likewise.
* gcc.dg/strlenopt-1f.c: Likewise.
* gcc.dg/strlenopt-22g.c: Likewise.
* gcc.dg/strlenopt-2f.c: Likewise.
* gcc.dg/strlenopt-31g.c: Likewise.
* gcc.dg/strlenopt-33g.c: Likewise.
* gcc.dg/strlenopt-4g.c: Likewise.
* gcc.dg/strlenopt-4gf.c: Likewise.
* gcc.dg/strncmp-2.c: Likewise.
* gcc.dg/struct-ret-3.c: Likewise.
* gcc.dg/torture/pr69760.c: Likewise.
* gcc.target/arm/div64-unwinding.c: Likewise.
* gcc.target/arm/stack-checking.c: Likewise.
* gcc.target/arm/synchronize.c: Likewise.
* gcc.target/arm/pr66912.c: Add arm*-*-uclinuxfdpiceabi.
* lib/target-supports.exp (check_effective_target_pie): Likewise.
(check_effective_target_sync_long_long_runtime): Likewise.
(check_effective_target_sync_int_long): Likewise.
(check_effective_target_sync_char_short): Likewise.
From-SVN: r275579
|
|
PIC mode
Some tests fail on arm*-*-uclinuxfdpiceabi because it generates PIC
code and they don't support it: skip them. They also fail on
arm*-linux* when forcing -fPIC.
2019-09-10 Christophe Lyon <christophe.lyon@st.com>
gcc/testsuite/
* gcc.target/arm/eliminate.c: Accept only nonpic targets.
* g++.dg/other/anon5.C: Likewise.
From-SVN: r275578
|
|
In FDPIC mode, r9 is saved in addition to other registers, so update
the expected patterns accordingly.
2019-09-10 Christophe Lyon <christophe.lyon@st.com>
Mickaël Guêné <mickael.guene@st.com>
gcc/testsuite/
* gcc.target/arm/interrupt-1.c: Add scan-assembler pattern for
arm*-*-uclinuxfdpiceabi.
* gcc.target/arm/interrupt-2.c: Likewise.
* gcc.target/arm/pr70830.c: Likewise.
Co-Authored-By: Mickaël Guêné <mickael.guene@st.com>
From-SVN: r275577
|