re PR target/70048 ([AArch64] Inefficient local array addressing)
PR target/70048
* config/aarch64/aarch64.c (virt_or_elim_regno_p): New.
(aarch64_classify_address): Use it.
(aarch64_legitimize_address): Force all subexpressions of PLUS
into registers. Simplify as (sfp+const)+reg or (reg+reg)+const.
Marek Polacek [Wed, 16 Mar 2016 15:51:47 +0000 (15:51 +0000)]
re PR c/70093 (Instancing function with VM return type cases internal compiler error in 'assign_stack_temp_for_type'.)
PR c/70093
* c-typeck.c (build_function_call_vec): Create a TARGET_EXPR for
nested functions returning VM types.
* cgraphunit.c (cgraph_node::expand_thunk): Also build call to the
function being thunked if the result type doesn't have fixed size.
* gimplify.c (gimplify_modify_expr): Also set LHS if the result type
doesn't have fixed size.
* gcc.dg/nested-func-10.c: New test.
* gcc.dg/nested-func-9.c: New test.
Jakub Jelinek [Tue, 15 Mar 2016 16:11:48 +0000 (17:11 +0100)]
re PR rtl-optimization/70222 (Test miscompiled with -O1)
PR rtl-optimization/70222
* combine.c (simplify_shift_const_1): For A >> B >> C LSHIFTRT
optimization if mode is different from result_mode, queue up masking
of the result in outer_op. Formatting fix.
* gcc.c-torture/execute/pr70222-1.c: New test.
* gcc.c-torture/execute/pr70222-2.c: New test.
re PR target/64411 (ICE: in verify_target_availability, at sel-sched.c:1577 with -Os -mcmodel=medium -fPIC -fschedule-insns -fselective-scheduling)
gcc/
PR target/64411
* sched-deps.c (get_implicit_reg_pending_clobbers): New function,
factored out from ...
(sched_analyze_insn): ... here.
* sched-int.h (get_implicit_reg_pending_clobbers): Declare it.
* sel-sched-ir.c (setup_id_implicit_regs): New function, use
get_implicit_reg_pending_clobbers in it.
(setup_id_reg_sets): Use setup_id_implicit_regs.
(deps_init_id): Ditto.
testsuite/
PR target/64411
* gcc.target/i386/pr64411.C: New test.
Tom de Vries [Tue, 15 Mar 2016 11:51:32 +0000 (11:51 +0000)]
Fix fdump-ipa-all-graph
2016-03-15 Tom de Vries <tom@codesourcery.com>
PR ipa/70161
* cgraph.c (cgraph_node::get_body): Save, reset and restore
dump_file_name.
* passes.c (execute_one_ipa_transform_pass): Add missing argument to
execute_function_dump.
(execute_one_pass): Don't dump function if it will be dumped after ipa
transform.
Casey Carter [Mon, 14 Mar 2016 19:57:54 +0000 (19:57 +0000)]
P08184R0: Generalizing the Range-Based For Loop
* parser.c (cp_convert_range_for): Set the type of __end separately.
(cp_parser_perform_range_for_lookup): Allow different begin/end
types if they are comparable.
Co-Authored-By: Jason Merrill <jason@redhat.com>
From-SVN: r234191
Bernd Schmidt [Mon, 14 Mar 2016 15:08:54 +0000 (15:08 +0000)]
LRA: identify biggest access mode for hard_regs and use it in split_reg
PR target/70083
* lra-lives.c (process_bb_lives): Also update biggest mode for hard
regs.
(lra_create_live_ranges_1): initialize hard register biggest_mode to
VOIDmode.
* lra-constraints.c (split_reg): For hard regs, try to find the
biggest single-register mode used in the function.
testsuite/
PR target/70083
* gcc.dg/torture/pr70083.c: New test.
* gcc.target/i386/pr70083.c: New test.
rs6000: Handle "d" output in the bd*z patterns (PR70098)
In the rs6000 port, FLOAT_REGS can contain DImode values when compiling
for 64-bit targets. Some instructions (like "fcfid" in the testcase,
convert from integer to DP float) only work on floating point registers.
So, we do want to allow DImode in these regs.
Now, in unusual cases IRA will assign FLOAT_REGS to some allocno where
some insns cannot handle FLOAT_REGS there, so they will need a reload.
Maybe IRA can be made smarter, but it isn't doing anything wrong here,
so we should be able to handle it.
The place it goes wrong is in the output of the *ctrdi_internal[1256]
pattern: the "bdz" and "bdnz" instructions. GCC refuses to do output
reloads on JUMP_INSNs, probably because it is hard to do, needs different
strategies than "normal" reloads do, and it cannot even be done at all
for general patterns. So JUMP_INSNs need to be able to handle every
possible output for the register class used.
These patterns already handle writing to "c" (the base insn case), and
to "r", "m", and "c" or "l"; all those via splitters. We just need to
handle "d" as well. That is what this patch does. [A predicate in one
of the splitters needs to be touched up so that the correct splitter
is used for the FLOAT_REGS case.]
But, that leaves another problem. One of the insns that are split to
is a move from a GPR to an FPR. That work fine on targets with direct
move (which does exactly that), i.e. power8 and up. But older targets
need memory to do the move, and this splitter runs after reload so
it cannot allocate memory; and allocating memory beforehand for every
bdnz insn is pretty horrible as well.
This patch implements the easy part. With it, power8 works, where it
didn't before.
PR target/70098
* config/rs6000/rs6000.md (*ctr<mode>_internal1, *ctr<mode>_internal2,
*ctr<mode>_internal5, *ctr<mode>_internal6): Also allow "d" as output.
(define_split for the GPR case): Use int_reg_operand instead of
gpc_reg_operand for the output.
gcc/testsuite/
PR target/70098
* lib/target-supports.exp (check_effective_target_powerpc64_no_dm):
New function.
* g++.dg/pr70098.C: New testcase.
Eric Botcazou [Sun, 13 Mar 2016 20:35:48 +0000 (20:35 +0000)]
vxworks.h (STACK_CHECK_STATIC_BUILTIN): Define.
* config/arm/vxworks.h (STACK_CHECK_STATIC_BUILTIN): Define.
(STACK_CHECK_PROTECT): Likewise.
* config/i386/vxworks.h (STACK_CHECK_STATIC_BUILTIN): Likewise
(STACK_CHECK_PROTECT): Likewise.
* config/rs6000/vxworks.h (STACK_CHECK_STATIC_BUILTIN): Likewise
(STACK_CHECK_PROTECT): Likewise.
* config/rs6000/vxworksae.h (STACK_CHECK_PROTECT): Likewise.
* config/sparc/vxworks.h (STACK_CHECK_STATIC_BUILTIN): Likewise.
(STACK_CHECK_PROTECT): Likewise.
ada/
* system-vxworks-m68k.ads (Stack_Check_Probes): Set to True.
(Stack_Check_Limits): Set to False.
* system-vxworks-mips.ads (Stack_Check_Probes): Set to True.
(Stack_Check_Limits): Set to False.
* system-vxworks-ppc.ads (Stack_Check_Probes): Set to True.
(Stack_Check_Limits): Set to False.
* system-vxworks-sparcv9.ads (Stack_Check_Probes): Set to True.
(Stack_Check_Limits): Set to False.
* system-vxworks-x86.ads (Stack_Check_Probes): Set to True.
(Stack_Check_Limits): Set to False.
Jerry DeLisle [Sun, 13 Mar 2016 00:19:08 +0000 (00:19 +0000)]
re PR fortran/69520 (Implement reversal of -fcheck options)
2016-03-12 Jerry DeLisle <jvdelisle@gcc.gnu.org>
Harold Anlauf <anlauf@gmx.de>
PR fortran/69520
* invoke.texi: Explain use of the 'no-' construct within the
-fcheck= option.
* options.c (gfc_handle_runtime_check_option): Enable use of
'no-' prefix for the various options with -fcheck= to allow
negating previously enabled check options.
Co-Authored-By: Harald Anlauf <anlauf@gmx.de>
From-SVN: r234167
Paul Thomas [Sat, 12 Mar 2016 13:59:10 +0000 (13:59 +0000)]
re PR fortran/70031 (Error in recursive module subroutine declaration if declared as "module recursive")
2016-03-12 Paul Thomas <pault@gcc.gnu.org>
PR fortran/70031
* decl.c (gfc_match_prefix): Treat the 'module' prefix in the
same way as the others, rather than fixing it to come last.
(gfc_match_function_decl, gfc_match_subroutine): After errors
in 'copy_prefix', emit them immediately in the case of module
procedures to prevent a later ICE.
PR fortran/69524
* decl.c (gfc_match_submod_proc): Permit 'module procedure'
declarations within the contains section of modules as well as
submodules.
* resolve.c (resolve_fl_procedure): Likewise.
*trans-decl.c (build_function_decl): Change the gcc_assert to
allow all forms of module procedure declarations within module
contains sections.
2016-03-12 Paul Thomas <pault@gcc.gnu.org>
PR fortran/70031
* gfortran.dg/submodule_14.f08: New test
PR fortran/69524
* gfortran.dg/submodule_15.f08: New test
Eric Botcazou [Sat, 12 Mar 2016 11:32:54 +0000 (11:32 +0000)]
re PR ada/70017 (c52103x and c52104x test failure on s390x)
PR ada/70017
* calls.c (emit_library_call_value_1): Clear the ECF_NOTHROW flag if
the libcall is LCT_THROW.
* explow.c (probe_stack_range): Pass LCT_THROW to emit_library_call
for the checking routine.
Bernd Schmidt [Fri, 11 Mar 2016 22:38:41 +0000 (15:38 -0700)]
re PR target/70123 (Miscompilation of cfitsio testcase on s390x-linux starting with r222144)
PR target/70123
* lra-remat.c (operand_to_remat): Disallow hard regs in the value t
be rematerialized.
(reg_overlap_for_remat_p): Renamed from input_regno_present_p.
Arguments swapped. All callers changed. Take reg_renumber into
account, and Calculate and compare register ranges for hard regs.
PR target/70123
* gcc.dg/torture/pr70123.c: New test.
Jeff Law [Fri, 11 Mar 2016 22:32:11 +0000 (15:32 -0700)]
re PR tree-optimization/70190 (ICE (segfault) at -O2 and -O3 on x86_64-linux-gnu)
PR tree-optimization/70190
* tree-ssa-threadbackward.c (fsm_find_control_statement_thread_paths):
Handle cases where we can not extract the taken edge, even though we
found a constant value.
PR tree-optimization/70190
* gcc.c-torture/compile/pr70190.c: New test.
Jeff Law [Fri, 11 Mar 2016 21:07:31 +0000 (14:07 -0700)]
re PR tree-optimization/64058 (Performance degradation after r216304)
PR tree-optimization/64058
* tree-ssa-coalesce.c (struct coalesce_pair): Add new field INDEX.
(num_coalesce_pairs): Move up earlier in file.
(find_coalesce_pair): Initialize the INDEX field for each pair
discovered.
(compare_pairs): No longer sort on the elements in each pair.
Instead break ties with the index of the coalesce pair.
David Malcolm [Fri, 11 Mar 2016 19:48:49 +0000 (19:48 +0000)]
Wmisleading-indentation: add reproducer for PR c/70085
PR c/70085 reported a false-positive from -Wmisleading-indentation.
The warning was fixed by the fix for PR c/68187 (r233972), but it seems
worth capturing the reproducer for PR c/70085 as an additional test case,
as it's slightly different to those seen in PR c/68187.
gcc/testsuite/ChangeLog:
PR c/70085
* c-c++-common/Wmisleading-indentation.c (pr70085): New test case.
Kyrylo Tkachov [Fri, 11 Mar 2016 15:27:24 +0000 (15:27 +0000)]
[AArch64] PR target/70002: Make aarch64_set_current_function play nice with pragma resetting
PR target/70002
* config/aarch64/aarch64-protos.h
(aarch64_save_restore_target_globals): New prototype.
* config/aarch64/aarch64-c.c (aarch64_pragma_target_parse):
Call the above when popping pragma.
* config/aarch64/aarch64.c (aarch64_save_restore_target_globals):
New function.
(aarch64_set_current_function): Rewrite using the above.
PR target/70002
PR target/69245
* gcc.target/aarch64/pr69245_2.c: New test.
Jakub Jelinek [Fri, 11 Mar 2016 12:07:01 +0000 (13:07 +0100)]
re PR rtl-optimization/70174 (ICE at -O1 and above on x86_64-linux-gnu in gen_lowpart_general, at rtlhooks.c:63)
PR rtl-optimization/70174
* expmed.c (store_bit_field_using_insv): Use gen_lowpart_if_possible
followed by gen_lowpart on force_reg instead of just gen_lowpart.
Jakub Jelinek [Fri, 11 Mar 2016 12:05:58 +0000 (13:05 +0100)]
re PR tree-optimization/70169 (ICE at -O1 and above on x86_64-linux-gnu in gen_lsm_tmp_name, at tree-ssa-loop.c:791)
PR tree-optimization/70169
* tree-ssa-loop.c (gen_lsm_tmp_name): Handle FUNCTION_DECL and
LABEL_DECL like VAR_DECL. Emit nothing instead of gcc_unreachable
for unknown codes.
Andreas Krebbel [Fri, 11 Mar 2016 07:47:47 +0000 (07:47 +0000)]
S/390: Fix rounding for _Decimal128 to _Decimal32 conversion
We do not have a direct conversion instruction from 128 bit DFP to 32
bit DFP so this needs to be done in two steps. The first needs to be
done with the "prepare for shorter precision rounding mode" in order
to produce a correct result.
gcc/ChangeLog:
2016-03-11 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/s390.md ("trunctddd2"): Turn former define_insn into
define_expand.
("*trunctddd2"): New pattern definition.
("trunctdsd2"): Set prep_for_short_prec rounding mode for the
TD->DD truncation.
gcc/testsuite/ChangeLog:
2016-03-11 Andreas Krebbel <krebbel@linux.vnet.ibm.com>