Jan Hubicka [Fri, 3 Jun 2016 17:00:19 +0000 (19:00 +0200)]
tree-ssa-loop-niter.c (estimate_numbers_of_iterations_loop): Avoid use of profile unless profile status is PROFILE_READ.
* tree-ssa-loop-niter.c (estimate_numbers_of_iterations_loop): Avoid
use of profile unless profile status is PROFILE_READ.
* profile.c (compute_branch_probabilities): Set profile status
only after reporting predictor hitrates.
From-SVN: r237076
Joseph Myers [Fri, 3 Jun 2016 15:49:04 +0000 (16:49 +0100)]
Add option for whether ceil etc. can raise "inexact", adjust x86 conditions.
In ISO C99/C11, the ceil, floor, round and trunc functions may or may
not raise the "inexact" exception for noninteger arguments. Under TS
18661-1:2014, the C bindings for IEEE 754-2008, these functions are
prohibited from raising "inexact", in line with the general rule that
"inexact" is only when the mathematical infinite precision result of a
function differs from the result after rounding to the target type.
GCC has no option to select TS 18661 requirements for not raising
"inexact" when expanding built-in versions of these functions inline.
Furthermore, even given such requirements, the conditions on the x86
insn patterns for these functions are unnecessarily restrictive. I'd
like to make the out-of-line glibc versions follow the TS 18661
requirements; in the cases where this slows them down (the cases using
x87 floating point), that makes it more important for inline versions
to be used when the user does not care about "inexact".
This patch fixes these issues. A new option
-fno-fp-int-builtin-inexact is added to request TS 18661 rules for
these functions; the default -ffp-int-builtin-inexact reflects that
such exceptions are allowed by C99 and C11. (The intention is that if
C2x incorporates TS 18661-1, then the default would change in C2x
mode.)
The x86 built-ins for rint (x87, SSE2 and SSE4.1) are made
unconditionally available (no longer depending on
-funsafe-math-optimizations or -fno-trapping-math); "inexact" is
correct for noninteger arguments to rint. For floor, ceil and trunc,
the x87 and SSE2 built-ins are OK if -ffp-int-builtin-inexact or
-fno-trapping-math (they may raise "inexact" for noninteger
arguments); the SSE4.1 built-ins are made to use ROUND_NO_EXC so that
they do not raise "inexact" and so are OK unconditionally.
Now, while there was no semantic reason for depending on
-funsafe-math-optimizations, the insn patterns had such a dependence
because of use of gen_truncxf<mode>2_i387_noop to truncate back to
SFmode or DFmode after using frndint in XFmode. In this case a no-op
truncation is safe because rounding to integer always produces an
exactly representable value (the same reason why IEEE semantics say it
shouldn't produce "inexact") - but of course that insn pattern isn't
safe because it would also match cases where the truncation is not in
fact a no-op. To allow frndint to be used for SFmode and DFmode
without that unsafe pattern, the relevant frndint patterns are
extended to SFmode and DFmode or new SFmode and DFmode patterns added,
so that the frndint operation can be represented in RTL as an
operation acting directly on SFmode or DFmode without the extension
and the problematic truncation.
A generic test of the new option is added, as well as x86-specific
tests, both execution tests including the generic test with different
x86 options and scan-assembler tests verifying that functions that
should be inlined with different options are indeed inlined.
I think other architectures are OK for TS 18661-1 semantics already.
Considering those defining "ceil" patterns: aarch64, arm, rs6000, s390
use instructions that do not raise "inexact"; nvptx does not support
floating-point exceptions. (This does mean the -f option in fact only
affects one architecture, but I think it should still be a -f option;
it's logically architecture-independent and is expected to be affected
by future -std options, so is similar to e.g. -fexcess-precision=,
which also does nothing on most architectures but is implied by -std
options.)
Bootstrapped with no regressions on x86_64-pc-linux-gnu. OK to
commit?
PR target/71276
PR target/71277
gcc:
* common.opt (ffp-int-builtin-inexact): New option.
* doc/invoke.texi (-fno-fp-int-builtin-inexact): Document.
* doc/md.texi (floor@var{m}2, btrunc@var{m}2, round@var{m}2)
(ceil@var{m}2): Document dependence on this option.
* ipa-inline-transform.c (inline_call): Handle
flag_fp_int_builtin_inexact.
* ipa-inline.c (can_inline_edge_p): Likewise.
* config/i386/i386.md (rintxf2): Do not test
flag_unsafe_math_optimizations.
(rint<mode>2_frndint): New define_insn.
(rint<mode>2): Do not test flag_unsafe_math_optimizations for 387
or !flag_trapping_math for SSE. Just use gen_rint<mode>2_frndint
for 387 instead of extending and truncating.
(frndintxf2_<rounding>): Test flag_fp_int_builtin_inexact ||
!flag_trapping_math instead of flag_unsafe_math_optimizations.
Change to frndint<mode>2_<rounding>.
(frndintxf2_<rounding>_i387): Likewise. Change to
frndint<mode>2_<rounding>_i387.
(<rounding_insn>xf2): Likewise.
(<rounding_insn><mode>2): Test flag_fp_int_builtin_inexact ||
!flag_trapping_math instead of flag_unsafe_math_optimizations for
x87. Test TARGET_ROUND || !flag_trapping_math ||
flag_fp_int_builtin_inexact instead of !flag_trapping_math for
SSE. Use ROUND_NO_EXC in constant operand of
gen_sse4_1_round<mode>2. Just use gen_frndint<mode>2_<rounding>
for 387 instead of extending and truncating.
gcc/testsuite:
* gcc.dg/torture/builtin-fp-int-inexact.c,
gcc.target/i386/387-builtin-fp-int-inexact.c,
gcc.target/i386/387-rint-inline-1.c,
gcc.target/i386/387-rint-inline-2.c,
gcc.target/i386/sse2-builtin-fp-int-inexact.c,
gcc.target/i386/sse2-rint-inline-1.c,
gcc.target/i386/sse2-rint-inline-2.c,
gcc.target/i386/sse4_1-builtin-fp-int-inexact.c,
gcc.target/i386/sse4_1-rint-inline.c: New tests.
From-SVN: r237074
H.J. Lu [Fri, 3 Jun 2016 15:08:00 +0000 (15:08 +0000)]
Implement x86 interrupt attribute
The interrupt and exception handlers are called by x86 processors. X86
hardware pushes information onto stack and calls the handler. The
requirements are
1. Both interrupt and exception handlers must use the 'IRET' instruction,
instead of the 'RET' instruction, to return from the handlers.
2. All registers are callee-saved in interrupt and exception handlers.
3. The difference between interrupt and exception handlers is the
exception handler must pop 'ERROR_CODE' off the stack before the 'IRET'
instruction.
The design goals of interrupt and exception handlers for x86 processors
are:
1. Support both 32-bit and 64-bit modes.
2. Flexible for compilers to optimize.
3. Easy to use by programmers.
To implement interrupt and exception handlers for x86 processors, a
compiler should support:
'interrupt' attribute
Use this attribute to indicate that the specified function with
mandatory arguments is an interrupt or exception handler. The compiler
generates function entry and exit sequences suitable for use in an
interrupt handler when this attribute is present. The 'IRET' instruction,
instead of the 'RET' instruction, is used to return from interrupt or
exception handlers. All registers, except for the EFLAGS register which
is restored by the 'IRET' instruction, are preserved by the compiler.
Since GCC doesn't preserve MPX, SSE, MMX nor x87 states, the GCC option,
-mgeneral-regs-only, should be used to compile interrupt and exception
handlers.
Note for compiler implementers: If the compiler generates MPX, SSE, MMX
or x87 instructions in an interrupt or exception handler, or functions
called from an interrupt or exception handler may contain MPX, SSE, MMX
or x87 instructions, the compiler must save and restore the corresponding
state.
Since the direction flag in the FLAGS register in interrupt (exception)
handlers is undetermined, cld instruction must be emitted in function
prologue if rep string instructions are used in interrupt (exception)
handler or interrupt (exception) handler isn't a leaf function.
Any interruptible-without-stack-switch code must be compiled with
-mno-red-zone since interrupt handlers can and will, because of the
hardware design, touch the red zone.
1. interrupt handler must be declared with a mandatory pointer argument:
struct interrupt_frame;
__attribute__ ((interrupt))
void
f (struct interrupt_frame *frame)
{
...
}
and user must properly define the structure the pointer pointing to.
2. exception handler:
The exception handler is very similar to the interrupt handler with
a different mandatory function signature:
typedef unsigned int uword_t __attribute__ ((mode (__word__)));
struct interrupt_frame;
__attribute__ ((interrupt))
void
f (struct interrupt_frame *frame, uword_t error_code)
{
...
}
and compiler pops the error code off stack before the 'IRET' instruction.
The exception handler should only be used for exceptions which push an
error code and all other exceptions must use the interrupt handler.
The system will crash if the wrong handler is used.
'no_caller_saved_registers' attribute
Use this attribute to indicate that the specified function has no
caller-saved registers. That is, all registers are callee-saved.
The compiler generates proper function entry and exit sequences to
save and restore any modified registers, except for the EFLAGS register.
Since GCC doesn't preserve MPX, SSE, MMX nor x87 states, the GCC option,
-mgeneral-regs-only, should be used to compile functions with
'no_caller_saved_registers'attribute.
Note for compiler implementers: If the compiler generates MPX, SSE,
MMX or x87 instructions in a function with 'no_caller_saved_registers'
attribute or functions called from a function with
'no_caller_saved_registers' attribute may contain MPX, SSE, MMX or x87
instructions, the compiler must save and restore the corresponding state.
The user can call functions specified with 'no_caller_saved_registers'
attribute from an interrupt handler without saving and restoring all
call clobbered registers.
On x86, interrupt handlers are only called by processors which push
interrupt data onto stack at the address where the normal return address
is. Interrupt handlers must access interrupt data via pointers so that
they can update interrupt data.
gcc/
PR target/66960
PR target/67630
PR target/67634
PR target/67841
PR target/68037
PR target/68618
PR target/68661
PR target/69575
PR target/69596
PR target/69734
* config/i386/i386-protos.h (ix86_epilogue_uses): New prototype.
* config/i386/i386.c (ix86_conditional_register_usage): Preserve
all registers, except for function return registers if there are
no caller-saved registers.
(ix86_set_func_type): New function.
(ix86_set_current_function): Call ix86_set_func_type to set
no_caller_saved_registers and func_type. Call reinit_regs if
caller-saved registers are changed. Don't allow MPX, SSE, MMX
nor x87 instructions in interrupt handler nor function with
no_caller_saved_registers attribute.
(ix86_function_ok_for_sibcall): Return false if there are no
caller-saved registers.
(type_natural_mode): Don't warn ABI change for MMX in interrupt
handler.
(ix86_function_arg_advance): Skip for callee in interrupt
handler.
(ix86_function_arg): Return special arguments in interrupt
handler.
(ix86_promote_function_mode): Promote pointer to word_mode only
for normal functions.
(ix86_can_use_return_insn_p): Don't use `ret' instruction in
interrupt handler.
(ix86_epilogue_uses): New function.
(ix86_hard_regno_scratch_ok): Likewise.
(ix86_save_reg): Preserve all registers in interrupt handler
after reload. Preserve all registers, except for function
return registers, if there are no caller-saved registers after
reload.
(find_drap_reg): Always use callee-saved register if there are
no caller-saved registers.
(ix86_minimum_incoming_stack_boundary): Return MIN_STACK_BOUNDARY
for interrupt handler.
(ix86_expand_prologue): Don't allow DRAP in interrupt handler.
Emit cld instruction if stringops are used in interrupt handler
or interrupt handler isn't a leaf function.
(ix86_expand_epilogue): Generate interrupt return for interrupt
handler and pop the 'ERROR_CODE' off the stack before interrupt
return in exception handler.
(ix86_expand_call): Disallow calling interrupt handler directly.
If there are no caller-saved registers, mark all registers that
are clobbered by the call which returns as clobbered.
(ix86_handle_no_caller_saved_registers_attribute): New function.
(ix86_handle_interrupt_attribute): Likewise.
(ix86_attribute_table): Add interrupt and no_caller_saved_registers
attributes.
(TARGET_HARD_REGNO_SCRATCH_OK): Likewise.
* config/i386/i386.h (ACCUMULATE_OUTGOING_ARGS): Use argument
accumulation in interrupt function if stack may be realigned to
avoid DRAP.
(EPILOGUE_USES): New.
(function_type): New enum.
(machine_function): Add func_type and no_caller_saved_registers.
* config/i386/i386.md (UNSPEC_INTERRUPT_RETURN): New.
(interrupt_return): New pattern.
* doc/extend.texi: Document x86 interrupt and
no_caller_saved_registers attributes.
gcc/testsuite/
PR target/66960
PR target/67630
PR target/67634
PR target/67841
PR target/68037
PR target/68618
PR target/68661
PR target/69575
PR target/69596
PR target/69734
* gcc.dg/guality/pr68037-1.c: New test.
* gcc.dg/guality/pr68037-2.c: Likewise.
* gcc.dg/guality/pr68037-3.c: Likewise.
* gcc.dg/torture/pr68037-1.c: Likewise.
* gcc.dg/torture/pr68037-2.c: Likewise.
* gcc.dg/torture/pr68037-3.c: Likewise.
* gcc.dg/torture/pr68661-1a.c: Likewise.
* gcc.dg/torture/pr68661-1b.c: Likewise.
* gcc.target/i386/interrupt-1.c: Likewise.
* gcc.target/i386/interrupt-2.c: Likewise.
* gcc.target/i386/interrupt-3.c: Likewise.
* gcc.target/i386/interrupt-4.c: Likewise.
* gcc.target/i386/interrupt-5.c: Likewise.
* gcc.target/i386/interrupt-6.c: Likewise.
* gcc.target/i386/interrupt-7.c: Likewise.
* gcc.target/i386/interrupt-8.c: Likewise.
* gcc.target/i386/interrupt-9.c: Likewise.
* gcc.target/i386/interrupt-10.c: Likewise.
* gcc.target/i386/interrupt-11.c: Likewise.
* gcc.target/i386/interrupt-12.c: Likewise.
* gcc.target/i386/interrupt-13.c: Likewise.
* gcc.target/i386/interrupt-14.c: Likewise.
* gcc.target/i386/interrupt-15.c: Likewise.
* gcc.target/i386/interrupt-16.c: Likewise.
* gcc.target/i386/interrupt-17.c: Likewise.
* gcc.target/i386/interrupt-18.c: Likewise.
* gcc.target/i386/interrupt-19.c: Likewise.
* gcc.target/i386/interrupt-20.c: Likewise.
* gcc.target/i386/interrupt-21.c: Likewise.
* gcc.target/i386/interrupt-22.c: Likewise.
* gcc.target/i386/interrupt-23.c: Likewise.
* gcc.target/i386/interrupt-24.c: Likewise.
* gcc.target/i386/interrupt-25.c: Likewise.
* gcc.target/i386/interrupt-26.c: Likewise.
* gcc.target/i386/interrupt-27.c: Likewise.
* gcc.target/i386/interrupt-28.c: Likewise.
* gcc.target/i386/interrupt-387-err-1.c: Likewise.
* gcc.target/i386/interrupt-387-err-2.c: Likewise.
* gcc.target/i386/interrupt-bnd-err-1.c: Likewise.
* gcc.target/i386/interrupt-bnd-err-2.c: Likewise.
* gcc.target/i386/interrupt-iamcu.c: Likewise.
* gcc.target/i386/interrupt-mmx-err-1.c: Likewise.
* gcc.target/i386/interrupt-mmx-err-2.c: Likewise.
* gcc.target/i386/interrupt-redzone-1.c: Likewise.
* gcc.target/i386/interrupt-redzone-2.c: Likewise.
* gcc.target/i386/interrupt-sibcall-1.c: Likewise.
* gcc.target/i386/interrupt-sibcall-2.c: Likewise.
* gcc.target/i386/interrupt-switch-abi.c: Likewise.
Co-Authored-By: Julia Koval <julia.koval@intel.com>
From-SVN: r237073
H.J. Lu [Fri, 3 Jun 2016 15:06:47 +0000 (08:06 -0700)]
Convert leading spaces to tabs
From-SVN: r237072
H.J. Lu [Fri, 3 Jun 2016 15:05:11 +0000 (08:05 -0700)]
Convert leading spaces to tabs
From-SVN: r237071
Chung-Lin Tang [Fri, 3 Jun 2016 14:25:12 +0000 (14:25 +0000)]
c-typeck.c (c_finish_omp_clauses): Mark OpenACC reduction arguments as addressable when async clause exists.
2016-06-03 Chung-Lin Tang <cltang@codesourcery.com>
c/
* c-typeck.c (c_finish_omp_clauses): Mark OpenACC reduction
arguments as addressable when async clause exists.
cp/
* semantics.c (finish_omp_clauses): Mark OpenACC reduction
arguments as addressable when async clause exists.
fortran/
* trans-openmp.c (gfc_trans_omp_reduction_list): Add mark_addressable
bool parameter, set reduction clause DECLs as addressable when true.
(gfc_trans_omp_clauses): Pass clauses->async to
gfc_trans_omp_reduction_list, add comment describing OpenACC situation.
libgomp/
* testsuite/libgomp.oacc-fortran/reduction-8.f90: New testcase.
* testsuite/libgomp.oacc-c-c++-common/reduction-8.c: New testcase.
From-SVN: r237070
Bernd Schmidt [Fri, 3 Jun 2016 14:20:53 +0000 (14:20 +0000)]
re PR tree-optimization/52171 (memcmp/strcmp/strncmp can be optimized when the result is tested for [in]equality with 0)
PR tree-optimization/52171
* builtins.c (expand_cmpstrn_or_cmpmem): Delete, moved elsewhere.
(expand_builtin_memcmp): New arg RESULT_EQ. All callers changed.
Look for constant strings. Move some code to emit_block_cmp_hints
and use it.
* builtins.def (BUILT_IN_MEMCMP_EQ): New.
* defaults.h (COMPARE_MAX_PIECES): New macro.
* expr.c (move_by_pieces_d, store_by_pieces_d): Remove old structs.
(move_by_pieces_1, store_by_pieces_1, store_by_pieces_2): Remvoe.
(clear_by_pieces_1): Don't declare. Move definition before use.
(can_do_by_pieces): New static function.
(can_move_by_pieces): Use it. Return bool.
(by_pieces_ninsns): Renamed from move_by_pieces_ninsns. New arg
OP. All callers changed. Handle COMPARE_BY_PIECES.
(class pieces_addr); New.
(pieces_addr::pieces_addr, pieces_addr::decide_autoinc,
pieces_addr::adjust, pieces_addr::increment_address,
pieces_addr::maybe_predec, pieces_addr::maybe_postinc): New member
functions for it.
(class op_by_pieces_d): New.
(op_by_pieces_d::op_by_pieces_d, op_by_pieces_d::run): New member
functions for it.
(class move_by_pieces_d, class compare_by_pieces_d,
class store_by_pieces_d): New subclasses of op_by_pieces_d.
(move_by_pieces_d::prepare_mode, move_by_pieces_d::generate,
move_by_pieces_d::finish_endp, store_by_pieces_d::prepare_mode,
store_by_pieces_d::generate, store_by_pieces_d::finish_endp,
compare_by_pieces_d::generate, compare_by_pieces_d::prepare_mode,
compare_by_pieces_d::finish_mode): New member functions.
(compare_by_pieces, emit_block_cmp_via_cmpmem): New static
functions.
(expand_cmpstrn_or_cmpmem): Moved here from builtins.c.
(emit_block_cmp_hints): New function.
(move_by_pieces, store_by_pieces, clear_by_pieces): Rewrite to just
use the newly defined classes.
* expr.h (by_pieces_constfn): New typedef.
(can_store_by_pieces, store_by_pieces): Use it in arg declarations.
(emit_block_cmp_hints, expand_cmpstrn_or_cmpmem): Declare.
(move_by_pieces_ninsns): Don't declare.
(can_move_by_pieces): Change return value to bool.
* target.def (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): Update docs.
(compare_by_pieces_branch_ratio): New hook.
* target.h (enum by_pieces_operation): Add COMPARE_BY_PIECES.
(by_pieces_ninsns): Declare.
* targethooks.c (default_use_by_pieces_infrastructure_p): Handle
COMPARE_BY_PIECES.
(default_compare_by_pieces_branch_ratio): New function.
* targhooks.h (default_compare_by_pieces_branch_ratio): Declare.
* doc/tm.texi.in (STORE_MAX_PIECES, COMPARE_MAX_PIECES): Document.
* doc/tm.texi: Regenerate.
* tree-ssa-strlen.c: Include "builtins.h".
(handle_builtin_memcmp): New static function.
(strlen_optimize_stmt): Call it for BUILT_IN_MEMCMP.
* tree.c (build_common_builtin_nodes): Create __builtin_memcmp_eq.
testsuite/
PR tree-optimization/52171
* gcc.dg/pr52171.c: New test.
* gcc.target/i386/pr52171.c: New test.
From-SVN: r237069
Jan Hubicka [Fri, 3 Jun 2016 13:47:15 +0000 (15:47 +0200)]
pred-1.C: New testcase
* g++.dg/tree-ssa/pred-1.C: New testcase
* gcc.dg/tree-ssa/pred-1.c: New testcase
* cp-gimplify.c (genericize_continue_stmt): Force addition of
predict stmt.
From-SVN: r237068
Bill Schmidt [Fri, 3 Jun 2016 13:14:26 +0000 (13:14 +0000)]
re PR target/70957 (testsuite/gcc.target/powerpc/vsx-elemrev-4.c fails on power7)
2016-06-03 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR target/70957
* gcc.target/powerpc/vsx-elemrev-2.c: Require p9vector hardware
support.
* gcc.target/powerpc/vsx-elemrev-4.c: Likewise.
From-SVN: r237066
Alan Hayward [Fri, 3 Jun 2016 13:04:01 +0000 (13:04 +0000)]
[3/3] No need to vectorize simple only-live stmts
2016-06-03 Alan Hayward <alan.hayward@arm.com>
[3/3] No need to vectorize simple only-live stmts
gcc/
* tree-vect-stmts.c (vect_stmt_relevant_p): Do not vectorize non live
relevant stmts which are simple and invariant.
* tree-vect-loop.c (vectorizable_live_operation): Check relevance
instead of simple and invariant
testsuite/
* gcc.dg/vect/vect-live-slp-5.c: Remove dg check.
From-SVN: r237065
Alan Hayward [Fri, 3 Jun 2016 13:00:06 +0000 (13:00 +0000)]
[2/3] Vectorize inductions that are live after the loop
2016-06-03 Alan Hayward <alan.hayward@arm.com>
[2/3] Vectorize inductions that are live after the loop
gcc/
* tree-vect-loop.c (vect_analyze_loop_operations): Allow live stmts.
(vectorizable_reduction): Check for new relevant state.
(vectorizable_live_operation): vectorize live stmts using
BIT_FIELD_REF. Remove special case for gimple assigns stmts.
* tree-vect-stmts.c (is_simple_and_all_uses_invariant): New function.
(vect_stmt_relevant_p): Check for stmts which are only used live.
(process_use): Use of a stmt does not inherit it's live value.
(vect_mark_stmts_to_be_vectorized): Simplify relevance inheritance.
(vect_analyze_stmt): Check for new relevant state.
* tree-vectorizer.h (vect_relevant): New entry for a stmt which is used
outside the loop, but not inside it.
testsuite/
* gcc.dg/tree-ssa/pr64183.c: Ensure test does not vectorize.
* testsuite/gcc.dg/vect/no-scevccp-vect-iv-2.c: Remove xfail.
* gcc.dg/vect/vect-live-1.c: New test.
* gcc.dg/vect/vect-live-2.c: New test.
* gcc.dg/vect/vect-live-3.c: New test.
* gcc.dg/vect/vect-live-4.c: New test.
* gcc.dg/vect/vect-live-5.c: New test.
* gcc.dg/vect/vect-live-slp-1.c: New test.
* gcc.dg/vect/vect-live-slp-2.c: New test.
* gcc.dg/vect/vect-live-slp-3.c: New test.
From-SVN: r237064
Alan Hayward [Fri, 3 Jun 2016 12:48:21 +0000 (12:48 +0000)]
[1/3] Split vect_get_vec_def_for_operand into two
2016-06-03 Alan Hayward <alan.hayward@arm.com>
[1/3] Split vect_get_vec_def_for_operand into two
gcc/
* tree-vectorizer.h (vect_get_vec_def_for_operand_1): New
* tree-vect-stmts.c (vect_get_vec_def_for_operand_1): New
(vect_get_vec_def_for_operand): Split out code.
From-SVN: r237063
Segher Boessenkool [Fri, 3 Jun 2016 12:33:07 +0000 (14:33 +0200)]
rs6000: Remove the ancient mfcr peepholes
These peepholes replace two mfcr;mask sequences by one mfcr;mask;mask
sequence. On modern cpus, the original mfcr's were actually mfocrf,
but the new insn is an actual heavy-weight mfcr. This is very bad
for performance.
The comment says there is a three cycle delay between two consecutive
mfcr insns. This may have been true on rios, and it's true on 604,
but on 603, 750, 7400 it is just a single cycle (on 7450 it is two).
This is also a define_peephole, and we should get rid of those.
So this patch just removes the peepholes; the benefit is marginal at
best, and it so very hurts in other cases.
* config/rs6000/rs6000.md (define_peepholes for two mfcr's): Delete.
From-SVN: r237062
Alan Hayward [Fri, 3 Jun 2016 12:12:41 +0000 (12:12 +0000)]
2016-06-03 Alan Hayward <alan.hayward@arm.com>
gcc/
* tree-vect-stmts.c (vectorizable_call) Remove GOMP_SIMD_LANE code.
From-SVN: r237061
Kyrylo Tkachov [Fri, 3 Jun 2016 08:43:28 +0000 (08:43 +0000)]
[ARM][obvious] Fix typos in *thumb1_mulsi3 comment
* config/arm/thumb1.md (*thumb1_mulsi3): Fix typos in comment.
From-SVN: r237058
Jose E. Marchesi [Fri, 3 Jun 2016 08:35:24 +0000 (10:35 +0200)]
* MAINTAINERS (Write After Approval): Add myself.
From-SVN: r237055
Jakub Jelinek [Fri, 3 Jun 2016 08:03:11 +0000 (10:03 +0200)]
re PR middle-end/71387 (ICE in emit_move_insn, at expr.c:3418 with -Og)
PR middle-end/71387
* cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): If redirecting
to noreturn e->callee->decl that has void return type and void
arguments, adjust gimple_call_fntype and remove lhs even if it had
previously addressable type.
* g++.dg/opt/pr71387.C: New test.
From-SVN: r237053
Jeff Law [Fri, 3 Jun 2016 05:20:16 +0000 (23:20 -0600)]
re PR tree-optimization/71328 (ice in verify_jump_thread)
PR tree-optimization/71328
* tree-ssa-threadupdate.c (duplicate_thread_path): Fix off-by-one
error when checking for a jump back onto the copied path. */
PR tree-optimization/71328
* gcc.c-torture/compile/pr71328.c: New test.
From-SVN: r237052
Jerry DeLisle [Fri, 3 Jun 2016 01:25:31 +0000 (01:25 +0000)]
re PR fortran/52393 (I/O: "READ format" statement with parenthesed default-char-expr)
2016-06-02 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/52393
* gfortran.dg/fmt_read_3.f90: Fix typo.
* gfortran.dg/fmt_read_4.f90: New test.
From-SVN: r237051
GCC Administrator [Fri, 3 Jun 2016 00:16:16 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r237050
Paolo Carlini [Thu, 2 Jun 2016 23:10:33 +0000 (23:10 +0000)]
decl.c (xref_tag_1): Change pairs of errors to error + inform.
/cp
2016-06-02 Paolo Carlini <paolo.carlini@oracle.com>
* decl.c (xref_tag_1): Change pairs of errors to error + inform.
(start_enum): Likewise.
* parser.c (cp_parser_class_head): Likewise.
/testsuite
2016-06-02 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/cpp0x/forw_enum10.C: Adjust for dg-message vs dg-error.
* g++.dg/cpp0x/forw_enum6.C: Likewise.
* g++.dg/cpp0x/forw_enum8.C: Likewise.
* g++.dg/cpp0x/override2.C: Likewise.
* g++.dg/parse/crash5.C: Likewise.
* g++.dg/parse/error16.C: Likewise.
* g++.dg/parse/error27.C: Likewise.
* g++.dg/template/qualttp15.C: Likewise.
* g++.dg/template/redecl4.C: Likewise.
* g++.old-deja/g++.other/crash39.C: Likewise.
* g++.old-deja/g++.other/struct1.C: Likewise.
* g++.old-deja/g++.pt/m9a.C: Likewise.
* g++.old-deja/g++.pt/memclass10.C: Likewise.
From-SVN: r237046
David Malcolm [Thu, 2 Jun 2016 19:27:10 +0000 (19:27 +0000)]
microblaze.c: fix warnings
gcc/ChangeLog:
* config/microblaze/microblaze.c (get_branch_target): Add return
NULL_RTX for the non-CALL_P case.
(insert_wic_for_ilb_runout): Remove unused local "wic_addr1".
(insert_wic): Remove unused local "j".
From-SVN: r237044
Jakub Jelinek [Thu, 2 Jun 2016 16:36:04 +0000 (18:36 +0200)]
re PR c++/71372 (C++ FE drops TREE_THIS_VOLATILE in cp_fold on all tcc_reference trees)
PR c++/71372
* cp-gimplify.c (cp_fold): For INDIRECT_REF, if the folded expression
is INDIRECT_REF or MEM_REF, copy over TREE_READONLY, TREE_SIDE_EFFECTS
and TREE_THIS_VOLATILE flags. For ARRAY_REF and ARRAY_RANGE_REF, copy
over TREE_READONLY, TREE_SIDE_EFFECTS and TREE_THIS_VOLATILE flags
to the newly built tree.
* c-c++-common/pr71372.c: New test.
From-SVN: r237041
Martin Liska [Thu, 2 Jun 2016 16:18:05 +0000 (18:18 +0200)]
Fix display name of PRED_FORTRAN_FAIL_IO
* predict.def: Fix typo in PRED_FORTRAN_FAIL_IO display name.
From-SVN: r237040
Jakub Jelinek [Thu, 2 Jun 2016 16:17:15 +0000 (18:17 +0200)]
source_date_epoch-1.c (main): Test __DATE__ and __TIME__ strings with __builtin_strcmp instead of printf and...
* gcc.dg/cpp/source_date_epoch-1.c (main): Test __DATE__ and
__TIME__ strings with __builtin_strcmp instead of printf and
dg-output.
From-SVN: r237039
H.J. Lu [Thu, 2 Jun 2016 13:46:20 +0000 (13:46 +0000)]
Update TARGET_FUNCTION_INCOMING_ARG documentation
On x86, interrupt handlers are only called by processors which push
interrupt data onto stack at the address where the normal return address
is. Since interrupt handlers must access interrupt data via pointers so
that they can update interrupt data, the pointer argument is passed as
"argument pointer - word".
TARGET_FUNCTION_INCOMING_ARG defines how callee sees its argument.
Normally it returns REG, NULL, or CONST_INT. This patch adds arbitrary
address computation based on hard register, which can be forced into a
register, to the list.
When copying an incoming argument onto stack, assign_parm_setup_stack
has:
if (argument in memory)
copy argument in memory to stack
else
move argument to stack
Since an arbitrary address computation may be passed as an argument, we
change it to:
if (argument in memory)
copy argument in memory to stack
else
{
if (argument isn't in register)
force argument into a register
move argument to stack
}
* function.c (assign_parm_setup_stack): Force source into a
register if needed.
* target.def (function_incoming_arg): Update documentation to
allow arbitrary address computation based on hard register.
* doc/tm.texi: Regenerated.
Co-Authored-By: Julia Koval <julia.koval@intel.com>
From-SVN: r237037
Martin Liska [Thu, 2 Jun 2016 12:51:57 +0000 (14:51 +0200)]
Fix first match heuristics
* predict.c (combine_predictions_for_bb): Fix first match in
cases where a first predictor contains more than one occurence
in list of predictors. Take the best value in such case.
* gcc.dg/predict-9.c: New test.
From-SVN: r237036
Jakub Jelinek [Thu, 2 Jun 2016 12:34:42 +0000 (14:34 +0200)]
gcc-dg.exp (cleanup-after-saved-dg-test): Add missing global set_compiler_env_var and global saved_compiler_env_var.
* lib/gcc-dg.exp (cleanup-after-saved-dg-test): Add missing
global set_compiler_env_var and global saved_compiler_env_var.
From-SVN: r237035
Kyrylo Tkachov [Thu, 2 Jun 2016 12:26:42 +0000 (12:26 +0000)]
[rtlanal] Fix rtl-optimization/71295
PR rtl-optimization/71295
* rtlanal.c (subreg_get_info): If taking a subreg at the requested
offset would go over the size of the inner mode reject it.
* gcc.c-torture/compile/pr71295.c: New test.
From-SVN: r237034
Aaron Conole [Thu, 2 Jun 2016 12:22:01 +0000 (12:22 +0000)]
On behalf of Aaron Conole <aconole@redhat.com>
On behalf of Aaron Conole <aconole@redhat.com>
* libgcov-driver-system.c (__gcov_error_file): New.
(get_gcov_error_file): New.
(gcov_error): Use and set __gcov_error_file.
(gcov_error_exit): New.
* libgcov-driver.c (gcov_exit): Call gcov_error_exit.
From-SVN: r237033
Jakub Jelinek [Thu, 2 Jun 2016 11:02:26 +0000 (13:02 +0200)]
sse.md (*vec_concatv4si): Use v=v,v instead of x=x,x and v=v,m instead of x=x,m.
* config/i386/sse.md (*vec_concatv4si): Use v=v,v instead of
x=x,x and v=v,m instead of x=x,m.
* gcc.target/i386/avx512vl-concatv4si-1.c: New test.
From-SVN: r237031
Jakub Jelinek [Thu, 2 Jun 2016 11:01:31 +0000 (13:01 +0200)]
sse.md (*vec_concatv2si_sse4_1): Add avx512dq v=Yv,rm alternative.
* config/i386/sse.md (*vec_concatv2si_sse4_1): Add avx512dq v=Yv,rm
alternative. Change x=x,x alternative to v=Yv,Yv and x=rm,C
alternative to v=rm,C.
* gcc.target/i386/avx512dq-concatv2si-1.c: New test.
* gcc.target/i386/avx512vl-concatv2si-1.c: New test.
From-SVN: r237030
Jakub Jelinek [Thu, 2 Jun 2016 09:43:52 +0000 (11:43 +0200)]
sse.md (*vec_concatv2di): Add x86_avx512dq v=Yv,rm alternative.
* config/i386/sse.md (*vec_concatv2di): Add x86_avx512dq v=Yv,rm
alternative. Change x=xm,C alternative to v=vm,C, x=x,x alternative
to v=Yv,Yv and x=x,m to v=v,m. Use maybe_evex prefix attribute
instead of vex for the last two above mentioned alternatives.
* gcc.target/i386/avx512dq-concatv2di-1.c: New test.
* gcc.target/i386/avx512vl-concatv2di-1.c: New test.
* gcc.target/i386/sse2-init-v2di-2.c: Adjust expected vec_concatv2di
alternative number.
From-SVN: r237028
Kyrylo Tkachov [Thu, 2 Jun 2016 08:54:15 +0000 (08:54 +0000)]
Fix fallout from: [ARM] PR target/70830: Avoid POP-{reglist}^ when returning from interrupt handlers
PR target/70830
* config/arm/arm.c (arm_output_multireg_pop): Guard "pop" on update.
From-SVN: r237027
Segher Boessenkool [Thu, 2 Jun 2016 07:19:07 +0000 (09:19 +0200)]
rs6000: Correct the "length" attribute for trunctddd2
* config/rs6000/dfp.md (trunctddd2): Correct the "length" attribute.
From-SVN: r237026
GCC Administrator [Thu, 2 Jun 2016 00:16:17 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r237025
Michael Meissner [Wed, 1 Jun 2016 22:24:29 +0000 (22:24 +0000)]
Fix ChangeLog entry:
2016-05-24 Michael Meissner <meissner@linux.vnet.ibm.com>
* config/rs6000/altivec.md (VNEG iterator): New iterator for
VNEGW/VNEGD instructions.
(p9_neg<mode>2): New insns for ISA 3.0 VNEGW/VNEGD.
(neg<mode>2): Add expander for V2DImode added in ISA 2.07, and
support for ISA 3.0 VNEGW/VNEGD instructions.
From-SVN: r237020
David Malcolm [Wed, 1 Jun 2016 21:38:46 +0000 (21:38 +0000)]
rl78.c: fix warning
gcc/ChangeLog:
* config/rl78/rl78.c (rl78_expand_prologue): Convert local
from int to unsigned.
From-SVN: r237017
Cesar Philippidis [Wed, 1 Jun 2016 20:37:44 +0000 (13:37 -0700)]
re PR c/70688 (bogus OpenACC data clause errors involving reductions)
PR c/70688
* pr70688.c: New file.
From-SVN: r237011
Matthias Klose [Wed, 1 Jun 2016 20:10:48 +0000 (20:10 +0000)]
libtool-version: Bump soversion.
2016-06-01 Matthias Klose <doko@ubuntu.com>
* libtool-version: Bump soversion.
From-SVN: r237007
Michael Meissner [Wed, 1 Jun 2016 20:09:35 +0000 (20:09 +0000)]
re PR target/71186 (PowerPC64: Autovectorised code hits ICE with -O3 -mpower9 -mlra)
[gcc]
2016-05-31 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/71186
* config/rs6000/vsx.md (xxspltib_<mode>_nosplit): Add alternatives
for loading up all 0's or all 1's.
[gcc/testsuite]
2016-05-31 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/71186
* gcc.target/powerpc/pr71186.c: New test.
Index: gcc/config/rs6000/vsx.md
===================================================================
--- gcc/config/rs6000/vsx.md (.../svn+ssh://meissner@gcc.gnu.org/svn/gcc/trunk/gcc/config/rs6000) (revision 236935)
+++ gcc/config/rs6000/vsx.md (.../gcc/config/rs6000) (working copy)
@@ -776,8 +776,8 @@ (define_insn "xxspltib_v16qi"
[(set_attr "type" "vecperm")])
(define_insn "xxspltib_<mode>_nosplit"
- [(set (match_operand:VSINT_842 0 "vsx_register_operand" "=wa")
- (match_operand:VSINT_842 1 "xxspltib_constant_nosplit" "wE"))]
+ [(set (match_operand:VSINT_842 0 "vsx_register_operand" "=wa,wa")
+ (match_operand:VSINT_842 1 "xxspltib_constant_nosplit" "jwM,wE"))]
"TARGET_P9_VECTOR"
{
rtx op1 = operands[1];
[gcc]
2016-05-31 Michael Meissner <meissner@linux.vnet.ibm.com>
* config/rs6000/vsx.md (vsx_splat_<mode>, V2DI/V2DF): Simplify
alternatives, eliminating preferred register class. Add support
for the MTVSRDD instruction in ISA 3.0.
(vsx_splat_v4si_internal): Use splat_input_operand instead of
reg_or_indexed_operand.
(vsx_splat_v4sf_internal): Likewise.
[gcc/testsuite]
2016-05-31 Michael Meissner <meissner@linux.vnet.ibm.com>
* gcc.target/powerpc/p9-splat-4.c: New test.
From-SVN: r237006
Jerry DeLisle [Wed, 1 Jun 2016 17:06:50 +0000 (17:06 +0000)]
re PR fortran/52393 (I/O: "READ format" statement with parenthesed default-char-expr)
2016-06-01 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/52393
* io.c (match_io): For READ, try to match a default character
expression. If found, set the dt format expression to this,
otherwise go back and try control list.
PR fortran/52393
* gfortran.dg/fmt_read_3.f90: New test.
From-SVN: r237003
Thomas Preud'homme [Wed, 1 Jun 2016 16:54:18 +0000 (16:54 +0000)]
sourcebuild.texi (arm_acq_rel): Document new effective target.
2016-06-01 Thomas Preud'homme <thomas.preudhomme@arm.com>
gcc/
* doc/sourcebuild.texi (arm_acq_rel): Document new effective target.
gcc/testsuite/
* lib/target-supports.exp (check_effective_target_arm_acq_rel): New
procedure.
From-SVN: r237002
Eduard Sanou [Wed, 1 Jun 2016 16:42:41 +0000 (16:42 +0000)]
c-common.c (get_source_date_epoch): Rename to cb_get_source_date_epoch.
gcc/c-family/ChangeLog:
2016-05-13 Eduard Sanou <dhole@openmailbox.org>
* c-common.c (get_source_date_epoch): Rename to
cb_get_source_date_epoch.
* c-common.c (cb_get_source_date_epoch): Use a single generic erorr
message when the parsing fails. Use error_at instead of fatal_error.
* c-common.h (get_source_date_epoch): Rename to
cb_get_source_date_epoch.
* c-common.h (cb_get_source_date_epoch): Prototype.
* c-common.h (MAX_SOURCE_DATE_EPOCH): Define.
* c-common.h (c_omp_region_type): Remove trailing comma.
* c-lex.c (init_c_lex): Set cb->get_source_date_epoch callback.
* c-lex.c (c_lex_with_flags): Remove initialization of
pfile->source_date_epoch.
gcc/ChangeLog:
2016-05-13 Eduard Sanou <dhole@openmailbox.org>
* doc/cppenv.texi: Note that the `%s` in `date` is a non-standard
extension.
* gcc.c (driver_handle_option): Call set_source_date_epoch_envvar.
* gcc.c (set_source_date_epoch_envvar): New function, sets
the SOURCE_DATE_EPOCH environment variable to the current time.
gcc/testsuite/ChangeLog:
2016-05-13 Eduard Sanou <dhole@openmailbox.org>
* gcc.dg/cpp/source_date_epoch-1.c: New file, test the proper
behaviour of the macros __DATE__ and __TIME__ when SOURCE_DATE_EPOCH
env var is set.
* gcc.dg/cpp/source_date_epoch-2.c: New file, test the error output
when parsing the SOURCE_DATE_EPOCH env var, and make sure it is only
shown once.
* lib/gcc-dg.exp (dg-set-compiler-env-var): New function, set env vars
during compilation.
* lib/gcc-dg.exp (restore-compiler-env-var): New function, restore env
vars set by dg-set-compiler-env-var.
libcpp/ChangeLog:
2016-05-13 Eduard Sanou <dhole@openmailbox.org>
* include/cpplib.h (cpp_callbacks): Add get_source_date_epoch
callback.
* include/cpplib.h (cpp_init_source_date_epoch): Remove prototype.
* init.c (cpp_init_source_date_epoch): Remove function.
* init.c (cpp_create_reader): Initialize pfile->source_date_epoch.
* internal.h (cpp_reader): Extend comment about source_date_epoch.
* macro.c (_cpp_builtin_macro_text): Use get_source_date_epoch
callback only once, read pfile->source_date_epoch on future passes.
Check that get_source_date_epoch callback is not NULL.
From-SVN: r237001
Eric Botcazou [Wed, 1 Jun 2016 16:06:10 +0000 (16:06 +0000)]
tree-vect-loop.c (vect_determine_vectorization_factor): Also compute the factor for live Phi nodes.
* tree-vect-loop.c (vect_determine_vectorization_factor): Also compute
the factor for live Phi nodes.
From-SVN: r236999
Jan Hubicka [Wed, 1 Jun 2016 15:26:46 +0000 (17:26 +0200)]
loop-dolop.c (doloop_optimize): Us likely max iteration bound.
* loop-dolop.c (doloop_optimize): Us likely max iteration bound.
* tree-parloops.c (parallelize_loops): likewise.
* tree-ssa-loop-unswitch.c (tree_unswitch_single_loop,
tree_unswitch_outer_loop): likewise.
From-SVN: r236998
Paul Thomas [Wed, 1 Jun 2016 14:30:00 +0000 (14:30 +0000)]
re PR fortran/71156 (PURE interface/definition inconsistency: accepts invalid, rejects valid)
2016-06-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/71156
* decl.c (copy_prefix): Add checks that the module procedure
declaration prefixes are compliant with the interface. Invert
order of existing elemental and pure checks.
* resolve.c (resolve_fl_procedure): Invert order of elemental
and pure errors.
2016-06-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/71156
* gfortran.dg/submodule_14.f08: Add missing recursive prefix
to the module procedure declaration.
* gfortran.dg/submodule_16.f08: New test.
From-SVN: r236996
Jakub Jelinek [Wed, 1 Jun 2016 14:24:02 +0000 (16:24 +0200)]
re PR middle-end/71371 (ICE with OpenMP taskloop and addressable iterator)
PR middle-end/71371
* gimplify.c (gimplify_omp_for): Temporarily clear gimplify_omp_ctxp
around creation of the temporary.
* c-c++-common/gomp/pr71371.c: New test.
From-SVN: r236994
Richard Biener [Wed, 1 Jun 2016 14:05:22 +0000 (14:05 +0000)]
re PR tree-optimization/71366 (ICE on valid code at -O3 on x86_64-linux-gnu: Segmentation fault)
2016-06-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/71366
* tree-ssa-loop-ivcanon.c (edges_to_remove): New global.
(unloop_loops): Move removing edges here ...
(try_unroll_loop_completely): ... from here.
(try_peel_loop): ... and here.
(tree_unroll_loops_completely_1): Track parent loops via
bitmap of header BBs.
(tree_unroll_loops_completely): Adjust for that.
* gcc.dg/torture/pr71366-1.c: New testcase.
* gcc.dg/torture/pr71366-2.c: Likewise.
From-SVN: r236993
Kelvin Nilsen [Wed, 1 Jun 2016 14:01:10 +0000 (14:01 +0000)]
altivec.h (vec_slv): New macro.
gcc/ChangeLog:
2016-06-01 Kelvin Nilsen <kelvin@gcc.gnu.org>
* config/rs6000/altivec.h (vec_slv): New macro.
(vec_srv): New macro.
* config/rs6000/altivec.md (UNSPEC_VSLV): New value.
(UNSPEC_VSRV): New value.
(vslv): New insn.
(vsrv): New insn.
* config/rs6000/rs6000-builtin.def (vslv): New builtin definition.
(vsrv): New builtin definition.
* config/rs6000/rs6000-c.c (P9V_BUILTIN_VSLV): Macro expansion to
define argument types for new builtin.
(P9V_BUILTIN_VSRV): Macro expansion to define argument types for
new builtin.
* doc/extend.texi: Document the new vec_vslv and vec_srv built-in
functions.
gcc/testsuite/ChangeLog:
2016-06-01 Kelvin Nilsen <kelvin@gcc.gnu.org>
* gcc.target/powerpc/vslv-0.c: New test.
* gcc.target/powerpc/vslv-1.c: New test.
* gcc.target/powerpc/vsrv-0.c: New test.
* gcc.target/powerpc/vsrv-1.c: New test.
From-SVN: r236992
Uros Bizjak [Wed, 1 Jun 2016 13:44:37 +0000 (15:44 +0200)]
re PR target/67310 ([PATCH] gcc 4.8.4 fails to compile with -march=native on VIA nano CPU)
PR target/67310
* config/i386/driver-i386.c (host_detect_local_cpu): Correctly
detect processor family for signature_CENTAUR_ebx.
<case PROCESSOR_I486>: Pass c3, winchip2 or winchip-c6 for
signature_CENTAUR_ebx.
<case PROCESSOR _PENTIUMPRO>: Pass c3-2 for signature_CENTAUR_ebx.
<default>: Pass x86-64 for has_longmode.
Co-Authored-By: Jocelyn Mayer <l_indien@magic.fr>
From-SVN: r236991
Nathan Sidwell [Wed, 1 Jun 2016 13:41:19 +0000 (13:41 +0000)]
nvptx.c (nvptx_assemble_undefined_decl): Reject undefined weak.
* config/nvptx/nvptx.c (nvptx_assemble_undefined_decl): Reject
undefined weak.
testsuite/
* c-c++-common/torture/pr57945.c: Add expected PTX error.
* gcc.target/nvptx/weak.c: New.
From-SVN: r236990
Richard Biener [Wed, 1 Jun 2016 13:08:24 +0000 (13:08 +0000)]
re PR tree-optimization/71261 (Trunk GCC hangs on knl and broadwell targets)
2016-06-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/71261
* tree-vect-patterns.c (check_bool_pattern): Gather a hash-set
of stmts successfully put in the bool pattern. Remove
single-use restriction.
(adjust_bool_pattern_cast): Add cast at the use site via the
pattern def sequence.
(adjust_bool_pattern): Remove recursion, maintain a hash-map
of patterned defs. Use the pattern def seqence instead of
multiple independent patterns.
(sort_after_uid): New qsort compare function.
(adjust_bool_stmts): New function to process stmts in the bool
pattern in IL order.
(vect_recog_bool_pattern): Adjust.
* tree-if-conv.c (ifcvt_split_def_stmt): Remove.
(ifcvt_walk_pattern_tree): Likewise.
(stmt_is_root_of_bool_pattern): Likewise.
(ifcvt_repair_bool_pattern): Likewise.
(tree_if_conversion): Do not call ifcvt_repair_bool_pattern.
* gcc.dg/torture/vect-bool-1.c: New testcase.
From-SVN: r236989
Jakub Jelinek [Wed, 1 Jun 2016 12:21:38 +0000 (14:21 +0200)]
parse.c (case_decl): Move ST_OMP_* to ...
* parse.c (case_decl): Move ST_OMP_* to ...
(case_omp_decl): ... here, new macro.
(verify_st_order): For case_omp_decl, complain about
p->state >= ORDER_EXEC, but don't change p->state otherwise.
* gfortran.dg/gomp/order-1.f90: New test.
* gfortran.dg/gomp/order-2.f90: New test.
From-SVN: r236987
Jan Hubicka [Wed, 1 Jun 2016 12:01:17 +0000 (14:01 +0200)]
loop-unroll.c (decide_unroll_constant_iterations, [...]): Use likely upper bounds.
* loop-unroll.c (decide_unroll_constant_iterations,
decide_unroll_runtime_iterations, decide_unroll_stupid): Use
likely upper bounds.
* loop-iv.c (find_simple_exit): Dump likely upper bounds.
* gcc.dg/unroll-6.c: Update template.
* gcc.dg/unroll-7.c: New testcase.
* gcc.dg/unroll-8.c: New testcase.
From-SVN: r236986
Thomas Schwinge [Wed, 1 Jun 2016 11:55:35 +0000 (13:55 +0200)]
Remove the unused OMP_CLAUSE_DEVICE_RESIDENT
gcc/
* tree-core.h (enum omp_clause_code): Remove
OMP_CLAUSE_DEVICE_RESIDENT. Adjust all users.
From-SVN: r236985
Kyrylo Tkachov [Wed, 1 Jun 2016 10:44:07 +0000 (10:44 +0000)]
[ARM] Use proper output modifier for DImode register in store exclusive patterns
* config/arm/sync.md (arm_store_exclusive<mode>):
Use 'H' output modifier on operands[2] rather than creating a new
entry in out-of-bounds memory of the operands array.
(arm_store_release_exclusivedi): Likewise.
From-SVN: r236984
Kyrylo Tkachov [Wed, 1 Jun 2016 10:37:27 +0000 (10:37 +0000)]
[ARM] Tie operand 1 to operand 0 in AESMC pattern when fusing AES/AESMC
* config/arm/arm.c (arm_fusion_enabled_p): New function.
* config/arm/arm-protos.h (arm_fusion_enabled_p): Declare prototype.
* config/arm/crypto.md (crypto_<crypto_pattern>, CRYPTO_UNARY):
Add "=w,0" alternative. Enable it when AES/AESMC fusion is enabled.
From-SVN: r236982
Eric Botcazou [Wed, 1 Jun 2016 10:35:30 +0000 (10:35 +0000)]
tree-vect-loop.c (vect_determine_vectorization_factor): Also take into account live statements for mask producers.
* tree-vect-loop.c (vect_determine_vectorization_factor): Also take
into account live statements for mask producers.
From-SVN: r236981
Richard Biener [Wed, 1 Jun 2016 10:33:35 +0000 (10:33 +0000)]
re PR tree-optimization/71311 (spec2006 test case 416.gamess fails since r235817)
2016-06-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/71311
* match.pd (@0 < @1 && @0 < @2 -> @0 < min(@1,@2)): Add :c and
restrict to non-INTEGER_CST @0.
From-SVN: r236980
Richard Biener [Wed, 1 Jun 2016 10:31:30 +0000 (10:31 +0000)]
match.pd ((A & B) - (A & ~B) -> B - (A ^ B)): Add missing :c.
2016-06-01 Richard Biener <rguenther@suse.de>
* match.pd ((A & B) - (A & ~B) -> B - (A ^ B)): Add missing :c.
(relational patterns): Use :c to avoid pattern duplications.
From-SVN: r236979
Paolo Carlini [Wed, 1 Jun 2016 09:48:05 +0000 (09:48 +0000)]
re PR c++/66635 (g++ ICE when compiling constexpr code with comma operator)
2016-06-01 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/66635
* g++.dg/cpp0x/constexpr-ice16.C: New.
From-SVN: r236978
Richard Biener [Wed, 1 Jun 2016 09:00:57 +0000 (09:00 +0000)]
genmatch.c (comparison_code_p): New predicate.
2016-06-01 Richard Biener <rguenther@suse.de>
* genmatch.c (comparison_code_p): New predicate.
(swap_tree_comparison): New function.
(commutate): Add for_vec parameter to append new for entries.
Support commutating relational operators by swapping it alongside
operands.
(lower_commutative): Adjust.
(dt_simplify::gen): Do not pass artificial operators to gen
functions.
(decision_tree::gen): Do not add artificial operators as parameters.
(parser::parse_expr): Verify operator commutativity when :c is
applied. Allow :C to override this.
* match.pd: Adjust patterns to use :C instead of :c where required.
From-SVN: r236977
Simon Wright [Wed, 1 Jun 2016 07:43:57 +0000 (07:43 +0000)]
re PR ada/71358 (GNAT.Command_Line.Getopt fails if there are no switches)
PR ada/71358
* g-comlin.adb (Display_Section_Help): Do not dereference
Config.Switches if it's null.
(Getopt): Likewise.
From-SVN: r236975
Patrick Palka [Wed, 1 Jun 2016 02:37:50 +0000 (02:37 +0000)]
re PR tree-optimization/71314 (test case gcc.dg/tree-ssa/ssa-thread-14.c fails starting with its introduction in r235653)
Fix PR tree-optimization/71314
gcc/testsuite/ChangeLog:
PR tree-optimization/71314
* gcc.dg/tree-ssa/ssa-thread-14.c: Adjust target selector. Pass
-mbranch-cost=2.
From-SVN: r236974
Patrick Palka [Wed, 1 Jun 2016 02:36:27 +0000 (02:36 +0000)]
re PR tree-optimization/71077 (gcc -lto raises ICE)
Fix PR tree-optimization/71077
gcc/ChangeLog:
PR tree-optimization/71077
* tree-ssa-threadedge.c (simplify_control_stmt_condition_1): In
the combining step, use boolean_false_node and boolean_true_node
as the designated false/true return values.
gcc/testsuite/ChangeLog:
PR tree-optimization/71077
* gcc.dg/tree-ssa/pr71077.c: New test.
From-SVN: r236973
GCC Administrator [Wed, 1 Jun 2016 00:16:20 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r236972
Jan Hubicka [Tue, 31 May 2016 23:33:08 +0000 (01:33 +0200)]
predict-lop-exit-1.C: Update template for new predictor name.
* g++.d/predict-lop-exit-1.C: Update template for new predictor name.
* g++.d/predict-lop-exit-2.C: Update template for new predictor name.
* g++.d/predict-lop-exit-2.C: Update template for new predictor name.
* predict.def (PRED_LOOP_EXTRA_EXIT): Define.
* predict.c (predict_iv_comparison): Also check PRED_LOOP_EXTRA_EXIT.
(predict_extra_loop_exits): Use PRED_LOOP_EXTRA_EXIT instead of
PRED_LOOP_EXIT.
From-SVN: r236968
Jan Hubicka [Tue, 31 May 2016 23:23:40 +0000 (01:23 +0200)]
invoke.texi (-frename-registers): Drop -fpeel-loops from list of flags impliying the register renaming.
* doc/invoke.texi (-frename-registers): Drop -fpeel-loops from list
of flags impliying the register renaming.
* toplev.c (process_options): Do not imply flag_rename_registers with
loop peeling.
From-SVN: r236966
Jason Merrill [Tue, 31 May 2016 19:49:22 +0000 (15:49 -0400)]
* pt.c (instantiate_decl): Avoid recalculation.
From-SVN: r236947
Jason Merrill [Tue, 31 May 2016 19:49:16 +0000 (15:49 -0400)]
PR c++/60095 - partial specialization of variable templates
PR c++/69515
PR c++/69009
* pt.c (instantiate_template_1): Don't put the partial
specialization in DECL_TI_TEMPLATE.
(partial_specialization_p, impartial_args): Remove.
(regenerate_decl_from_template): Add args parm.
(instantiate_decl): Look up the partial specialization again.
From-SVN: r236946
Jason Merrill [Tue, 31 May 2016 19:16:26 +0000 (15:16 -0400)]
PR c++/71227 - specializing hidden friend
* pt.c (check_explicit_specialization): Give better diagnostic about
specializing a hidden friend.
From-SVN: r236941
Eric Botcazou [Tue, 31 May 2016 18:59:36 +0000 (18:59 +0000)]
re PR ada/71317 (Compiling gnat for rtems fails at s-taprop.adb)
* s-osinte-kfreebsd-gnu.ads (clock_getres): Define.
(Get_Page_Size): Remove duplicate and return int.
PR ada/71317
* s-osinte-rtems.ads (clock_getres): Define.
(Get_Page_Size): Remove duplicate and return int.
From-SVN: r236938
Paolo Carlini [Tue, 31 May 2016 17:17:29 +0000 (17:17 +0000)]
re PR c++/71248 (crash on in-class initializer of array of pointer to member)
/cp
2016-05-31 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/71248
* decl.c (check_static_variable_definition): Use DECL_SOURCE_LOCATION
to obtain correct locations; avoid redundant diagnostics on
out-of-class definitions.
/testsuite
2016-05-31 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/71248
* g++.dg/cpp0x/pr71248.C: New.
* g++.dg/cpp0x/auto7.C: Test column numbers too.
* g++.dg/cpp0x/constexpr-static8.C: Likewise.
* g++.dg/init/new37.C: Likewise.
* g++.dg/template/static1.C: Likewise.
* g++.dg/template/static2.C: Likewise.
From-SVN: r236931
Oleg Endo [Tue, 31 May 2016 15:57:15 +0000 (15:57 +0000)]
sh.h (ASM_OUTPUT_SYMBOL_REF): Remove macro and use the default implementation.
gcc/
* config/sh/sh.h (ASM_OUTPUT_SYMBOL_REF): Remove macro and use the
default implementation.
From-SVN: r236930
Nathan Sidwell [Tue, 31 May 2016 15:54:43 +0000 (15:54 +0000)]
* dwarf2out.c (cur_line_info_table): Add GTY marker.
From-SVN: r236929
Oleg Endo [Tue, 31 May 2016 15:49:13 +0000 (15:49 +0000)]
Remove SH5 target regs.
gcc/
* config/sh/constraints.md (b): Remove constraint.
* config/sh/predicates.md (arith_reg_operand): Remove TARGET_REGISTER_P.
* config/sh/sh-modes.def (PDI): Remove.
* config/sh/sh.c (sh_target_reg_class,
sh_optimize_target_register_callee_saved): Remove functions.
(sh_option_override): Don't set MASK_SAVE_ALL_TARGET_REGS.
(sh_expand_epilogue): Update comment.
(sh_hard_regno_mode_ok, sh_register_move_cost, calc_live_regs,
sh_secondary_reload): Remove TARGET_REGS related code.
* config/sh/sh.h (FIRST_TARGET_REG, LAST_TARGET_REG,
TARGET_REGISTER_P): Remove macros.
(SH_DBX_REGISTER_NUMBER, REG_ALLOC_ORDER): Remove target regs.
* config/sh/sh.md (PR_MEDIA_REG, T_MEDIA_REG, FR23_REG, TR0_REG,
TR1_REG, TR2_REG): Remove constants.
* config/sh/sh.opt (SAVE_ALL_TARGET_REGS): Remove.
From-SVN: r236928
Oleg Endo [Tue, 31 May 2016 15:27:54 +0000 (15:27 +0000)]
Simplify SH DImode add, sub, neg patterns.
* config/sh/sh.md (adddi3, subdi3, negdi2, abs<mode>2): Remove
define_expand patterns.
(adddi3_compact): Rename to adddi3.
(subdi3_compact): Rename to subdi3.
(*negdi2): Rename to negdi2.
(*abs<mode>2): Rename to abs<mode>2.
From-SVN: r236927
Oleg Endo [Tue, 31 May 2016 15:06:25 +0000 (15:06 +0000)]
Fix wrong-code issues of RX atomic operations.
gcc/
* config/rx/rx.md (FETCHOP_NO_MINUS): New code iterator.
(atomic_<fetchop_name>_fetchsi): Extract minus operator into ...
(atomic_sub_fetchsi): ... this new pattern.
(mvtc): Add CC_REG clobber.
From-SVN: r236926
H.J. Lu [Tue, 31 May 2016 15:00:25 +0000 (15:00 +0000)]
Scan %\[re\]di instead of %rdi
Since x32 may use 32-bit register in address, we should scan %\[re\]di
instead of %rdi.
* gcc.target/i386/avx512vl-vbroadcast-3.c: Scan %\[re\]di
instead of %rdi.
* gcc.target/i386/avx512vl-vcvtps2ph-3.c: Likewise.
From-SVN: r236925
Marek Polacek [Tue, 31 May 2016 14:55:05 +0000 (14:55 +0000)]
gimplify.c (gimplify_switch_expr): Also handle GIMPLE_TRY.
* gimplify.c (gimplify_switch_expr): Also handle GIMPLE_TRY.
* c-c++-common/Wswitch-unreachable-3.c: New test.
* g++.dg/warn/Wswitch-unreachable-1.C: New test.
From-SVN: r236924
Kyrylo Tkachov [Tue, 31 May 2016 12:35:42 +0000 (12:35 +0000)]
[AArch64] Use aarch64_fusion_enabled_p to check for insn fusion capabilities
* config/aarch64/aarch64.c (aarch_macro_fusion_pair_p): Use
aarch64_fusion_enabled_p to check for fusion capabilities.
From-SVN: r236921
Richard Biener [Tue, 31 May 2016 12:18:15 +0000 (12:18 +0000)]
re PR tree-optimization/71352 (ICE at -O1 and above on x86_64-linux-gnu: in zero_one_operation, at tree-ssa-reassoc.c:1251)
2016-05-31 Richard Biener <rguenther@suse.de>
PR tree-optimization/71352
* tree-ssa-reassoc.c (zero_one_operation): Handle op equal to
minus one and a negate.
* gcc.dg/tree-ssa/reassoc-45.c: New testcase.
From-SVN: r236920
Roger Sayle [Tue, 31 May 2016 11:30:56 +0000 (11:30 +0000)]
builtins.c (java_builtins): Use popcount* and bswap* builtins to implement bitCount() and reverseBytes()...
2016-05-31 Roger Sayle <roger@nextmovesoftware.com>
gcc/java:
* builtins.c (java_builtins): Use popcount* and bswap* builtins to
implement bitCount() and reverseBytes() methods in java.lang.Integer
and friends.
(initialize_builtins): Annotate math builtins with ECF_LEAF. Call
define_builtin for the new popcount* and bswap* builtins.
libjava:
* testsuite/libjava.lang/BuiltinBitCount.java: New test case.
* testsuite/libjava.lang/BuiltinReverseBytes.java: Likewise.
From-SVN: r236919
Alan Modra [Tue, 31 May 2016 11:08:54 +0000 (20:38 +0930)]
Don't needlessly clear xmemdup allocated memory.
* xmemdup.c (xmemdup): Use xmalloc rather than xcalloc.
From-SVN: r236917
Kyrylo Tkachov [Tue, 31 May 2016 11:04:41 +0000 (11:04 +0000)]
[AArch64] Remove aarch64_simd_attr_length_move
* config/aarch64/aarch64.c (aarch64_simd_attr_length_move): Delete.
* config/aarch64/aarch64-protos.h (aarch64_simd_attr_length_move):
Delete prototype.
* config/aarch64/iterators.md (insn_count): Add descriptive comment.
* config/aarch64/aarch64-simd.md (*aarch64_mov<mode>, VSTRUCT modes):
Remove use of aarch64_simd_attr_length_move, set length attribute
directly.
(*aarch64_be_movoi): Likewise.
(*aarch64_be_movci): Likewise.
(*aarch64_be_movxi): Likewise.
From-SVN: r236916
Jan Hubicka [Tue, 31 May 2016 10:42:59 +0000 (12:42 +0200)]
loop-init.c (gate): Do not enale RTL loop unroller with -fpeel-loops.
* loop-init.c (gate): Do not enale RTL loop unroller with -fpeel-loops.
It no longer does that.
* toplev.c (process_options): Do not enable flag_web with -fpeel-loops.
From-SVN: r236915
Wladimir J. van der Laan [Tue, 31 May 2016 10:30:03 +0000 (10:30 +0000)]
[PATCH] AARCH64: Remove spurious attribute __unused__ from NEON intrinsic
gcc/
* config/aarch64/arm_neon.h (vdupb_laneq_s8): Remove spurious
attribute __unused__.
From-SVN: r236914
Thomas Preud'homme [Tue, 31 May 2016 10:10:18 +0000 (10:10 +0000)]
arm-protos.h (arm_arch_thumb1): Declare.
2016-05-31 Thomas Preud'homme <thomas.preudhomme@arm.com>
gcc/
* config/arm/arm-protos.h (arm_arch_thumb1): Declare.
* config/arm/arm.c (arm_arch_thumb1): Define.
(arm_option_override): Initialize arm_arch_thumb1.
* config/arm/arm.h (arm_arch_thumb1): Declare.
(TARGET_ARM_ARCH_ISA_THUMB): Use arm_arch_thumb to determine if target
support Thumb-1 ISA.
gcc/testsuite/
* gcc.target/arm/armv5_thumb_isa.c: New test.
From-SVN: r236913
Martin Liska [Tue, 31 May 2016 08:52:31 +0000 (08:52 +0000)]
Make analyze_brprob.py executable.
From-SVN: r236911
Kirill Yukhin [Tue, 31 May 2016 08:05:24 +0000 (08:05 +0000)]
AVX-512. Limit constraint for scalar operand in split to AVX-512VL.
PR target/71346
gcc/
* config/i386/sse.md (define_insn_and_split "*vec_extractv4sf_0"): Use
`Yv' for scalar operand.
testsuite/
* gcc.target/i386/pr71346.c: New test.
From-SVN: r236909
Tom de Vries [Tue, 31 May 2016 07:07:26 +0000 (07:07 +0000)]
Handle 3-arg phi in copy_bb_and_scalar_dependences
2016-05-31 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/69068
* graphite-isl-ast-to-gimple.c (copy_bb_and_scalar_dependences): Handle
phis with more than two args.
* gcc.dg/graphite/pr69068.c: New test.
From-SVN: r236907
GCC Administrator [Tue, 31 May 2016 00:16:26 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r236906
Martin Sebor [Mon, 30 May 2016 22:56:43 +0000 (22:56 +0000)]
PR c++/71306 - bogus -Wplacement-new with an array element
gcc/cp/ChangeLog:
2016-05-27 Martin Sebor <msebor@redhat.com>
PR c++/71306
* init.c (warn_placement_new_too_small): Handle placement new arguments
that are elements of arrays more carefully. Remove a pointless loop.
gcc/testsuite/ChangeLog:
2016-05-27 Martin Sebor <msebor@redhat.com>
PR c++/71306
* g++.dg/warn/Wplacement-new-size-3.C: New test.
From-SVN: r236902
Jakub Jelinek [Mon, 30 May 2016 21:36:24 +0000 (23:36 +0200)]
re PR c++/71349 (Combined async target clause parsing issues)
PR c++/71349
* c-parser.c (c_parser_omp_for): Don't disallow nowait clause
when combined with target construct.
* parser.c (cp_parser_omp_for): Don't disallow nowait clause
when combined with target construct.
(cp_parser_omp_parallel): Pass cclauses == NULL as last argument
to cp_parser_omp_all_clauses.
* c-omp.c (c_omp_split_clauses): Put OMP_CLAUSE_DEPEND to
C_OMP_CLAUSE_SPLIT_TARGET. Put OMP_CLAUSE_NOWAIT to
C_OMP_CLAUSE_SPLIT_TARGET if combined with target construct,
instead of C_OMP_CLAUSE_SPLIT_FOR.
* c-c++-common/gomp/clauses-1.c (bar): Add dd argument. Add
nowait depend(inout: dd[0]) clauses where permitted.
From-SVN: r236900
Andreas Tobler [Mon, 30 May 2016 20:03:57 +0000 (22:03 +0200)]
config.gcc: Move hard float support for arm*hf*-*-freebsd* into armv6*-*-freebsd* for...
2016-05-30 Andreas Tobler <andreast@gcc.gnu.org>
* config.gcc: Move hard float support for arm*hf*-*-freebsd* into
armv6*-*-freebsd* for FreeBSD 11. Eliminate the arm*hf*-*-freebsd*
target.
From-SVN: r236898
Jose E. Marchesi [Mon, 30 May 2016 19:33:34 +0000 (21:33 +0200)]
config.gcc (sparc*-*-*): Support cpu_32, cpu_64, tune_32 and tune_64.
2016-05-30 Jose E. Marchesi <jose.marchesi@oracle.com>
* config.gcc (sparc*-*-*): Support cpu_32, cpu_64, tune_32 and
tune_64.
* doc/install.texi (--with-cpu-32, --with-cpu-64): Document
support on SPARC.
* config/sparc/linux64.h (OPTION_DEFAULT_SPECS): Add entries for
cpu_32, cpu_64, tune_32 and tune_64.
* config/sparc/sol2.h (OPTION_DEFAULT_SPECS): Likewise.
From-SVN: r236897
Paolo Carlini [Mon, 30 May 2016 19:18:13 +0000 (19:18 +0000)]
re PR c++/71238 (Undeclared function message imprecisely points to error column)
/cp
2016-05-30 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/71238
* lex.c (unqualified_name_lookup_error): Take a location too.
(unqualified_fn_lookup_error): Take a cp_expr.
* cp-tree.h (unqualified_name_lookup_error,
unqualified_fn_lookup_error): Adjust declarations.
* semantics.c (perform_koenig_lookup): Adjust
unqualified_fn_lookup_error call, pass the location of
the identifier too as part of a cp_expr.
/testsuite
2016-05-30 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/71238
* g++.dg/parse/pr71238.C: New.
* g++.dg/concepts/friend1.C: Test column numbers too.
* g++.dg/cpp0x/initlist31.C: Likewise.
* g++.dg/cpp0x/pr51420.C: Likewise.
* g++.dg/cpp0x/udlit-declare-neg.C: Likewise.
* g++.dg/cpp0x/udlit-member-neg.C: Likewise.
* g++.dg/ext/builtin3.C: Likewise.
* g++.dg/lookup/friend12.C: Likewise.
* g++.dg/lookup/friend7.C: Likewise.
* g++.dg/lookup/koenig1.C: Likewise.
* g++.dg/lookup/koenig5.C: Likewise.
* g++.dg/lookup/used-before-declaration.C: Likewise.
* g++.dg/overload/koenig1.C: Likewise.
* g++.dg/template/crash65.C: Likewise.
* g++.dg/template/friend57.C: Likewise.
* g++.dg/warn/Wshadow-5.C: Likewise.
* g++.dg/warn/Wunused-8.C: Likewise.
* g++.old-deja/g++.bugs/900211_01.C: Likewise.
* g++.old-deja/g++.jason/lineno5.C: Likewise.
* g++.old-deja/g++.jason/member.C: Likewise.
* g++.old-deja/g++.jason/report.C: Likewise.
* g++.old-deja/g++.jason/scoping12.C: Likewise.
* g++.old-deja/g++.law/visibility20.C: Likewise.
* g++.old-deja/g++.ns/koenig5.C: Likewise.
* g++.old-deja/g++.other/static5.C: Likewise.
* g++.old-deja/g++.pt/overload2.C: Likewise.
From-SVN: r236896
Uros Bizjak [Mon, 30 May 2016 19:06:38 +0000 (21:06 +0200)]
sync.md (mfence_nosse): Use "lock orl $0, -4(%esp)".
* config/i386/sync.md (mfence_nosse): Use "lock orl $0, -4(%esp)".
From-SVN: r236895
Andi Kleen [Mon, 30 May 2016 18:13:12 +0000 (18:13 +0000)]
Don't cause ICEs when auto profile file is not found with checking
Currently, on a checking enabled compiler when -fauto-profile does
not find the profile feedback file it errors out with assertation
failures. Add proper errors for this case.
gcc/:
2016-05-30 Andi Kleen <ak@linux.intel.com>
* auto-profile.c (read_profile): Replace asserts with errors
when file does not exist.
* gcov-io.c (gcov_read_words): Dito.
From-SVN: r236894