platform/upstream/gcc.git
3 years agoc++: Fix deduction from the type of an NTTP
Patrick Palka [Tue, 5 Jan 2021 18:36:26 +0000 (13:36 -0500)]
c++: Fix deduction from the type of an NTTP

In the testcase nontype-auto17.C below, the calls to f and g are invalid
because neither deduction nor defaulting of the template parameter T
yields a valid specialization.  Deducing T doesn't work because T is
used only in a non-deduced context, and defaulting T doesn't work
because its default argument makes the type of M invalid.

But with -std=c++17 or later, we incorrectly accept both calls.
Starting with C++17 (specifically P0127R2), during deduction we're
allowed to try to deduce T from the argument '42' that's been
tentatively deduced for M.  The problem is that when unify walks into
the type of M (a TYPENAME_TYPE), it immediately gives up without
performing any new unifications (so the type of M is still unknown) --
and then we go on to unify M with '42' anyway.  Later in
type_unification_real, we complete the template argument vector using
T's default template argument, and end up forming the bogus
specializations f<void, 42> and g<S, 42>.

This patch fixes this issue by checking whether the type of an NTTP is
still dependent after walking into its type during unification.  If it
is, it means we couldn't deduce all the template parameters used in its
type, and so we shouldn't yet unify the NTTP.

(The new testcase ttp33.C demonstrates the need for the TEMPLATE_PARM_LEVEL
check; without it, we would ICE on this testcase from the call to tsubst.)

gcc/cp/ChangeLog:

* pt.c (unify) <case TEMPLATE_PARM_INDEX>: After walking into
the type of the NTTP, substitute into the type again.  If the
type is still dependent, don't unify the NTTP.

gcc/testsuite/ChangeLog:

* g++.dg/template/partial5.C: Adjust directives to expect the
same errors across all dialects.
* g++.dg/cpp1z/nontype-auto17.C: New test.
* g++.dg/cpp1z/nontype-auto18.C: New test.
* g++.dg/template/ttp33.C: New test.

3 years agoexpand: Fold x - y < 0 to x < y during expansion [PR94802]
Jakub Jelinek [Tue, 5 Jan 2021 18:13:29 +0000 (19:13 +0100)]
expand: Fold x - y < 0 to x < y during expansion [PR94802]

