gcc/ada/
* aspects.ads (No_Task_Parts): New aspect.
* snames.ads-tmpl: Add the aspect name.
* exp_ch6.adb (Might_Have_Tasks): Return False if this is a
class-wide type whose specific type has No_Task_Parts.
* freeze.adb (Check_No_Parts_Violations): This is an adaptation
of the procedure formerly known as
Check_No_Controlled_Parts_Violations, which now supports both
No_Controlled_Parts and No_Task_Parts. It takes a parameter
indicating which aspect is being checked.
(Freeze_Entity): Call Check_No_Parts_Violations for both
aspects.
* sem_ch13.adb (Analyze_Aspect_Specifications): The code for
Aspect_No_Controlled_Parts already works as is with
Aspect_No_Task_Parts.
* libgnat/a-iteint.ads: Add No_Task_Parts aspect to the two
iterator iterfaces.
* doc/gnat_rm/implementation_defined_aspects.rst: Add
documentation for the No_Task_Parts aspect.
* gnat_rm.texi: Regenerate.
gcc/ada/
* Make-generated.in: Add rule to copy runtime files needed
during stage1.
* raise.c: Remove obsolete symbols used during bootstrap.
* gcc-interface/Make-lang.in: Do not use libgnat sources during
stage1.
(GNAT_ADA_OBJS, GNATBIND_OBJS): Split in two parts, the common
part and the part only used outside of stage1.
(ADA_GENERATED_FILES): Add runtime files needed during bootstrap
when recent APIs are needed.
(ada/b_gnatb.adb): Remove prerequisite.
* gcc-interface/system.ads: Remove obsolete entries.
gcc/ada/
* sem_util.adb (Is_Confirming): Separate the handling of
Implicit_Dereference, for which no pragma is generated but which
is already checked for legality in Sem_Ch13, including renamed
discriminants in a derived type.
(Is_Confirming, Same_Name): For expanded names, only check
matching of selector, because prefix may correspond to original
and derived types with different names and/or scopes. Semantic
checks on aspect expression have already verified its legality.
Add comments regarding possible gaps in RM description of the
feature.
gcc/ada/
* freeze.adb (Freeze_Subprogram): Don't propagate conventions
Intrinsic or Entry to anonymous access-to-subprogram types
associated with subprograms having those conventions. Update
related comment.
* sem_attr.adb (Resolve_Attribute, Attribute_*Access): Remove
special-case warning code for cases where a called subprogram
has convention Intrinsic as well as its formal's type (the
expected type for the Access attribute), since this case can no
longer occur.
gcc/ada/
* doc/gnat_rm/intrinsic_subprograms.rst: More details on shift
operations for signed types. Also add the missing Import and
Convention on the example.
* gnat_rm.texi: Regenerate.
gcc/ada/
* argv.c: Add include of <stdlib.h> for the runtime.
(gnat_argv): Change type to char ** and initialize to NULL.
(gnat_envp): Likewise.
* argv-lynxos178-raven-cert.c: Add include of <stdlib.h>.
(gnat_argv): Change type to char ** and initialize to NULL.
(gnat_envp): Likewise.
gcc/ada/
* sem_eval.adb (Eval_Logical_Op, Test_Expression_Is_Foldable):
Add support for folding more "and"/"or" expressions.
* exp_util.adb (Side_Effect_Free): Fix handling of membership
tests.
gcc/ada/
* sem_res.adb (Resolve_Actual): Replace repeated calls to
"Etype (F)" with references to "F_Typ", which keeps the results
of exactly that call.
gcc/ada/
* gen_il-gen.adb (To_Bit_Offset): Use 'Base to avoid overflow in
computations in Last_Bit when Offset = 'Last.
(Choose_Offset): Give a better error message when we run out of
fields. In particular, point out that
Gen_IL.Internals.Bit_Offset'Last needs to be increased.
gcc/ada/
* atree.ads, einfo-utils.ads, einfo-utils.adb, fe.h, gen_il.adb,
gen_il.ads, gen_il-gen-gen_entities.adb,
gen_il-gen-gen_nodes.adb, sem_ch12.adb, sem_ch3.adb,
sem_util.adb, sinfo-utils.ads, treepr.adb, types.ads: Clean up
??? comments and other comments.
* atree.adb: Clean up ??? comments and other comments.
(Validate_Node): Fix bug: "Off_0 (N) < Off_L (N)"
should be "Off_0 (N) <= Off_L (N)".
* gen_il-gen.adb, gen_il-gen.ads: Clean up ???
comments and other comments. Add support for getter-specific
and setter-specific preconditions. Detect the error of putting
a field in the wrong subrange. Misc cleanup.
(Node_Field vs. Entity_Field): Clean up Nmake. Improve
comments.
* gen_il-utils.ads: Misc cleanup. Move...
* gen_il-internals.ads: ... here.
* gen_il-utils.adb: Misc cleanup. Move...
* gen_il-internals.adb: ... here.
* gen_il-fields.ads: Move Was_Default_Init_Box_Association,
which was in the wrong subrange. Add comments. Misc cleanup.
* gen_il-types.ads: Add Named_Access_Kind.
* sinfo-cn.adb: Clean up ??? comments and other comments.
Remove redundant assertions.
* einfo.ads, sinfo.ads: Clean up ??? comments and other
comments. Remove all the comments indicating field offsets.
These are obsolete now that Gen_IL computes the offsets
automatically.
gcc/ada/
* sem_util.adb (Gather_Components): Factor the test that was
already being used to govern emitting a pre-Ada_2020 error
message into an expression function,
OK_Scope_For_Discrim_Value_Error_Messages. Call that new
function in two places: the point where the same test was being
performed previously, and in governing emission of a newer
Ada_2020 error message. In both cases, the out-mode parameter
Gather_Components.Report_Errors is set to True even if no error
messages are generated within Gather_Components.
* sem_util.ads: Correct a comment.
gcc/ada/
* sem_util.adb (Propagate_Invariant_Attributes): Call
Set_Has_Own_Invariants on the base type, because these are
Base_Type_Only. The problem is that the base type of a type is
indeed a base type when Set_Base_Type is called, but then the
type is mutated into a subtype in rare cases.
* atree.ads, atree.adb (Is_Entity): Export. Correct subtype of
parameter in body.
* gen_il-gen.adb: Improve getters so that "Pre => ..." can refer
to the value of the field. Put Warnings (Off) on some with
clauses that are not currently used, but might be used by such
Pre's.
gcc/ada/
* sem_ch3.adb (Access_Type_Declaration): Add comments to explain
the ordering of Mutate_Kind and Set_Directly_Designated_Type;
remove temporary setting of Ekind to E_Access_Type for building
_master objects, since now the Ekind is already set to its final
value. Move repeated code into Setup_Access_Type routine and use
it so that Process_Subtype is executed before mutating the kind
of the type entity.
* gen_il-gen-gen_entities.adb (Gen_Entities): Remove
Directly_Designated_Type from E_Void, E_Private_Record,
E_Limited_Private_Type and Incomplete_Kind; now it only belongs
to Access_Kind entities.
* sem_util.adb: Minor reformatting.
The following testcase ICEs, because we have a mode mismatch.
VEC_PACK_TRUNC_EXPR's operands have different modes from the result
(same vector mode size but twice as large element),
but we were passing non-NULL subtarget with the mode of the result
to the expansion of its arguments, so the VEC_PERM_EXPR in one of the
operands which had V8SImode operands and result had V16HImode target.
Fixed by clearing the subtarget if we are changing mode.
2021-06-15 Jakub Jelinek <jakub@redhat.com>
PR target/101046
* expr.c (expand_expr_real_2) <case VEC_PACK_FIX_TRUNC_EXPR,
case VEC_PACK_TRUNC_EXPR>: Clear subtarget when changing mode.
* gcc.target/i386/pr101046.c: New test.
The following makes irreducible region discovery handle multiple latches.
2021-06-14 Richard Biener <rguenther@suse.de>
* cfgloopanal.c (mark_irreducible_loops): Use a dominance
check to identify loop latches.
* cfgloop.c (verify_loop_structure): Likewise.
* loop-init.c (apply_loop_flags): Allow marked irreducible
regions even with multiple latches.
* predict.c (rebuild_frequencies): Simplify.
This adds an assert that would fire if any thread path registry
user runs into the check that relies on such regions marked.
2021-06-15 Richard Biener <rguenther@suse.de>
* tree-ssa-threadupdate.c
(jump_thread_path_registry::mark_threaded_blocks): Assert we
have marked irreducible regions.
There are several FAILs because we have an s390-specific check for a
warning which is not necessary anymore. Remove it.
Add a new test case that expects a warning about conflicting function
alignment. This would fail on s390 before but most likely on other
targets as well so it can be a target-independent test.
Also, add a test to verify that we do not emit a note when specifying
conflicting alignment for the same declaration. Need to explicitly
handle every dg-note because handling one disables dg-note pruning.
gcc/testsuite/ChangeLog:
* c-c++-common/Wattributes.c: Remove s390-specific check and add
new tests.
* gcc.dg/Wattributes-6.c: Likewise.
When re-declaring a function with differing attributes DECL_USER_ALIGN
is usually not merged/copied when DECL_ALIGN is similar. On s390 this
will cause a warning message not to be shown. Similarly, we warned
about the wrong alignment when short-circuiting an alignment initialization in
common_handle_aligned_attribute ().
Fix this by copying DECL_USER_ALIGN even if DECL_ALIGN is similar as
well as getting rid of the short-circuited initialization.
gcc/c-family/ChangeLog:
* c-attribs.c (common_handle_aligned_attribute): Remove short
circuit and dead code.
gcc/c/ChangeLog:
* c-decl.c (merge_decls): Copy DECL_USER_ALIGN if DECL_ALIGN is
similar.
gcc/cp/ChangeLog:
* decl.c (duplicate_decls): Likewise.
Tested pass, committing as obvious.
gcc/testsuite/ChangeLog:
2021-06-14 Xionghu Luo <luoxhu@linux.ibm.com>
PR target/101020
* gcc.target/powerpc/float128-call.c: Adjust counts for be and le.
Using an MMA builtin within an openmp parallel code block, leads to an SSA
verification ICE on the temporaries we create while expanding the MMA builtins
at gimple time. The solution is to use create_tmp_reg_or_ssa_name(), which
knows when to create either an SSA or register temporary.
2021-06-14 Peter Bergner <bergner@linux.ibm.com>
gcc/
PR target/100777
* config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Use
create_tmp_reg_or_ssa_name().
gcc/testsuite/
PR target/100777
* gcc.target/powerpc/pr100777.c: New test.
When utilzing poor values during propagation, we mostly care about values that
were undefined/processed directly used in calcualting the SSA_NAME being
processed. 2nd level derivations of such poor values rarely affect the
inital calculation. Leave them to when they are directly encountered.
* gimple-range-cache.cc (ranger_cache::ranger_cache): Adjust.
(ranger_cache::enable_new_values): Set to specified value and
return the old value.
(ranger_cache::disable_new_values): Delete.
(ranger_cache::fill_block_cache): Disable non 1st order derived
poor values.
* gimple-range-cache.h (ranger_cache): Adjust prototypes.
* gimple-range.cc (gimple_ranger::range_of_expr): Adjust.
The result of COMMON-REF(A&, B&&) where they have no common reference
type should not be a reference. The implementation of COMMON-REF fails
to check that the result is a reference, so is well-formed when it
shouldn't be. This means that common_reference uses that result when it
shouldn't.
The fix is to reject the result of COMMON-REF(A, B) if it's not a
reference, so that common_reference falls through to the next case,
which uses COND-RES, which yields a non-reference result.
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
PR libstdc++/100894
* include/std/type_traits (__common_ref_impl<X&, Y&>): Only
use the type if it's a reference.
* testsuite/20_util/common_reference/100894.cc: New test.
V2HImode *punpckwd should not be split to the insn that depends on
TARGET_MMX_WITH_SSE, since the later is disabled on 32bit targets.
Also return true early from ix86_vectorize_vec_perm_const when testing
with V2HI mode. *punpckwd can be used to implement all permutations.
2021-06-14 Uroš Bizjak <ubizjak@gmail.com>
gcc/
PR target/101058
* config/i386/i386-expand.c (ix86_vectorize_vec_perm_const):
Return true early when testing with V2HImode.
* config/i386/mmx.md (*punpckwd): Split to sse2_pshuflw_1.
gcc/testsuite/
PR target/101058
* gcc.target/i386/pr101058.c: New test.
This patch adds vec_unpack<US>_hi_<mode>, vec_unpack<US>_lo_<mode>,
vec_pack_trunc_<mode> patterns for MVE.
It does so by moving the unpack patterns from neon.md to
vec-common.md, while adding them support for MVE. The pack expander is
derived from the Neon one (which in turn is renamed into
neon_quad_vec_pack_trunc_<mode>).
The patch introduces mve_vec_unpack<US>_lo_<mode> and
mve_vec_unpack<US>_hi_<mode> which are similar to their Neon
counterparts, except for the assembly syntax.
The patch introduces mve_vec_pack_trunc_lo_<mode> to avoid the need for a
zero-initialized temporary, which is needed if the
vec_pack_trunc_<mode> expander calls @mve_vmovn[bt]q_<supf><mode>
instead.
With this patch, we can now vectorize the 16 and 8-bit versions of
vclz and vshl, although the generated code could still be improved.
For test_clz_s16, we now generate
vldrh.16 q3, [r1]
vmovlb.s16 q2, q3
vmovlt.s16 q3, q3
vclz.i32 q2, q2
vclz.i32 q3, q3
vmovnb.i32 q1, q2
vmovnt.i32 q1, q3
vstrh.16 q1, [r0]
which could be improved to
vldrh.16 q3, [r1]
vclz.i16 q1, q3
vstrh.16 q1, [r0]
if we could avoid the need for unpack/pack steps.
For reference, clang-12 generates:
vldrh.s32 q0, [r1]
vldrh.s32 q1, [r1, #8]
vclz.i32 q0, q0
vstrh.32 q0, [r0]
vclz.i32 q0, q1
vstrh.32 q0, [r0, #8]
2021-06-11 Christophe Lyon <christophe.lyon@linaro.org>
gcc/
* config/arm/mve.md (mve_vec_unpack<US>_lo_<mode>): New pattern.
(mve_vec_unpack<US>_hi_<mode>): New pattern.
(@mve_vec_pack_trunc_lo_<mode>): New pattern.
(mve_vmovntq_<supf><mode>): Prefix with '@'.
* config/arm/neon.md (vec_unpack<US>_hi_<mode>): Move to
vec-common.md.
(vec_unpack<US>_lo_<mode>): Likewise.
(vec_pack_trunc_<mode>): Rename to
neon_quad_vec_pack_trunc_<mode>.
* config/arm/vec-common.md (vec_unpack<US>_hi_<mode>): New
pattern.
(vec_unpack<US>_lo_<mode>): New.
(vec_pack_trunc_<mode>): New.
gcc/testsuite/
* gcc.target/arm/simd/mve-vclz.c: Update expected results.
* gcc.target/arm/simd/mve-vshl.c: Likewise.
* gcc.target/arm/simd/mve-vec-pack.c: New test.
* gcc.target/arm/simd/mve-vec-unpack.c: New test.
PR c/100913
gcc/c/ChangeLog:
* c-parser.c (c_parser_omp_clause_affinity): No need to set iterator
var in the error case.
gcc/cp/ChangeLog:
* parser.c (cp_parser_omp_clause_affinity): No need to set iterator
var in the error case.
The jump threading code requires marked irreducible regions for the
purpose of validating jump threading paths but DOM fails to provide
that resulting in mised number of iteration upper bounds clearing.
2021-06-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/100934
* tree-ssa-dom.c (pass_dominator::execute): Properly
mark irreducible regions.
* gcc.dg/torture/pr100934.c: New testcase.
This test has no -std option so when the testsuite is run with
-std=gnu++20 or later, this test will use that. The recent addition of
no_unique_address will cause it to FAIL, because that's a reserved word
after C++17. Add an explicit option, so that this test alays uses
exactly C++17.
libstdc++-v3/ChangeLog:
* testsuite/17_intro/headers/c++2017/all_attributes.cc: Add
-std=gnu++17 option.