2016-11-29 Richard Biener <rguenther@suse.de>
* tree-cfg.c (lower_phi_internal_fn): Do not look for further
PHIs after a regular stmt.
(stmt_starts_bb_p): PHIs not preceeded by a PHI or a label
start a new BB.
From-SVN: r242959
PR gcov-profile/78582
* gcc.dg/pr78582.c: New test.
PR gcov-profile/78582
* tree-profile.c (gimple_gen_time_profiler): Make one extra BB
to prevent PHI argument clash.
From-SVN: r242958
The dump expects literals which would only be present if the target's
int size is 32 bits.
Fix by explicitly using 32 bit ints for targets with __SIZEOF_INT__ < 4.
gcc/testsuite/
2016-11-29 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* testsuite/gcc.dg/pr31096-1.c: Use __{U,}INT32_TYPE__ for
targets with sizeof(int) < 4.
From-SVN: r242954
These testcases test that we generate the expected code for all of the
rl*i* instructions, that is, rotate-and-mask and rotate-and-mask-insert
for immediate rotation counts. All the testcases do rotate, shift left,
as well as shift right; if that results in an instruction that does not
exist the testcases generate a multiplication instead, so that we can
detect if this is handled properly.
Many 32-bit instructions zero-extend their result properly in 64-bit
mode, but the rs6000 port does not yet know. These testcases test the
status quo, so they will need updating when ever we handle this.
gcc/testsuite/
* gcc.target/powerpc/rldic-0.c: New testcase.
* gcc.target/powerpc/rldic-1.c: New testcase.
* gcc.target/powerpc/rldic-2.c: New testcase.
* gcc.target/powerpc/rldicl-0.c: New testcase.
* gcc.target/powerpc/rldicl-1.c: New testcase.
* gcc.target/powerpc/rldicl-2.c: New testcase.
* gcc.target/powerpc/rldicr-0.c: New testcase.
* gcc.target/powerpc/rldicr-1.c: New testcase.
* gcc.target/powerpc/rldicr-2.c: New testcase.
* gcc.target/powerpc/rldicx.h: New file.
* gcc.target/powerpc/rldimi-0.c: New testcase.
* gcc.target/powerpc/rldimi-1.c: New testcase.
* gcc.target/powerpc/rldimi-2.c: New testcase.
* gcc.target/powerpc/rldimi.h: New file.
* gcc.target/powerpc/rlwimi-0.c: New testcase.
* gcc.target/powerpc/rlwimi-1.c: New testcase.
* gcc.target/powerpc/rlwimi-2.c: New testcase.
* gcc.target/powerpc/rlwimi.h: New file.
* gcc.target/powerpc/rlwinm-0.c: New testcase.
* gcc.target/powerpc/rlwinm-1.c: New testcase.
* gcc.target/powerpc/rlwinm-2.c: New testcase.
* gcc.target/powerpc/rlwinm.h: New file.
From-SVN: r242951
change_zero_ext handles (zero_extend:M1 (subreg:M2 (reg:M1) ...))
already; this patch extends it to also deal with any
(zero_extend:M1 (subreg:M2 (reg:M3) ...)) where the subreg is not
paradoxical.
* combine.c (change_zero_ext): Also handle extends from a subreg
to a mode bigger than that of the operand of the subreg.
From-SVN: r242950
If we use ABI_V4 and we have a big stack frame, we end the epilogue
with a "mr 1,11" (or similar) instruction. This instruction however
has no dependencies on the earlier restores from stack (done via r11),
so sched2 can end up reordering the insns, which is bad because we
have no red zone so that you then restore from stack that is already
deallocated.
This fixes it by making that restore depend on the memory accesses.
PR target/77687
* config/rs6000/rs6000.c (rs6000_emit_stack_reset): Emit the
stack_restore_tie insn instead of stack_tie, for the SVR4 and
SPE ABIs.
* config/rs6000/rs6000.md (stack_restore_tie): New define_insn.
From-SVN: r242949
This patch changes spread_components to use a simpler algorithm that
puts prologue components as early as possible, and epilogue components
as late as possible. This allows better scheduling, and also saves a
bit of code size. The blocks that run with some specific component
enabled after this patch is a strict superset of those that had it
before the patch.
It does this by finding for every component the basic blocks where that
component is not needed on some path from the entry block (it reuses
head_components to store this), and similarly the blocks where the
component is not needed on some path to the exit block (or the exit can
not be reached from that block) (stored in tail_components). Blocks
that then are not in both of those two sets get the component active.
* shrink-wrap.c (init_separate_shrink_wrap): Do not clear
head_components and tail_components.
(spread_components): New algorithm.
(emit_common_tails_for_components): Clear head_components and
tail_components.
(insert_prologue_epilogue_for_components): Write extra output to the
dump file for sibcalls and abnormal exits.
From-SVN: r242948
Combine can turn a conditional trap into an unconditional trap. If it
does that it should make the code after it unreachable (an unconditional
trap should be the last insn in its bb, and that bb has no successors).
This patch seems to work. It is hard to be sure, this is very hard to
trigger. Quite a few other passes look like they need something similar
as well, but I don't see anything else handling it yet either.
PR rtl-optimization/78342
* combine.c: Include "cfghooks.h".
(try_combine): If we create an unconditional trap, break the basic
block in two just after it, and remove the edge between; also, set
the *new_direct_jump_p flag so that cleanup_cfg is run.
From-SVN: r242947
simplify_truncation changes the truncation of many operations into
the operation on the truncation. This patch makes this code also
handle extracts.
* simplify-rtx.c (simplify_truncation): Handle truncate of zero_extract
and sign_extract.
From-SVN: r242946
PR middle-end/78521 - [7 Regression] incorrect byte count in -Wformat-length warning with non-constant width or precision
PR middle-end/78520 - missing warning for snprintf with size greater than INT_MAX
gcc/ChangeLog:
PR middle-end/78520
* gimple-ssa-sprintf.c (target_max_value): Remove.
(target_int_max, target_size_max): Use TYPE_MAX_VALUE.
(get_width_and_precision): New function.
(format_integer, format_floating, get_string_length, format_string):
Correct handling of width and precision with unknown value.
(format_directive): Add warning.
(pass_sprintf_length::compute_format_length): Allow for precision
to consist of a sole period with no asterisk or digits after it.
gcc/testsuite/ChangeLog:
PR middle-end/78520
* gcc.dg/tree-ssa/builtin-sprintf-5.c: Add test cases.
* gcc.dg/tree-ssa/builtin-sprintf-6.c: New test.
* gcc.dg/tree-ssa/builtin-sprintf-warn-1.c: Add test cases.
* gcc.dg/tree-ssa/builtin-sprintf-warn-3.c: Add test cases.
From-SVN: r242935
PR gcc/74748
* libgcc/config/bfin/libgcc-glibc.ver, libgcc/config/bfin/t-linux:
use generic linker version information on Blackfin.
2016-11-27 Iain Sandoe <iain@codesourcery.com>
From-SVN: r242934
PR rtl-optimization/78546
* simplify-rtx.c (neg_const_int): When negating most negative
number in mode wider than HOST_BITS_PER_WIDE_INT, use
simplify_const_unary_operation to produce CONST_DOUBLE or
CONST_WIDE_INT.
(simplify_plus_minus): Hanlde the case where neg_const_int
doesn't return a CONST_INT.
* gcc.dg/torture/pr78546-1.c: New test.
* gcc.dg/torture/pr78546-2.c: New test.
From-SVN: r242929
Running bootstrap-ubsan on ppc64le shows many instances of e.g.:
config/rs6000/rs6000.c:6217:36: runtime error: left shift of negative value -12301
PR target/78556
* config/rs6000/rs6000.c (vspltis_constant): Add casts to avoid
left shifting of negative values.
From-SVN: r242928
PR fortran/78298
* tree-nested.c (convert_local_reference_stmt): After adding
shared (FRAME.NN) clause to omp parallel, task or target,
add it also to all outer omp parallel, task or target constructs.
* gfortran.dg/gomp/pr78298.f90: New test.
From-SVN: r242926
2016-11-28 Richard Biener <rguenther@suse.de>
* tree-vrp.c (vrp_visit_assignment_or_call): Handle
simplifications to SSA names via extract_range_from_ssa_name
if allowed.
From-SVN: r242921
2016-11-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/78542
* tree-ssa-ccp.c (evaluate_stmt): Only valueize simplification
if allowed.
* gcc.dg/torture/pr78542.c: New testcase.
From-SVN: r242920
2016-11-28 Jonas Hahnfeld <Hahnfeld@itc.rwth-aachen.de>
* config/linux/affinity.c [!HAVE_PTHREAD_AFFINITY_NP]: Include
../../affinity.c as fallback.
* config/nvptx/affinity.c: Delete to use fallback implementation.
From-SVN: r242918
The method used in the applied patch caused configuration errors on freeBSD and hppa.
2016-11-28 Iain Sandoe <iain@codesourcery.com>
PR target/71767
* configure.ac (with_ld64): Use portable method to extract the
major part of the version number.
* configure: Regenerated.
From-SVN: r242912
* gimple-ssa-sprintf.c (build_intmax_type_nodes): Look at
UINTMAX_TYPE rather than SIZE_TYPE. Add gcc_unreachable if
intmax_t couldn't be determined.
(format_integer): Make {,u}intmax_type_node no longer static,
initialize them only when needed. For z and t use
signed_or_unsigned_type_for instead of assuming size_t and
ptrdiff_t have the same precision.
From-SVN: r242911
PR ada/78524
* gcc-interface/utils.c (max_size) <tcc_reference>: Add missing
conversion to original type in the PLACEHOLDER_EXPR case.
From-SVN: r242902
2016-11-27 Paul Thomas <pault@gcc.gnu.org>
PR fortran/78474
* module.c (gfc_match_submodule): If there is more than one
colon, it is a syntax error.
PR fortran/78331
* module.c (gfc_use_module): If an smod file does not exist it
is either because the module does not have a module procedure
interface or there is an error in the module.
2016-11-27 Paul Thomas <pault@gcc.gnu.org>
PR fortran/78474
* gfortran.dg/submodule_22.f08: New test.
PR fortran/78331
* gfortran.dg/submodule_21.f08: New test.
From-SVN: r242900