My earlier patch to simplify x - y < 0 etc. for signed subtraction
with undefined overflow into x < y in match.pd regressed some tests,
even when it was guarded to be post-IPA, the following patch thus
attempts to optimize that during expansion instead (which is the last
time we can do it, afterwards we lose the information whether it was
x - y < 0 or (int) ((unsigned) x - y) < 0 for which we couldn't
optimize it.

2021-01-05  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/94802
* expr.h (maybe_optimize_sub_cmp_0): Declare.
* expr.c: Include tree-pretty-print.h and flags.h.
(maybe_optimize_sub_cmp_0): New function.
(do_store_flag): Use it.
* cfgexpand.c (expand_gimple_cond): Likewise.

* gcc.target/i386/pr94802.c: New test.
* gcc.dg/Wstrict-overflow-25.c: Remove xfail.

3 years agonvptx: Cache stacks block for OpenMP kernel launch
Julian Brown [Wed, 21 Oct 2020 17:00:19 +0000 (10:00 -0700)]
nvptx: Cache stacks block for OpenMP kernel launch

2021-01-05  Julian Brown  <julian@codesourcery.com>

libgomp/
* plugin/plugin-nvptx.c (SOFTSTACK_CACHE_LIMIT): New define.
(struct ptx_device): Add omp_stacks struct.
(nvptx_open_device): Initialise cached-stacks housekeeping info.
(nvptx_close_device): Free cached stacks block and mutex.
(nvptx_stacks_free): New function.
(nvptx_alloc): Add SUPPRESS_ERRORS parameter.
(GOMP_OFFLOAD_alloc): Add strategies for freeing soft-stacks block.
(nvptx_stacks_alloc): Rename to...
(nvptx_stacks_acquire): This.  Cache stacks block between runs if same
size or smaller is required.
(nvptx_stacks_free): Remove.
(GOMP_OFFLOAD_run): Call nvptx_stacks_acquire and lock stacks block
during kernel execution.

3 years agoA couple of comment tweaks
Richard Sandiford [Tue, 5 Jan 2021 17:43:27 +0000 (17:43 +0000)]
A couple of comment tweaks

Tweak a couple of comments added in the RTL-SSA series in response
to reviewer feedback.

gcc/
* mux-utils.h (pointer_mux::m_ptr): Tweak description of contents.
* rtlanal.c (simple_regno_set): Tweak description to clarify the
RMW condition.

3 years agoDon't link cc1 etc. against libcody.a
Jakub Jelinek [Tue, 5 Jan 2021 16:46:56 +0000 (17:46 +0100)]
Don't link cc1 etc. against libcody.a

Richi complained on IRC that cc1 is linked against libcody.a.
From my understanding, it is just the cc1plus and cc1objplus binaries
that need it, so this patch links only those against it.

> this is already part of my Solaris libcody patch

The following updated patch are the incremental changes between what Rainer
has committed and what I've posted.

2021-01-05  Jakub Jelinek  <jakub@redhat.com>

gcc/cp/
* Make-lang.in (cc1plus-checksum, cc1plus$(exeext): Add
$(CODYLIB) after $(BACKEND).
gcc/objcp/
* Make-lang.in (cc1objplus-checksum, cc1objplus$(exeext): Add
$(CODYLIB) after $(BACKEND).

3 years agotree-optimization/98516 - fix SLP permute opt materialization
Richard Biener [Tue, 5 Jan 2021 15:17:15 +0000 (16:17 +0100)]
tree-optimization/98516 - fix SLP permute opt materialization

When materializing on a VEC_PERM node we have to permute the
incoming vectors, not the outgoing one.

2021-01-05  Richard Biener  <rguenther@suse.de>

PR tree-optimization/98516
* tree-vect-slp.c (vect_optimize_slp): Permute the incoming
lanes when materializing on a VEC_PERM node.
(vectorizable_slp_permutation): Dump the permute properly.

* gcc.dg/vect/bb-slp-pr98516-1.c: New testcase.
* gcc.dg/vect/bb-slp-pr98516-2.c: Likewise.

3 years agoc++: Fix ICE with __builtin_bit_cast [PR98469]
Jakub Jelinek [Tue, 5 Jan 2021 16:17:57 +0000 (17:17 +0100)]
c++: Fix ICE with __builtin_bit_cast [PR98469]

On the following testcase we ICE during constexpr evaluation (for warnings),
because the IL has ADDR_EXPR of BIT_CAST_EXPR and ADDR_EXPR case asserts
the result is not a CONSTRUCTOR.
The patch punts on lval BIT_CAST_EXPR folding.

> This change is OK, but part of the problem is that we're trying to do
> overload resolution for an S copy/move constructor, which we shouldn't be
> because bit_cast is a prvalue, so in C++17 and up we should use it to
> directly initialize the target without any implied constructor call.

This version therefore wraps it into a TARGET_EXPR then, it alone fixes
the bug, but I've kept the constexpr.c change too.

2021-01-05  Jakub Jelinek  <jakub@redhat.com>

PR c++/98469
* constexpr.c (cxx_eval_constant_expression) <case BIT_CAST_EXPR>:
Punt if lval is true.
* semantics.c (cp_build_bit_cast): Call get_target_expr_sfinae on
the result if it has a class type.

* g++.dg/cpp2a/bit-cast8.C: New test.
* g++.dg/cpp2a/bit-cast9.C: New test.

3 years agoc++: ICE with deferred noexcept when deducing targs [PR82099]
Marek Polacek [Thu, 10 Dec 2020 20:00:58 +0000 (15:00 -0500)]
c++: ICE with deferred noexcept when deducing targs [PR82099]

In this test we ICE in type_throw_all_p because it got a deferred
noexcept which it shouldn't.  Here's the story:

In noexcept61.C, we call bar, so we perform overload resolution.  When
adding the (only) candidate, we need to deduce template arguments, so
call fn_type_unification as usually.  That deduces U to

  void (*) (int &, int &)

which is correct, but its noexcept-spec is deferred_noexcept.  Then
we call add_function_candidate (bar), wherein we try to create an
implicit conversion sequence for every argument.  Since baz<int> is
of unknown type, we instantiate_type it; it is a TEMPLATE_ID_EXPR
so that calls resolve_address_of_overloaded_function.  But we crash
there, because target_type contains the deferred_noexcept.

So we need to maybe_instantiate_noexcept before we can compare types.
resolve_overloaded_unification seemed like the appropriate spot, now
fn_type_unification produces the function type with its noexcept-spec
instantiated.  This shouldn't go against CWG 1330 because here we
really need to instantiate the noexcept-spec.

This also fixes class-deduction76.C, a dg-ice test I recently added,
therefore this fix also fixes c++/90799, yay.

gcc/cp/ChangeLog:

PR c++/82099
* pt.c (resolve_overloaded_unification): Call
maybe_instantiate_noexcept after instantiating the function
decl.

gcc/testsuite/ChangeLog:

PR c++/82099
* g++.dg/cpp1z/class-deduction76.C: Remove dg-ice.
* g++.dg/cpp0x/noexcept61.C: New test.

3 years agomove SLP debug counter
Richard Biener [Tue, 5 Jan 2021 14:55:24 +0000 (15:55 +0100)]
move SLP debug counter

This moves it to catch individual SLP subgraphs

2021-01-05  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_slp_region): Move debug counter
to cover individual subgraphs.

3 years agotree-optimization/98428 - avoid pre-existing vectors for loop SLP
Richard Biener [Tue, 5 Jan 2021 13:38:15 +0000 (14:38 +0100)]
tree-optimization/98428 - avoid pre-existing vectors for loop SLP

It wasn't supposed to be enabled and appearantly copying around the
checking messed up the condition.

2021-01-05  Richard Biener  <rguenther@suse.de>

PR tree-optimization/98428
* tree-vect-slp.c (vect_build_slp_tree_1): Properly reject
vector lane extracts for loop vectorization.

3 years agoreassoc: Fix reassociation on 32-bit hosts with > 32767 bbs [PR98514]
Jakub Jelinek [Tue, 5 Jan 2021 15:37:40 +0000 (16:37 +0100)]
reassoc: Fix reassociation on 32-bit hosts with > 32767 bbs [PR98514]

Apparently reassoc ICEs on large functions (more than 32767 basic blocks
with something to reassociate in those).
The problem is that the pass uses long type to store the ranks, and
the bb ranks are (number of SSA_NAMEs with default defs + 2 + bb->index) << 16,
so with many basic blocks we overflow the ranks and we then have assertions
rank is not negative.

The following patch just uses int64_t instead of long in the pass,
yes, it means slightly higher memory consumption (one array indexed by
bb->index is twice as large, and one hash_map from trees to the ranks
will grow by 50%, but I think it is better than punting on large functions
the reassociation on 32-bit hosts and making it inconsistent e.g. when
cross-compiling.  Given vec.h uses unsigned for vect element counts,
we don't really support more than 4G of SSA_NAMEs or more than 2G of basic
blocks in a function, so even with the << 16 we can't really overflow the
int64_t rank counters.

2021-01-05  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/98514
* tree-ssa-reassoc.c (bb_rank): Change type from long * to
int64_t *.
(operand_rank): Change type from hash_map<tree, long> to
hash_map<tree, int64_t>.
(phi_rank): Change return type from long to int64_t.
(loop_carried_phi): Change block_rank variable type from long to
int64_t.
(propagate_rank): Change return type, rank parameter type and
op_rank variable type from long to int64_t.
(find_operand_rank): Change return type from long to int64_t
and change slot variable type from long * to int64_t *.
(insert_operand_rank): Change rank parameter type from long to
int64_t.
(get_rank): Change return type and rank variable type from long to
int64_t.  Use PRId64 instead of ld to print the rank.
(init_reassoc): Change rank variable type from long to int64_t
and adjust correspondingly bb_rank and operand_rank initialization.

3 years agophiopt: Optimize x < 0 ? ~y : y to (x >> 31) ^ y [PR96928]
Jakub Jelinek [Tue, 5 Jan 2021 15:35:22 +0000 (16:35 +0100)]
phiopt: Optimize x < 0 ? ~y : y to (x >> 31) ^ y [PR96928]

As requested in the PR, the one's complement abs can be done more
efficiently without cmov or branching.

Had to change the ifcvt-onecmpl-abs-1.c testcase, we no longer optimize
it in ifcvt, on x86_64 with -m32 we generate in the end the exact same
code, but with -m64:
        movl    %edi, %eax
-       notl    %eax
-       cmpl    %edi, %eax
-       cmovl   %edi, %eax
+       sarl    $31, %eax
+       xorl    %edi, %eax
        ret

2021-01-05  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/96928
* tree-ssa-phiopt.c (xor_replacement): New function.
(tree_ssa_phiopt_worker): Call it.

* gcc.dg/tree-ssa/pr96928.c: New test.
* gcc.target/i386/ifcvt-onecmpl-abs-1.c: Remove -fdump-rtl-ce1,
instead of scanning rtl dump for ifcvt message check assembly
for xor instruction.

3 years agomatch.pd: Improve (A / (1 << B)) -> (A >> B) optimization [PR96930]
Jakub Jelinek [Tue, 5 Jan 2021 15:33:29 +0000 (16:33 +0100)]
match.pd: Improve (A / (1 << B)) -> (A >> B) optimization [PR96930]

The following patch improves the A / (1 << B) -> A >> B simplification,
as seen in the testcase, if there is unnecessary widening for the division,
we just optimize it into a shift on the widened type, but if the lshift
is widened too, there is no reason to do that, we can just shift it in the
original type and convert after.  The tree_nonzero_bits & wi::mask check
already ensures it is fine even for signed values.

I've split the vr-values optimization into a separate patch as it causes
a small regression on two testcases, but this patch fixes what has been
reported in the PR alone.

2021-01-05  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/96930
* match.pd ((A / (1 << B)) -> (A >> B)): If A is extended
from narrower value which has the same type as 1 << B, perform
the right shift on the narrower value followed by extension.

* g++.dg/tree-ssa/pr96930.C: New test.

3 years agostore-merging: Handle vector CONSTRUCTORs using bswap [PR96239]
Jakub Jelinek [Tue, 5 Jan 2021 15:16:06 +0000 (16:16 +0100)]
store-merging: Handle vector CONSTRUCTORs using bswap [PR96239]

I've tried to add such helper, but handling over just analysis and letting
each pass handle it differently seems complicated given the limitations of
the bswap infrastructure.

So, this patch just hooks the optimization also into store-merging so that
the original testcase from the PR can be fixed.

2021-01-05  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/96239
* gimple-ssa-store-merging.c (maybe_optimize_vector_constructor): New
function.
(get_status_for_store_merging): Don't return BB_INVALID for blocks
with potential bswap optimizable CONSTRUCTORs.
(pass_store_merging::execute): Optimize vector CONSTRUCTORs with bswap
if possible.

* gcc.dg/tree-ssa/pr96239.c: New test.

3 years agogo: Fix -fgo-embedcfg= option description.
Jakub Jelinek [Tue, 5 Jan 2021 15:13:20 +0000 (16:13 +0100)]
go: Fix -fgo-embedcfg= option description.

Description of options should be . terminated, the:
FAIL: compiler driver --help=go option(s): "^ +-.*[^:.]$" absent from output: "  -fgo-embedcfg=<file>        List embedded files via go:embed"
test even reports that.

2021-01-05  Jakub Jelinek  <jakub@redhat.com>

* lang.opt (fgo-embedcfg=): Add full stop at the end of description.

3 years agotree-optimization/98381 - fix live bool vector extract
Richard Biener [Tue, 5 Jan 2021 13:23:55 +0000 (14:23 +0100)]
tree-optimization/98381 - fix live bool vector extract

This fixes extraction of live bool vector results for the case of
integer mode vectors.

2021-01-05  Richard Biener  <rguenther@suse.de>

PR tree-optimization/98381
* tree.c (vector_element_bits): Properly compute bool vector
element size.
* tree-vect-loop.c (vectorizable_live_operation): Properly
compute the last lane bit offset.

3 years agoi386: Prevent spurious FP exceptions with _mm_cvt{,t}ps_pi32 [PR98522]
Uros Bizjak [Tue, 5 Jan 2021 13:42:29 +0000 (14:42 +0100)]
i386: Prevent spurious FP exceptions with _mm_cvt{,t}ps_pi32 [PR98522]

Prevent spurious FP exceptions with _mm_cvt{,t}ps_pi32 for TARGET_MMX_WITH_SSE
by clearing the top 64 bytes of the input XMM register.

2021-01-05  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/98522
* config/i386/sse.md (sse_cvtps2pi): Redefine as define_insn_and_split.
Clear the top 64 bytes of the input XMM register.
(sse_cvttps2pi): Ditto.

gcc/testsuite

PR target/98522
* gcc.target/i386/pr98522.c: New test.

3 years agoi386: Add _mm256_cmov_si256 [PR98521]
Uros Bizjak [Tue, 5 Jan 2021 13:30:05 +0000 (14:30 +0100)]
i386: Add _mm256_cmov_si256 [PR98521]

Add missing _mm256_cmov_si256 intrinsic to xopintrin.h.

2021-01-05  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/98521
* config/i386/xopintrin.h (_mm256_cmov_si256): New.

3 years ago[c++]: Improve module-decl diagnostics [PR 98327]
Nathan Sidwell [Tue, 5 Jan 2021 13:18:50 +0000 (05:18 -0800)]
[c++]: Improve module-decl diagnostics [PR 98327]

The diagnostic for a misplaced module decl was essentially 'computer
says no', which isn't the most helpful.  This adjusts it to indicate
what would be acceptable.

gcc/cp/
* parser.c (cp_parser_module_declaration): Alter diagnostic
text to say where is permissable.
gcc/testsuite/
* g++.dg/modules/mod-decl-1.C: Adjust.
* g++.dg/modules/p0713-2.C: Adjust.
* g++.dg/modules/p0713-3.C: Adjust.

3 years agox86: Cast to unsigned short first for _mm_extract_pi16
H.J. Lu [Fri, 1 Jan 2021 13:30:34 +0000 (05:30 -0800)]
x86: Cast to unsigned short first for _mm_extract_pi16

_mm_extract_pi16 is intrinsic for pextrw, which should be zero-extended,
not sign-extended.

gcc/

PR target/98495
* config/i386/xmmintrin.h (_mm_extract_pi16): Cast to unsigned
short first.

gcc/testsuite/

PR target/98495
* gcc.target/i386/pr98495-1.c: New test.
* gcc.target/i386/pr98495-2.c: New test.
* gcc.target/i386/pr98495-3.c: New test.
* gcc.target/i386/pr98495-4.c: New test.
* gcc.target/i386/pr98495-5.c: New test.

3 years agoarc: fix accumulator first register.
Claudiu Zissulescu [Tue, 5 Jan 2021 12:19:27 +0000 (14:19 +0200)]
arc: fix accumulator first register.

gcc/
2021-01-05  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.md (maddsidi4_split): Use ACC_REG_FIRST.
(umaddsidi4_split): Likewise.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
3 years agoi386: Optimize pmovskb on zero_extend of subreg HI of pmovskb result [PR98461]
liuhongt [Mon, 4 Jan 2021 03:24:30 +0000 (11:24 +0800)]
i386: Optimize pmovskb on zero_extend of subreg HI of pmovskb result [PR98461]

The following patch adds define_insn_and_split to optimize

       vpmovmskb       %xmm0, %eax
-       movzwl  %ax, %eax
        notl    %eax

and combine splitter to optimize

        pmovmskb        %xmm0, %eax
-       notl    %eax
-       movzwl  %ax, %eax
+       xorl    $65535, %eax

gcc/ChangeLog
PR target/98461
* config/i386/sse.md (*sse2_pmovskb_zexthisi): New
define_insn_and_split for zero_extend of subreg HI of pmovskb
result.
(*sse2_pmovskb_zexthisi): Add new combine splitters for
zero_extend of not of subreg HI of pmovskb result.

gcc/testsuite/ChangeLog
* gcc.target/i386/sse2-pr98461-2.c: New test.

3 years agoexplow, aarch64: Fix force-Pmode-to-mem for ILP32 [PR97269]
Richard Sandiford [Tue, 5 Jan 2021 11:29:10 +0000 (11:29 +0000)]
explow, aarch64: Fix force-Pmode-to-mem for ILP32 [PR97269]

This patch fixes a mode/rtx mismatch for ILP32 targets in:

  mem = force_const_mem (ptr_mode, imm);

where imm can be Pmode rather than ptr_mode.

The patch uses convert_memory_address to convert the Pmode address
to ptr_mode before the call.  However, immediate addresses can in
general contain unspecs, and convert_memory_address wasn't set up
to handle those.

The patch therefore adds some generic unspec handling to
convert_memory_address_addr_space_1.  As the comment says, we can add
a target hook if this behaviour turns out to be wrong for some targets.
But I think what the patch does is a strict improvement over the status
quo: without it, we would try to force the unspec into a register,
but nevertheless wrap the result in a (const ...).  That in turn
would be invalid rtl and seems bound to generate an ICE later.

I tested the explow.c part using -fstack-protector with local hacks
to force SYMBOL_FORCE_TO_MEM for UNSPEC_SALT_ADDR.

Fixes c-c++-common/torture/pr57945.c and various other tests.

gcc/
PR target/97269
* explow.c (convert_memory_address_addr_space_1): Handle UNSPECs
nested in CONSTs.
* config/aarch64/aarch64.c (aarch64_expand_mov_immediate): Use
convert_memory_address to convert symbolic immediates to ptr_mode
before forcing them to memory.

3 years agorecog: Fix a constrain_operands corner case [PR97144]
Richard Sandiford [Tue, 5 Jan 2021 11:18:48 +0000 (11:18 +0000)]
recog: Fix a constrain_operands corner case [PR97144]

aarch64's *add<mode>3_poly_1 has a pattern with the constraints:

  "=...,r,&r"
  "...,0,rk"
  "...,Uai,Uat"

i.e. the penultimate alternative requires operands 0 and 1 to match,
but the final alternative does not allow them to match.

The register allocators dealt with this correctly, and so used
different input and output registers for instructions with Uat
operands.  However, constrain_operands carried the penultimate
alternative's matching rule over to the final alternative,
so it would essentially ignore the earlyclobber.  This in turn
allowed postreload to convert a correct Uat pairing into an
incorrect one.

The fix is simple: recompute the matching information for each
alternative.

gcc/
PR rtl-optimization/97144
* recog.c (constrain_operands): Initialize matching_operand
for each alternative, rather than only doing it once.

gcc/testsuite/
PR rtl-optimization/97144
* gcc.c-torture/compile/pr97144.c: New test.
* gcc.target/aarch64/sve/pr97144.c: Likewise.

3 years agortl-ssa: Fix updates to call clobbers [PR98403]
Richard Sandiford [Tue, 5 Jan 2021 11:04:15 +0000 (11:04 +0000)]
rtl-ssa: Fix updates to call clobbers [PR98403]

In the PR, fwprop was changing a call instruction and tripped
an assert when trying to update a list of call clobbers.
There are two ways we could handle this: remove the call clobber
and then add it back, or assume that the clobber will stay in its
current place.

At the moment we don't have enough information to safely move
calls around, so the second approach seems simpler and more
efficient.

gcc/
PR rtl-optimization/98403
* rtl-ssa/changes.cc (function_info::finalize_new_accesses): Explain
why we don't remove call clobbers.
(function_info::apply_changes_to_insn): Don't attempt to add
call clobbers here.

gcc/testsuite/
PR rtl-optimization/98403
* g++.dg/opt/pr98403.C: New test.

3 years agovect: Fix missing alias checks for 128-bit SVE [PR98371]
Richard Sandiford [Tue, 5 Jan 2021 11:03:22 +0000 (11:03 +0000)]
vect: Fix missing alias checks for 128-bit SVE [PR98371]

On AArch64, the vectoriser tries various ways of vectorising with both
SVE and Advanced SIMD and picks the best one.  All other things being
equal, it prefers earlier attempts over later attempts.

The way this works currently is that, once it has a successful
vectorisation attempt A, it analyses all other attempts as epilogue
loops of A:

      /* When pick_lowest_cost_p is true, we should in principle iterate
 over all the loop_vec_infos that LOOP_VINFO could replace and
 try to vectorize LOOP_VINFO under the same conditions.
 E.g. when trying to replace an epilogue loop, we should vectorize
 LOOP_VINFO as an epilogue loop with the same VF limit.  When trying
 to replace the main loop, we should vectorize LOOP_VINFO as a main
 loop too.

 However, autovectorize_vector_modes is usually sorted as follows:

 - Modes that naturally produce lower VFs usually follow modes that
   naturally produce higher VFs.

 - When modes naturally produce the same VF, maskable modes
   usually follow unmaskable ones, so that the maskable mode
   can be used to vectorize the epilogue of the unmaskable mode.

 This order is preferred because it leads to the maximum
 epilogue vectorization opportunities.  Targets should only use
 a different order if they want to make wide modes available while
 disparaging them relative to earlier, smaller modes.  The assumption
 in that case is that the wider modes are more expensive in some
 way that isn't reflected directly in the costs.

 There should therefore be few interesting cases in which
 LOOP_VINFO fails when treated as an epilogue loop, succeeds when
 treated as a standalone loop, and ends up being genuinely cheaper
 than FIRST_LOOP_VINFO.  */

However, the vectoriser can normally elide alias checks for epilogue
loops, on the basis that the main loop should do them instead.
Converting an epilogue loop to a main loop can therefore cause the alias
checks to be skipped.  (It probably also unfairly penalises the original
loop in the cost comparison, given that one loop will have alias checks
and the other won't.)

As the comment says, we should in principle analyse each vector mode
twice: once as a main loop and once as an epilogue.  However, doing
that up-front would be quite expensive.  This patch instead goes for a
compromise: if an epilogue loop for mode M2 seems better than a main
loop for mode M1, re-analyse with M2 as the main loop.

The patch fixes dg.torture.exp=pr69719.c when testing with
-msve-vector-bits=128.

gcc/
PR tree-optimization/98371
* tree-vect-loop.c (vect_reanalyze_as_main_loop): New function.
(vect_analyze_loop): If an epilogue loop appears to be cheaper
than the main loop, re-analyze it as a main loop before adopting
it as a main loop.

3 years agobuild: libcody: Link with -lsocket -lnsl if necessary [PR98316]
Rainer Orth [Tue, 5 Jan 2021 10:32:31 +0000 (11:32 +0100)]
build: libcody: Link with -lsocket -lnsl if necessary [PR98316]

With the introduction of C++20 modules and libcody, cc1plus and
cc1objplus gained a dependency on the socket functions.  Before those
were merged into libc in Solaris 11.4, one needed to link with -lsocket -lnsl
on Solaris, so that merge broke the Solaris 11.3 build.

While we already have 4 different checks for those libraries in the
tree, I decided to import autoconf-archive's AX_LIB_SOCKET_NSL macro
instead.  At the same time, the patch only links libcody and the
networking libs where needed (cc1plus, cc1objplus).

Bootstrapped without regressions on i386-pc-solaris2.11 (Solaris 11.3
and 11.4), sparc-sun-solaris2.11, and x86_64-pc-linux-gnu.

2020-12-16  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

c++tools:
PR c++/98316
* configure.ac: Include ../config/ax_lib_socket_nsl.m4.
(NETLIBS): Determine using AX_LIB_SOCKET_NSL.
* configure: Regenerate.
* Makefile.in (NETLIBS): Define.
(g++-mapper-server$(exeext)): Add $(NETLIBS).

gcc/objcp:
PR c++/98316
* Make-lang.in (cc1objplus$(exeext)): Add $(CODYLIB), $(NETLIBS).

gcc/cp:
PR c++/98316
* Make-lang.in (cc1plus$(exeext)): Add $(CODYLIB), $(NETLIBS).

gcc:
PR c++/98316
* configure.ac (NETLIBS): Determine using AX_LIB_SOCKET_NSL.
* aclocal.m4, configure: Regenerate.
* Makefile.in (NETLIBS): Define.
(BACKEND): Remove $(CODYLIB).

config:
PR c++/98316
* ax_lib_socket_nsl.m4: Import from autoconf-archive.

3 years agosimplify-rtx: Optimize (x - 1) * y + y [PR98334]
Jakub Jelinek [Tue, 5 Jan 2021 09:57:52 +0000 (10:57 +0100)]
simplify-rtx: Optimize (x - 1) * y + y [PR98334]

We don't try to optimize for signed x, y (int) (x - 1U) * y + y
into x * y, we can't do that with signed x * y, because the former
is well defined for INT_MIN and -1, while the latter is not.
We could perhaps optimize it during isel or some very late optimization
where we'd turn magically flag_wrapv, but we don't do that yet.

This patch optimizes it in simplify-rtx.c, such that we can optimize
it during combine.

2021-01-05  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/98334
* simplify-rtx.c (simplify_context::simplify_binary_operation_1):
Optimize (X - 1) * Y + Y to X * Y or (X + 1) * Y - Y to X * Y.

* gcc.target/i386/pr98334.c: New test.

3 years agoRestore input_location after recursive expand_call_inline
Bernd Edlinger [Mon, 4 Jan 2021 10:35:31 +0000 (11:35 +0100)]
Restore input_location after recursive expand_call_inline

This is just a precautionary fix.

2021-01-05  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* tree-inline.c (expand_call_inline): Restore input_location.
Return result from recursive call.

3 years agoFix testsuite/g++.dg/cpp1y/constexpr-66093.C execution failure...
Jerome Lambourg [Tue, 5 Jan 2021 07:47:41 +0000 (04:47 -0300)]
Fix testsuite/g++.dg/cpp1y/constexpr-66093.C execution failure...

The constexpr iteration dereferenced an array element past the end of
the array.

for  gcc/testsuite/ChangeLog

* g++.dg/cpp1y/constexpr-66093.C: Fix bounds issue.

3 years agoGo frontend: add -fgo-embedcfg option
Ian Lance Taylor [Tue, 5 Jan 2021 01:40:11 +0000 (17:40 -0800)]
Go frontend: add -fgo-embedcfg option

This option will be used by the go command to implement go:embed directives,
which are new with the upcoming Go 1.16 release.

* lang.opt (fgo-embedcfg): New option.
* go-c.h (struct go_create_gogo_args): Add embedcfg field.
* go-lang.c (go_embedcfg): New static variable.
(go_langhook_init): Set go_create_gogo_args embedcfg field.
(go_langhook_handle_option): Handle OPT_fgo_embedcfg_.
* gccgo.texi (Invoking gccgo): Document -fgo-embedcfg.

3 years agoanalyzer: fix ICE with -fsanitize=undefined [PR98293]
David Malcolm [Tue, 5 Jan 2021 00:20:32 +0000 (19:20 -0500)]
analyzer: fix ICE with -fsanitize=undefined [PR98293]

-fsanitize=undefined with calls to nonnull functions
creates struct __ubsan_nonnull_arg_data instances
with CONSTRUCTORs for RECORD_TYPEs with NULL index values.
The analyzer was mistakenly using INTEGER_CST for these
fields, leading to ICEs.

Fix the issue by iterating through the fields in the type
for such cases, imitating similar logic in varasm.c's
output_constructor.

gcc/analyzer/ChangeLog:
PR analyzer/98293
* store.cc (binding_map::apply_ctor_to_region): When "index" is
NULL, iterate through the fields for RECORD_TYPEs, rather than
creating an INTEGER_CST index.

gcc/testsuite/ChangeLog:
PR analyzer/98293
* gcc.dg/analyzer/pr98293.c: New test.

3 years agoDaily bump.
GCC Administrator [Tue, 5 Jan 2021 00:16:42 +0000 (00:16 +0000)]
Daily bump.

3 years agoC: Add test for incorrect warning for assignment of certain volatile expressions...
Martin Uecker [Mon, 4 Jan 2021 21:53:58 +0000 (22:53 +0100)]
C: Add test for incorrect warning for assignment of certain volatile expressions fixed by commit 58a45ce [PR98029]

2021-01-04  Martin Uecker  <muecker@gwdg.de>

gcc/testsuite/
PR c/98029
* gcc.dg/pr98029.c: New test.

3 years agoMAINTAINERS: Update my email address.
Philipp Tomsich [Mon, 4 Jan 2021 16:33:09 +0000 (17:33 +0100)]
MAINTAINERS: Update my email address.

2021-01-04  Philipp Tomsich  <philipp.tomsich@vrull.eu>

* MAINTAINERS: Update my email address.

3 years agoc++: Add stdlib module test cases
Nathan Sidwell [Mon, 4 Jan 2021 15:45:36 +0000 (07:45 -0800)]
c++: Add stdlib module test cases

The remaining modules tests use the std library.  These are those.

gcc/testsuite/
* g++.dg/modules/binding-1_a.H: New.
* g++.dg/modules/binding-1_b.H: New.
* g++.dg/modules/binding-1_c.C: New.
* g++.dg/modules/binding-2.H: New.
* g++.dg/modules/builtin-3_a.C: New.
* g++.dg/modules/global-2_a.C: New.
* g++.dg/modules/global-2_b.C: New.
* g++.dg/modules/global-3_a.C: New.
* g++.dg/modules/global-3_b.C: New.
* g++.dg/modules/hello-1_a.C: New.
* g++.dg/modules/hello-1_b.C: New.
* g++.dg/modules/iostream-1_a.H: New.
* g++.dg/modules/iostream-1_b.C: New.
* g++.dg/modules/part-5_a.C: New.
* g++.dg/modules/part-5_b.C: New.
* g++.dg/modules/part-5_c.C: New.
* g++.dg/modules/stdio-1_a.H: New.
* g++.dg/modules/stdio-1_b.C: New.
* g++.dg/modules/string-1_a.H: New.
* g++.dg/modules/string-1_b.C: New.
* g++.dg/modules/string-view1.C: New.
* g++.dg/modules/string-view2.C: New.
* g++.dg/modules/tinfo-1.C: New.
* g++.dg/modules/tinfo-2_a.H: New.
* g++.dg/modules/tinfo-2_b.C: New.
* g++.dg/modules/tname-spec-1_a.H: New.
* g++.dg/modules/tname-spec-1_b.C: New.
* g++.dg/modules/xtreme-header-1.h: New.
* g++.dg/modules/xtreme-header-1_a.H: New.
* g++.dg/modules/xtreme-header-1_b.C: New.
* g++.dg/modules/xtreme-header-1_c.C: New.
* g++.dg/modules/xtreme-header-2.h: New.
* g++.dg/modules/xtreme-header-2_a.H: New.
* g++.dg/modules/xtreme-header-2_b.C: New.
* g++.dg/modules/xtreme-header-2_c.C: New.
* g++.dg/modules/xtreme-header-3.h: New.
* g++.dg/modules/xtreme-header-3_a.H: New.
* g++.dg/modules/xtreme-header-3_b.C: New.
* g++.dg/modules/xtreme-header-3_c.C: New.
* g++.dg/modules/xtreme-header-4.h: New.
* g++.dg/modules/xtreme-header-4_a.H: New.
* g++.dg/modules/xtreme-header-4_b.C: New.
* g++.dg/modules/xtreme-header-4_c.C: New.
* g++.dg/modules/xtreme-header-5.h: New.
* g++.dg/modules/xtreme-header-5_a.H: New.
* g++.dg/modules/xtreme-header-5_b.C: New.
* g++.dg/modules/xtreme-header-5_c.C: New.
* g++.dg/modules/xtreme-header-6.h: New.
* g++.dg/modules/xtreme-header-6_a.H: New.
* g++.dg/modules/xtreme-header-6_b.C: New.
* g++.dg/modules/xtreme-header-6_c.C: New.
* g++.dg/modules/xtreme-header.h: New.
* g++.dg/modules/xtreme-header_a.H: New.
* g++.dg/modules/xtreme-header_b.C: New.
* g++.dg/modules/xtreme-tr1.h: New.
* g++.dg/modules/xtreme-tr1_a.H: New.
* g++.dg/modules/xtreme-tr1_b.C: New.

3 years agovect, aarch64: Fix alignment units for IFN_MASK* [PR95401]
Richard Sandiford [Mon, 4 Jan 2021 14:44:21 +0000 (14:44 +0000)]
vect, aarch64: Fix alignment units for IFN_MASK* [PR95401]

The IFN_MASK* functions take two leading arguments: a load or
store pointer and a “cookie”.  The type of the cookie is the
type of the access for TBAA purposes (like for MEM_REFs)
while the value of the cookie is the alignment of the access.
This PR was caused by a disagreement about whether the alignment
is measured in bits or bytes.

It looks like this goes back to PR68786, which made the
vectoriser create its own cookie argument rather than reusing
the one created by ifcvt.  The alignment value of the new cookie
was measured in bytes (as needed by set_ptr_info_alignment)
while the existing code expected it to be measured in bits.
The folds I added for IFN_MASK_LOAD and STORE then made
things worse.

gcc/
PR tree-optimization/95401
* config/aarch64/aarch64-sve-builtins.cc
(gimple_folder::load_store_cookie): Use bits rather than bytes
for the alignment argument to IFN_MASK_LOAD and IFN_MASK_STORE.
* gimple-fold.c (gimple_fold_mask_load_store_mem_ref): Likewise.
* tree-vect-stmts.c (vectorizable_store): Likewise.
(vectorizable_load): Likewise.

gcc/testsuite/
PR tree-optimization/95401
* g++.dg/vect/pr95401.cc: New test.
* g++.dg/vect/pr95401a.cc: Likewise.

3 years ago[libcody] Remove some std::move [PR 98368]
Nathan Sidwell [Mon, 4 Jan 2021 14:38:52 +0000 (06:38 -0800)]
[libcody] Remove some std::move [PR 98368]

Compiling on clang showed a couple of pessimizations.  Fixed thusly.

libcody/
* client.cc (Client::ProcessResponse): Remove std::move
inside ?:
c++tools/
* resolver.cc (module_resolver::cmi_response): Remove
std::move of temporary.

3 years ago[libcody] Windows absdir fix
Mateusz Wajchęprzełóż [Mon, 4 Jan 2021 13:59:10 +0000 (08:59 -0500)]
[libcody]  Windows absdir fix

An obvious thinko in dirve name check :(

libcody/
* resolver.cc (IsAbsDir): Fix string indexing.

Signed-off-by: Nathan Sidwell <nathan@acm.org>
3 years agotree-optimization/98308 - set vector type for mask of masked load
Richard Biener [Mon, 4 Jan 2021 12:25:35 +0000 (13:25 +0100)]
tree-optimization/98308 - set vector type for mask of masked load

This makes sure to set the vector type on an invariant mask argument
for a masked load and SLP.

2021-01-04  Richard Biener  <rguenther@suse.de>

PR tree-optimization/98308
* tree-vect-stmts.c (vectorizable_load): Set invariant mask
SLP vectype.

* gcc.dg/vect/pr98308.c: New testcase.

3 years agoloop-niter: Recognize popcount idioms even with char, short and __int128 [PR95771]
Jakub Jelinek [Mon, 4 Jan 2021 13:36:06 +0000 (14:36 +0100)]
loop-niter: Recognize popcount idioms even with char, short and __int128 [PR95771]

As the testcase shows, we punt unnecessarily on popcount loop idioms if
the type is smaller than int or larger than long long.
Smaller type than int can be handled by zero-extending the argument to
unsigned int, and types twice as long as long long by doing
__builtin_popcountll on both halves of the __int128.

2020-01-04  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/95771
* tree-ssa-loop-niter.c (number_of_iterations_popcount): Handle types
with precision smaller than int's precision and types with precision
twice as large as long long.  Formatting fixes.

* gcc.target/i386/pr95771.c: New test.

3 years agotree-optimization/98464 - replace loop info with avail at uses
Richard Biener [Mon, 4 Jan 2021 12:02:24 +0000 (13:02 +0100)]
tree-optimization/98464 - replace loop info with avail at uses

This does VN replacement in loop nb_iterations consistent with
the rest of the IL by using availability at the definition site
of uses.

2021-01-04  Richard Biener  <rguenther@suse.de>

PR tree-optimization/98464
* tree-ssa-sccvn.c (vn_valueize_for_srt): Rename from ...
(vn_valueize_wrapper): ... this.  Temporarily adjust vn_context_bb.
(process_bb): Adjust.

* g++.dg/opt/pr98464.C: New testcase.

3 years agodocs: Fix wording describing the hwaddress sanitizer
Matthew Malcomson [Mon, 4 Jan 2021 12:06:27 +0000 (12:06 +0000)]
docs: Fix wording describing the hwaddress sanitizer

The original documentation added to mention the clash between
-fsanitize=address and -fsanitize=hwaddress used confusing wording trying
to say that -fsanitize=hwaddress is only available on AArch64.

It read as if -fsanitize=address were only supported on AArch64.

This patch fixes that wording by being more explicit.

gcc/ChangeLog:

PR other/98437
* doc/invoke.texi (-fsanitize=address): Fix wording describing
clash with -fsanitize=hwaddress.

3 years agotree-optimization/98282 - classify V_C_E<constant> as nary
Richard Biener [Mon, 4 Jan 2021 10:40:40 +0000 (11:40 +0100)]
tree-optimization/98282 - classify V_C_E<constant> as nary

This avoids running into memory reference code in compute_avail by
properly classifying unfolded reference trees on constants.

2021-01-04  Richard Biener  <rguenther@suse.de>

PR tree-optimization/98282
* tree-ssa-sccvn.c (vn_get_stmt_kind): Classify tcc_reference on
invariants as VN_NARY.

* g++.dg/opt/pr98282.C: New testcase.

3 years agoaarch64: Improve vcombine codegen [PR89057]
Richard Sandiford [Mon, 4 Jan 2021 11:59:07 +0000 (11:59 +0000)]
aarch64: Improve vcombine codegen [PR89057]

This patch fixes a codegen regression in the handling of things like:

  __temp.val[0]      \
    = vcombine_##funcsuffix (__b.val[0],      \
     vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \

in the 64-bit vst[234] functions.  The zero was forced into a
register at expand time, and we relied on combine to fuse the
zero and combine back together into a single combinez pattern.
The problem is that the zero could be hoisted before combine
gets a chance to do its thing.

gcc/
PR target/89057
* config/aarch64/aarch64-simd.md (aarch64_combine<mode>): Accept
aarch64_simd_reg_or_zero for operand 2.  Use the combinez patterns
to handle zero operands.

gcc/testsuite/
PR target/89057
* gcc.target/aarch64/pr89057.c: New test.

3 years agoaarch64: Use the MUL VL form of SVE PRF[BHWD]
Richard Sandiford [Mon, 4 Jan 2021 11:56:19 +0000 (11:56 +0000)]
aarch64: Use the MUL VL form of SVE PRF[BHWD]

The expansions of the svprf[bhwd] instructions weren't taking
advantage of the immediate addressing mode.

gcc/
* config/aarch64/aarch64.c (offset_6bit_signed_scaled_p): New function.
(offset_6bit_unsigned_scaled_p): Fix typo in comment.
(aarch64_sve_prefetch_operand_p): Accept MUL VLs in the range
[-32, 31].

gcc/testsuite/
* gcc.target/aarch64/sve/acle/asm/prfb.c: Test for a MUL VL range of
[-32, 31].
* gcc.target/aarch64/sve/acle/asm/prfh.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/prfw.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/prfd.c: Likewise.

3 years agotree-optimization/98393 - properly init matches when failing SLP
Richard Biener [Mon, 4 Jan 2021 10:22:24 +0000 (11:22 +0100)]
tree-optimization/98393 - properly init matches when failing SLP

This zeroes matches when failing SLP discovery because of the
work limit.

2021-01-04  Richard Biener  <rguenther@suse.de>

PR tree-optimization/98393
* tree-vect-slp.c (vect_build_slp_tree): Properly zero matches
when hitting the limit.

3 years agoConvert 2 files to utf8.
Martin Liska [Mon, 4 Jan 2021 10:33:59 +0000 (11:33 +0100)]
Convert 2 files to utf8.

libiberty/ChangeLog:

* strverscmp.c: Convert to utf8 from iso8859.

gcc/testsuite/ChangeLog:

* README: Convert to utf8 from iso8859.

3 years agoavr.exp: convert Dos newlines to Unix ones
Martin Liska [Mon, 4 Jan 2021 10:21:20 +0000 (11:21 +0100)]
avr.exp: convert Dos newlines to Unix ones

gcc/testsuite/ChangeLog:

* gcc.target/avr/avr.exp: Run dos2unix on the file.

3 years agotree-optimization/98291 - allow SLP more vectorization of reductions
Richard Biener [Mon, 4 Jan 2021 08:53:11 +0000 (09:53 +0100)]
tree-optimization/98291 - allow SLP more vectorization of reductions

When the VF is one a SLP reduction is in-order and thus we can
vectorize even when the reduction op is not associative.

2021-01-04  Richard Biener  <rguenther@suse.de>

PR tree-optimization/98291
* tree-vect-loop.c (vectorizable_reduction): Bypass
associativity check for SLP reductions with VF 1.

* gcc.dg/vect/slp-reduc-11.c: New testcase.
* gcc.dg/vect/vect-reduc-in-order-4.c: Adjust.

3 years agomatch.pd: Fold x == ~x to false [PR96782]
Jakub Jelinek [Mon, 4 Jan 2021 09:37:12 +0000 (10:37 +0100)]
match.pd: Fold x == ~x to false [PR96782]

x is never equal to ~x, so we can fold such comparisons to constants.

2021-01-04  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/96782
* match.pd (x == ~x -> false, x != ~x -> true): New simplifications.

* gcc.dg/tree-ssa/pr96782.c: New test.

3 years agoUpdate copyright years.
Jakub Jelinek [Mon, 4 Jan 2021 09:26:59 +0000 (10:26 +0100)]
Update copyright years.

3 years agoAdd AMD and Ulf Adams as external authors
Jakub Jelinek [Mon, 4 Jan 2021 09:23:07 +0000 (10:23 +0100)]
Add AMD and Ulf Adams as external authors

* update-copyright.py: Add AMD and Ulf Adams as external authors.

3 years agoRemove duplicate ChangeLog entries.
Martin Liska [Mon, 4 Jan 2021 09:17:18 +0000 (10:17 +0100)]
Remove duplicate ChangeLog entries.

gcc/fortran/ChangeLog:

* ChangeLog-2018: Remove duplicate ChangeLog entries.

3 years agoFix up indentation in update-copyright.py
Jakub Jelinek [Mon, 4 Jan 2021 09:16:13 +0000 (10:16 +0100)]
Fix up indentation in update-copyright.py

* update-copyright.py: Use 8 spaces instead of tab to indent.

3 years agomklog.py: add --update-copyright option
Martin Liska [Mon, 4 Jan 2021 08:58:28 +0000 (09:58 +0100)]
mklog.py: add --update-copyright option

contrib/ChangeLog:

* mklog.py: Add --update-copyright option which adds:
"Update copyright years." to ChangeLog files belonging
to a modified file.

3 years agogcc-changelog: Ignore copyright years commits.
Martin Liska [Mon, 4 Jan 2021 08:53:58 +0000 (09:53 +0100)]
gcc-changelog: Ignore copyright years commits.

contrib/ChangeLog:

* gcc-changelog/git_commit.py: Skip Update copyright
years commits.

3 years agoRemove duplicated ChangeLog entries from po/ChangeLog
Jakub Jelinek [Mon, 4 Jan 2021 09:07:07 +0000 (10:07 +0100)]
Remove duplicated ChangeLog entries from po/ChangeLog

to undo broken https://gcc.gnu.org/git/?p=gcc.git;a=blobdiff;f=gcc/po/ChangeLog;h=9f4bf9a8e3a34266e521e24be1adbba52f31e8d3;hp=5f5f8f70e44a374d3a8a615abc6cddc6642982a3;hb=818ab71a415cd234be092111a0aa5e812ec56434;hpb=21fa2a29dc265ab54c957c37d8a9e9ab07d7cd66
change.

3 years agoFix -save-temp leaking lto files in /tmp
Bernd Edlinger [Sun, 13 Dec 2020 07:24:57 +0000 (08:24 +0100)]
Fix -save-temp leaking lto files in /tmp

When linking with -flto and -save-temps, various
temporary files are created in /tmp.
The same happens when invoking the driver with @file
parameter, and using -L or -I options.

gcc:
2021-01-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* collect-utils.c (collect_execute): Check dumppfx.
* collect2.c (maybe_run_lto_and_relink, do_link): Pass atsuffix
to collect_execute.
(do_link): Add new parameter atsuffix.
(main): Handle -dumpdir option.  Skip one argument for
-o, -isystem and -B options.
* gcc.c (make_at_file): New helper function.
(close_at_file): Use it.

gcc/testsuite:
2021-01-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* gcc.misc-tests/outputs.exp: Adjust testcase.

3 years agoUpdate Copyright in ChangeLog files
Jakub Jelinek [Mon, 4 Jan 2021 08:35:45 +0000 (09:35 +0100)]
Update Copyright in ChangeLog files

Do this separately from all other Copyright updates, as ChangeLog files
can be modified only separately.

3 years agoDaily bump.
GCC Administrator [Mon, 4 Jan 2021 00:16:18 +0000 (00:16 +0000)]
Daily bump.

3 years agoBump copyright year
Eric Botcazou [Sun, 3 Jan 2021 12:43:01 +0000 (13:43 +0100)]
Bump copyright year

gcc/ada/
* gnatvsn.ads: Bump copyright year.

3 years agoconfig: import pkg.m4 from pkg-config
Mike Frysinger [Mon, 24 Dec 2012 02:12:26 +0000 (21:12 -0500)]
config: import pkg.m4 from pkg-config

We use this in the sim tree currently.  Rather than require people to
have pkg-config installed, include it in the config/ dir.

config/ChangeLog:

* pkg.m4: New file from pkg-config-0.29.2.

3 years agolibiberty.h: punt duplicate strverscmp prototype
Mike Frysinger [Thu, 13 Feb 2020 05:24:52 +0000 (00:24 -0500)]
libiberty.h: punt duplicate strverscmp prototype

SVN r216772 accidentally copied & pasted this prototype when adding
other ones nearby.

include/ChangeLog:

* libiberty.h (strverscmp): Delete duplicate prototype.

3 years agoDaily bump.
GCC Administrator [Sun, 3 Jan 2021 00:16:20 +0000 (00:16 +0000)]
Daily bump.

3 years agoDarwin : Adjust defaults for the linker.
Iain Sandoe [Thu, 31 Dec 2020 14:51:56 +0000 (14:51 +0000)]
Darwin : Adjust defaults for the linker.

Ideally, the linker will be queried for its version and that will be
used to determine capabilities that cannot be discovered from
reasonable configuration testing.

When building cross tools, this might not be possible, and we have
strategies for providing useful defaults.  These are adjusted here to
refect current choices.

gcc/ChangeLog:

* config/darwin.h (MIN_LD64_NO_COAL_SECTS): Adjust.
Amend handling for LD64_VERSION fallback defaults.

3 years agoDarwin, Simplify headers 4/5 : Remove redundant headers.
Iain Sandoe [Thu, 31 Dec 2020 14:43:00 +0000 (14:43 +0000)]
Darwin, Simplify headers 4/5 : Remove redundant headers.

The darwinN.h headers (with the sole exception of darwin7.h,
which contains a target macro definition) now only contain
values that set fall-backs for cross-compilations, these can
be provided from the config.gcc script which means we no longer
need the darwinN.h - so delete them.

gcc/ChangeLog:

* config.gcc: Compute default version information
from the configured target.  Likewise defaults for
ld64.
* config/darwin10.h: Removed.
* config/darwin12.h: Removed.
* config/darwin9.h: Removed.
* config/rs6000/darwin8.h: Removed.

3 years agoDarwin, Simplify headers 3/5 : Delete dead code.
Iain Sandoe [Thu, 31 Dec 2020 09:31:04 +0000 (09:31 +0000)]
Darwin, Simplify headers 3/5 : Delete dead code.

Darwin defines ASM_OUTPUT_ALIGNED_DECL_COMMON which is used in
preference to ASM_OUTPUT_ALIGNED_COMMON, which makes the latter
definition dead code.  Remove this.

gcc/ChangeLog:

* config/darwin9.h (ASM_OUTPUT_ALIGNED_COMMON): Delete.

3 years agoDarwin, Simplify headers 2/5 : Move spec for STACK_CHECK_STATIC_BUILTIN.
Iain Sandoe [Wed, 30 Dec 2020 18:03:24 +0000 (18:03 +0000)]
Darwin, Simplify headers 2/5 : Move spec for STACK_CHECK_STATIC_BUILTIN.

We now need a modern (C++11) toolchain to bootstrap GCC, so there's no
need to skip the stack protect for Darwin < 9.

gcc/ChangeLog:

* config/darwin9.h (STACK_CHECK_STATIC_BUILTIN): Move from here..
* config/darwin.h (STACK_CHECK_STATIC_BUILTIN): .. to here.

3 years agoDarwin, Simplify headers 1/5 : Move LINK_GCC_C_SEQUENCE_SPEC [NFC].
Iain Sandoe [Wed, 30 Dec 2020 17:59:42 +0000 (17:59 +0000)]
Darwin, Simplify headers 1/5 : Move LINK_GCC_C_SEQUENCE_SPEC [NFC].

There is no need to make the LINK_GCC_C_SEQUENCE_SPEC conditional on
configuration parameters, it is adequately conditionalized on the
macosx-version-min.

gcc/ChangeLog:

* config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Move from
here...
* config/darwin.h (LINK_GCC_C_SEQUENCE_SPEC): ... to here.

3 years agoDarwin, Simplify headers 0/5 : Move spec for Darwin 10 unwind stub [NFC].
Iain Sandoe [Wed, 30 Dec 2020 16:56:12 +0000 (16:56 +0000)]
Darwin, Simplify headers 0/5 : Move spec for Darwin 10 unwind stub [NFC].

The darwinN.h headers were (presumably) introduced to allow specs to be
adjusted when there was no mmacosx-version-min handling, or that was
considered unreliable.

We have version-specific specs for the values that have configuration
data, and the version is set in the driver (so may be considered
reliably present).

Some of the 'darwinN.h' content has become dead code, and the reminder
is either conditionalised on version information (or is setting values
used as fall-backs in cross-compilations).

With the changes needed for Darwin20 / macOS 11 the 'darwnN.h' headers
are now too unwieldy to be useful - so this series moves the relevant
specs definitons to the common 'darwin.h' header and then finally uses
the config.gcc script to supply the fall-back defaults for cross-
compilations.

We can then delete all but the main header, since the darwinN.h are
unused.

This change moves a spec from darwin10.h to the main darwin.h
target header.

gcc/ChangeLog:

* config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Move the spec
for the Darwin10 unwinder stub from here ...
* config/darwin.h (LINK_COMMAND_SPEC_A): ... to here.

3 years agoDarwin : Adjust defaults for current bootstrap constraints.
Iain Sandoe [Wed, 30 Dec 2020 10:36:52 +0000 (10:36 +0000)]
Darwin : Adjust defaults for current bootstrap constraints.

The toolchain now requires a C++11 compiler to bootstrap and
none of the older Darwin toolchains which were based on stabs
debugging are suitable.  We can simplify the debug setup now.

gcc/ChangeLog:

* config/darwin.h (DSYMUTIL_SPEC): Default to DWARF
(ASM_DEBUG_SPEC):Only define if the assembler supports
stabs.
(PREFERRED_DEBUGGING_TYPE): Default to DWARF.
(DARWIN_PREFER_DWARF): Define.
* config/darwin9.h (PREFERRED_DEBUGGING_TYPE): Remove.
(DARWIN_PREFER_DWARF): Likewise
(DSYMUTIL_SPEC): Likewise.
(COLLECT_RUN_DSYMUTIL): Likewise.
(ASM_DEBUG_SPEC): Likewise.
(ASM_DEBUG_OPTION_SPEC): Likewise.

3 years agoggc_free basic blocks
Jan Hubicka [Sat, 2 Jan 2021 15:05:17 +0000 (16:05 +0100)]
ggc_free basic blocks

* cfg.c (free_block): ggc_free bb.

3 years agoFree datastructures pointing to CFG after parsing
Jan Hubicka [Sat, 2 Jan 2021 15:03:41 +0000 (16:03 +0100)]
Free datastructures pointing to CFG after parsing

* cp-tree.h (cp_tree_c_finish_parsing): Declare.
* decl2.c (c_parse_final_cleanups): Call cp_tree_c_finish_parsing.
* tree.c (cp_tree_c_finish_parsing): New function.

3 years agoDaily bump.
GCC Administrator [Sat, 2 Jan 2021 00:16:24 +0000 (00:16 +0000)]
Daily bump.

3 years agointernal/cpu: add aarch64 support functions
Ian Lance Taylor [Fri, 1 Jan 2021 20:05:39 +0000 (12:05 -0800)]
internal/cpu: add aarch64 support functions

Patch from Andreas Schwab.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/281000

3 years agoruntime: move startupRandomData back to runtime2.go
Ian Lance Taylor [Fri, 1 Jan 2021 19:51:50 +0000 (11:51 -0800)]
runtime: move startupRandomData back to runtime2.go

In libgo it's referenced from os_gccgo.go on all platforms.

Fixes go/98496

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/280999

3 years agointernal/cpu, golang.org/x/sys/cpu: support other GOARCH values
Ian Lance Taylor [Thu, 31 Dec 2020 19:23:30 +0000 (11:23 -0800)]
internal/cpu, golang.org/x/sys/cpu: support other GOARCH values

Add support (mostly dummy support) for GOARCH values supported by
gofrontend but not gc.  Fix PPC handling.

Fixes https://gcc.gnu.org/PR98493

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/280932

3 years agoPR fortran/96381 - invalid read in gfc_find_derived_vtab
Harald Anlauf [Fri, 1 Jan 2021 17:55:41 +0000 (18:55 +0100)]
PR fortran/96381 - invalid read in gfc_find_derived_vtab

An invalid declaration of a CLASS instance can lead to an internal state
with inconsistent attributes during parsing that needs to be handled with
sufficient care when processing subsequent statements.  Avoid a lookup of
the vtab entry for such cases.

gcc/fortran/ChangeLog:

* class.c (gfc_find_vtab): Add check on attribute is_class.

3 years agoUpdate copyright dates.
Jakub Jelinek [Fri, 1 Jan 2021 16:42:37 +0000 (17:42 +0100)]
Update copyright dates.

Manual part of copyright year updates.

2021-01-01  Jakub Jelinek  <jakub@redhat.com>

gcc/
* gcc.c (process_command): Update copyright notice dates.
* gcov-dump.c (print_version): Ditto.
* gcov.c (print_version): Ditto.
* gcov-tool.c (print_version): Ditto.
* gengtype.c (create_file): Ditto.
* doc/cpp.texi: Bump @copying's copyright year.
* doc/cppinternals.texi: Ditto.
* doc/gcc.texi: Ditto.
* doc/gccint.texi: Ditto.
* doc/gcov.texi: Ditto.
* doc/install.texi: Ditto.
* doc/invoke.texi: Ditto.
gcc/ada/
* gnat_ugn.texi: Bump @copying's copyright year.
* gnat_rm.texi: Likewise.
gcc/d/
* gdc.texi: Bump @copyrights-d year.
gcc/fortran/
* gfortranspec.c (lang_specific_driver): Update copyright notice
dates.
* gfc-internals.texi: Bump @copying's copyright year.
* gfortran.texi: Ditto.
* intrinsic.texi: Ditto.
* invoke.texi: Ditto.
gcc/go/
* gccgo.texi: Bump @copyrights-go year.
libgomp/
* libgomp.texi: Bump @copying's copyright year.
libitm/
* libitm.texi: Bump @copying's copyright year.
libquadmath/
* libquadmath.texi: Bump @copying's copyright year.

3 years agoRotate ChangeLog files - step 2 - remove 2020 entries from ChangeLog files.
Jakub Jelinek [Fri, 1 Jan 2021 16:30:04 +0000 (17:30 +0100)]
Rotate ChangeLog files - step 2 - remove 2020 entries from ChangeLog files.

Can't be committed together with the previous one due to the ChangeLog vs.
other files restrictions.

3 years agoRotate ChangeLog files - part 1 - add ChangeLog-2020.
Jakub Jelinek [Fri, 1 Jan 2021 16:26:04 +0000 (17:26 +0100)]
Rotate ChangeLog files - part 1 - add ChangeLog-2020.

2021-01-01  Jakub Jelinek  <jakub@redhat.com>

gcc/
* ChangeLog-2020: Rotate ChangeLog.  New file.
gcc/ada/
* ChangeLog-2020: Rotate ChangeLog.  New file.
gcc/cp/
* ChangeLog-2020: Rotate ChangeLog.  New file.
gcc/d/
* ChangeLog-2020: Rotate ChangeLog.  New file.
gcc/fortran/
* ChangeLog-2020: Rotate ChangeLog.  New file.
gcc/testsuite/
* ChangeLog-2020: Rotate ChangeLog.  New file.
libgfortran/
* ChangeLog-2020: Rotate ChangeLog.  New file.
libstdc++-v3/
* ChangeLog-2020: Rotate ChangeLog.  New file.

3 years agodisable some aapcs/vfp*.c test if not arm_fp16_alternative_ok
Joel Brobecker [Fri, 1 Jan 2021 00:38:03 +0000 (21:38 -0300)]
disable some aapcs/vfp*.c test if not arm_fp16_alternative_ok

The tests use -mfp16-format=alternative, and so should not be run
if that option isn't supported.

for  gcc/testsuite/ChangeLog

* lib/target-supports.exp
(check_effective_target_arm_fp16_alternative_ok_nocache):
Return zero for *-*-vxworks7r* targets.
* gcc.target/arm/aapcs/vfp22.c: Require arm_fp16_alternative_ok.
* gcc.target/arm/aapcs/vfp23.c: Likewise.
* gcc.target/arm/aapcs/vfp24.c: Likewise.
* gcc.target/arm/aapcs/vfp25.c: Likewise.

3 years agofix testsuite/g++.dg/init/new26.C for C++-14 and later
Jerome Lambourg [Fri, 1 Jan 2021 00:37:48 +0000 (21:37 -0300)]
fix testsuite/g++.dg/init/new26.C for C++-14 and later

This test fails during the execution on VxWorks 7 when using
C++-14 and C++-17.

for  gcc/testsuite/ChangeLog

* g++.dg/init/new26.C: Fix overriding of the delete operator
for c++14 profile.

3 years agog++.dg/tls/pr79288.C: Skip on vxworks_kernel (TLS model not supported)
Jerome Lambourg [Fri, 1 Jan 2021 00:38:13 +0000 (21:38 -0300)]
g++.dg/tls/pr79288.C: Skip on vxworks_kernel (TLS model not supported)

The only TLS model supported in VxWorks kernel mode is local-exec.

for  gcc/testsuite/ChangeLog

* g++.dg/tls/pr79288.C: Skip on vxworks_kernel (TLS model
not supported).

3 years agocompile gcc.target/arm/{pr78255-2.c,memset-inline-2.c} with -mno-long-calls
Joel Brobecker [Fri, 1 Jan 2021 00:38:05 +0000 (21:38 -0300)]
compile gcc.target/arm/{pr78255-2.c,memset-inline-2.c} with -mno-long-calls

If the target is configured such that -mlong-call is passed
by default, the function calls these tests are trying to detect
by scanning the assembly file are performed using long calls,
like so:

    | foo:
    |     @ memset-inline-2.c:12:   memset (a, -1, 14);
    |         mov     r2, #14 @,
    |         mvn     r1, #0  @,
    |         ldr     r0, .L2 @,
    |         ldr     r3, .L2+4       @ tmp112,
    |         bx      r3              @ tmp112

Looking at .L2 (and in particular at .L2+4):

    | .L2:
    |         .word   a
    |         .word   memset   <<<---

This change adds -mno-long-calls to the list of compiler options
to make sure we generate short call code, allowing the assembly
matching to pass.

This is added unconditionally to the dg-options (as opposed to using
dg-additional-options) because this test is already specific to ARM
targets, and -mno-long-calls is available on all ARM targets.

for  gcc/testsuite/ChangeLog

* gcc.target/arm/memset-inline-2.c: Add -mno-long-calls to
the test's dg-options.
* gcc.target/arm/pr78255-2.c: Likewise.

3 years agoFix testsuite/g++.old-deja/g++.mike/p658.C build failure on VxWorks RTP
Jerome Lambourg [Fri, 1 Jan 2021 00:38:00 +0000 (21:38 -0300)]
Fix testsuite/g++.old-deja/g++.mike/p658.C build failure on VxWorks RTP

The conflicting definition of OK is present in VxWorks RTP headers too.

for  gcc/testsuite/ChangeLog

* g++.old-deja/g++.mike/p658.C: Also undefine OK on VxWorks RTP.

3 years agoFix testsuite/g++.dg/opt/20050511-1.C compilation error on VxWorks 7
Jerome Lambourg [Fri, 1 Jan 2021 00:37:59 +0000 (21:37 -0300)]
Fix testsuite/g++.dg/opt/20050511-1.C compilation error on VxWorks 7

In VxWorks 7, UINT32 is defined in both modes, kernel and rtp.  Adjust
the work around accordingly.

for  gcc/testsuite/ChangeLog

* g++.dg/opt/20050511-1.C: Work around UINT32 in vxworks rtp
headers too.

3 years agoSkip testsuite/g++.old-deja/g++.pt/const2.C on vxworks_kernel
Jerome Lambourg [Fri, 1 Jan 2021 00:37:56 +0000 (21:37 -0300)]
Skip testsuite/g++.old-deja/g++.pt/const2.C on vxworks_kernel

Linking in vxworks kernel-mode is partial linking, so missing symbols
are not detected.

for  gcc/testsuite/ChangeLog

* g++.old-deja/g++.pt/const2.C: Skip on vxworks kernel.

3 years agoRemove VxWorks-specific test directives in g++.dg/warn/miss-format-1.C
Jerome Lambourg [Fri, 1 Jan 2021 00:37:54 +0000 (21:37 -0300)]
Remove VxWorks-specific test directives in g++.dg/warn/miss-format-1.C

These are no longer applicable.

for  gcc/testsuite/ChangeLog

* g++.dg/warn/miss-format-1.C: Remove vxworks-specific test
directives.

3 years agoUndefine ERROR in g++.dg/tree-ssa/copyprop.C
Jerome Lambourg [Fri, 1 Jan 2021 04:55:01 +0000 (01:55 -0300)]
Undefine ERROR in g++.dg/tree-ssa/copyprop.C

VxWorks headers define ERROR as a macro, which conflicts with the use
in the test.

for  gcc/testsuite/ChangeLog

* g++.dg/tree-ssa/copyprop.C: Undefine ERROR if defined.

3 years agoskip testsuite/g++.dg/other/anon5.C on vxworks_kernel targets
Jerome Lambourg [Fri, 1 Jan 2021 04:55:00 +0000 (01:55 -0300)]
skip testsuite/g++.dg/other/anon5.C on vxworks_kernel targets

The vxworks kernel-mode linking is partial linking, so it cannot
detect missing symbols.

for  gcc/testsuite/ChangeLog

* g++.dg/other/anon5.C: Skip on vxworks kernel.

3 years agoAdd conditions on VxWorks versions for gcc.dg/vxworks/initpri?.c
Jerome Lambourg [Fri, 1 Jan 2021 04:54:59 +0000 (01:54 -0300)]
Add conditions on VxWorks versions for gcc.dg/vxworks/initpri?.c

Adjust vxworks initpri expectations, given that vxworks7 has switched
to .init_array.

for  gcc/testsuite/ChangeLog

* gcc.dg/vxworks/initpri1.c: Tigthen VxWorks version check.
* gcc.dg/vxworks/initpri2.c: Likewise.

3 years agogcc.dg/intmax_t-1.c compiles without error on VxWorks 7 SR06x0
Joel Brobecker [Fri, 1 Jan 2021 04:54:58 +0000 (01:54 -0300)]
gcc.dg/intmax_t-1.c compiles without error on VxWorks 7 SR06x0

This test currently fails on VxWorks 7 SR06x0 targets when in kernel
mode, because it expects a discrepancy between built-in and system
intmax_t for all VxWorks targets when in kernel mode.  Fortunately,
this has now been fixed when targetting VxWorks 7 SR06x0, so this
commit adjusts the "dg-error" condition to exclude newer versions of
VxWorks 7.

for  gcc/testsuite/ChangeLog

* gcc.dg/intmax_t-1.c: Do not expect an error on *-*-vxworks7r*
targets.

3 years agoFix VxWorks xfail filters on pthread-init-?.c
Olivier Hainque [Fri, 1 Jan 2021 04:54:57 +0000 (01:54 -0300)]
Fix VxWorks xfail filters on pthread-init-?.c

Match xfail on kernel instead of rtp mode.

for  gcc/testsuite/changeLog

* gcc.dg/pthread-init-1.c: Fix the VxWorks xfail filters.
* gcc.dg/pthread-init-2.c: Ditto.

3 years agoAdd missing vxworks filters to lib/target-supports.exp functions
Olivier Hainque [Fri, 1 Jan 2021 00:37:42 +0000 (21:37 -0300)]
Add missing vxworks filters to lib/target-supports.exp functions

Explicitly disable some vxworks-missing features in the testsuite, that
the current feature tests detect as present.

for  gcc/testsuite/ChangeLog

* lib/target-supports.exp (check_weak_available,
check_fork_available, check_effective_target_lto,
check_effective_target_mempcpy): Add vxworks filters.

3 years ago-mno-long-calls for mve_libcall tests
Alexandre Oliva [Fri, 1 Jan 2021 00:38:27 +0000 (21:38 -0300)]
-mno-long-calls for mve_libcall tests

The implicit -mlong-calls used in our vxworks configurations changes
the call sequences from those expected in the mve_libcall testcases.

This patch brings the test output in line with the expectations, with
an explicit -mno-long-calls.

for  gcc/testsuite/ChangeLog

* gcc.target/arm/mve/intrinsics/mve_libcall1.c: Pass an
explicit -mno-long-calls.
* gcc.target/arm/mve/intrinsics/mve_libcall2.c: Likewise.

3 years ago-mno-long-calls for arm/no_unique_address tests
Alexandre Oliva [Fri, 1 Jan 2021 00:38:24 +0000 (21:38 -0300)]
-mno-long-calls for arm/no_unique_address tests

The implicit -mlong-calls from our vxworks configurations makes the
tail-call instructions differ from those expected by the
no_unique_address tests in gcc.target/arm.

This patch adds -mno-long-calls to the compilation commands, so that
we generate the expected sequences.

for  gcc/testsuite/ChangeLog

* g++.target/arm/no_unique_address_1.C: Add -mno-long-calls.
* g++.target/arm/no_unique_address_2.C: Likewise.

3 years ago-mno-long-calls for arm/headmerge tests
Alexandre Oliva [Fri, 1 Jan 2021 00:38:23 +0000 (21:38 -0300)]
-mno-long-calls for arm/headmerge tests

The headmerge tests pass a constant to conditional calls, so that the
same constant is always passed to a function, though it's a different
function depending on which path is taken.

The test checks that the constant appears only once in the assembly
output, as a means to verify that the insns setting up the argument
are unified: they appear as separate insns up to jump2, where
crossjump identifies a common prefix to all conditional paths and
unifies them.

Alas, with -mlong-calls, that we enable in our arm-vxworks
configurations, the argument register is loaded after loading the
callee address into another register.  Since each path calls a
different function, there's no common initial code sequence for
crossjump to unify, and the argument register set up remains separate,
so the test fails.

Though it would surely be desirable for the compiler to perform the
unification of the argument register setting up, this patch merely
avoids the effects of -mlong-calls, with an explicit -mno-long-calls.

for  gcc/testsuite/ChangeLog

* gcc.target/arm/headmerge-1.c: Add -mno-long-calls.
* gcc.target/arm/headmerge-2.c: Likewise.

3 years ago-mno-long-calls for expected regalloc in arm/fp16-aapcs-2.c test
Alexandre Oliva [Fri, 1 Jan 2021 00:38:22 +0000 (21:38 -0300)]
-mno-long-calls for expected regalloc in arm/fp16-aapcs-2.c test

The implicit -mlong-calls used in our arm-vxworks configurations
changes the register allocation patterns in the arm/fp16-aapcs-2.c
test: r3 ends up used in the long-call sequence, and we end up using
ip as a temporary, which doesn't match the expected mov patterns.

This patch adds an explicit -mno-long-calls for the generated code to
match the expectation.

for  gcc/testsuite/ChangeLog

* gcc.target/arm/fp16-aapcs-2.c: Use -mno-long-calls.