EVRP records some ranges from asserts into SSA_NAME_RANGE_INFO
but fails to assert that the condition the range is derived from
is always true after the SSA names definition. The patch implements
the simplest post-dominance check, basic-block equality.
2020-11-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/97953
* gimple-ssa-evrp-analyze.c
(evrp_range_analyzer::record_ranges_from_incoming_edge): Make
sure the condition post-dominates the SSA definition before
recording into SSA_NAME_RANGE_INFO.
* gcc.dg/pr97953.c: New testcase.
This fixes the condition to match the comment and only lower
VECTOR_BOOLEAN_TYPE_P VEC_COND_EXPRs.
2020-11-26 Richard Biener <rguenther@suse.de>
* gimple-isel.cc (gimple_expand_vec_cond_expr): Only
lower VECTOR_BOOLEAN_TYPE_P VEC_COND_EXPRs.
The relocation symbols were inadvertantly wiped when the type was set in
mkoffload.
gcc/ChangeLog
* config/gcn/mkoffload.c (copy_early_debug_info): Don't wipe
relocation symbols.
There is no need for struct with rtx and mode members since mode is never used.
2020-11-26 Uroš Bizjak <ubizjak@gmail.com>
gcc/
* config/i386/i386-expand.c (ix86_expand_multi_arg_builtin):
Remove args array of structs, declare rtx xops array instead.
Update all uses.
(ix86_expand_args_builtin): Ditto.
(ix86_expand_round_builtin): Ditto.
(ix86_expand_special_args_builtin): Ditto.
I recently noticed that neither libposix4 nor librt are needed on
Solaris 11 any longer:
* libposix4 was renamed to librt in Solaris 7 back in 1998.
* librt was folded into libc in the OpenSolaris timeframe, leaving librt
only as a filter on libc. Thus, it's no longer needed on either
Solaris 11 or Illumos.
The following patch removes both uses. At the same time, Ada's use of
libthread has gone: it was folded into libc in Solaris 10 already.
TIME_LIBRARY and friends in g++ are likewise removed: Solaris was the
only user.
Bootstrapped without regressions on i386-pc-solaris2.11,
sparc-sun-solaris2.11, and x86_64-pc-linux-gnu.
2020-11-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
gcc/cp:
* g++spec.c (TIMELIB, TIME_LIBRARY): Remove.
(lang_specific_driver): Remove TIME_LIBRARY handling.
gcc:
* config/sol2.h (TIME_LIBRARY): Remove.
libstdc++-v3:
* acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Remove libposix4
references.
<solaris*>: Don't use -lrt any longer.
* configure: Regenerate.
* doc/xml/manual/configure.xml (--enable-libstdcxx-time=OPTION):
Remove libposix4 reference.
gcc/ada:
* Makefile.rtl <sparc*-sun-solaris*> (THREADSLIB): Remove.
(MISCLIB): Remove -lposix4.
<*86-*-solaris2*>: Likewise.
* libgnarl/s-osinte__solaris.ads (System.OS_Interface): Remove
-lposix4 -lthread.
We only need to check that the constructor doesn't clear errno, so
there's no need to use an invalid FILE* for that.
libstdc++-v3/ChangeLog:
PR libstdc++/98001
* testsuite/ext/stdio_filebuf/char/79820.cc: Do not pass invalid
FILE* to constructor.
Due to the unexpected performance on Power9 of those vector
with length instructions, we didn't enable vectorization with
partial vectors before.
Some recent testings show that they perform expectedly on
Power10 now. This patch is to set
param_vect_partial_vector_usage as 1 for P10 or later.
The performance evaluation on the whole SPEC2017 with option
set power10/Ofast/unroll shows it can speed up 525.x264_r by
10.80% and 554.roms_r by 1.94%.
Bootstrapped/regtested on powerpc64le-linux-gnu P10.
gcc/ChangeLog:
* config/rs6000/rs6000.c (rs6000_option_override_internal):
Set param_vect_partial_vector_usage as 1 for Power10 and up
by default.
On Wed, Nov 25, 2020 at 12:26:17PM -0500, Jason Merrill wrote:
> I think you want to check DECL_PADDING_P here; the C and C++ front ends set
> it on unnamed bit-fields, and that's what is_empty_type looks at.
While the above has been written in the context of __builtin_bit_cast patch,
I think it applies to __builtin_clear_padding too.
So this patch implements that. The C FE sets DECL_PADDING_P solely on the
DECL_BIT_FIELD !DECL_NAME FIELD_DECLs, the C++ FE sets it on those and in
another spot I haven't really figured out what it is about.
2020-11-26 Jakub Jelinek <jakub@redhat.com>
* gimple-fold.c (clear_padding_union): Ignore DECL_PADDING_P
fields.
(clear_padding_type): Ignore DECL_PADDING_P fields, rather than
DECL_BIT_FIELD with NULL DECL_NAME.
My recent wide_int_binop changes caused ICE on this testcase.
The problem is that for shift where amount has MSB set now fails to optimize
into a constant (IMHO we should treat out of bounds shifts the same later),
but there is a precedent for that already - e.g. division by zero fails
to optimize into a constant too. I think it is better if path isolation
checks for these UBs and does something the user chooses (__builtin_trap vs.
__builtin_unreachable, and either a deferred warning about the UB or
nothing).
This patch just doesn't optimize if int_const_binop failed.
2020-11-26 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/97979
* match.pd ((X {&,^,|} C2) << C1 into (X << C1) {&,^,|} (C2 << C1)):
Only optimize if int_const_binop returned non-NULL.
* gcc.dg/pr97979.c: New test.
* gcc.c-torture/compile/pr97979.c: New test.
This makes sure not to free() memory we have mprotected to PROT_NONE
by calling mprotect again with PROT_READ|PROT_WRITE. This avoids
crashing the allocator when in debug mode.
2020-11-16 Richard Biener <rguenther@suse.de>
PR testsuite/98002
* gcc.dg/strncmp-2.c: Call mprotect again before free.
This fixes a GCC 11, 10, 9 regression introduced by commit
dfd7fdca2a (Subversion r267272) "C++: more
location wrapper nodes (PR c++/43064, PR c++/43486)". But: this isn't
intending to blame David, because back then, the problem hasn't been visible in
the testsuite (or else I'm sure would've been addressed right away) because of
our all dear friend: missing testsuite coverage. Thus, for GCC 8, I'm likewise
enhancing the testsuite, without the C++ front end code changes.
I actually had presumed that there may be an issue for OpenACC:
<http://mid.mail-archive.com/874lb9qr2u.fsf@euler.schwinge.homeip.net>, so here
we are, two years (and many "wasted" hours...) later...
gcc/cp/
* parser.c (cp_parser_omp_var_list_no_open): Assert that array
section's 'low_bound', 'length' are not location wrapper nodes.
(cp_parser_oacc_all_clauses, cp_parser_oacc_cache): Instantiate
'auto_suppress_location_wrappers'.
gcc/testsuite/
* c-c++-common/goacc/cache-3-1.c: New.
* c-c++-common/goacc/cache-3-2.c: Likewise.
* c-c++-common/goacc/data-clause-1.c: Likewise.
* c-c++-common/goacc/data-clause-2.c: Likewise.
* c-c++-common/gomp/map-1.c: Adjust.
* c-c++-common/gomp/map-2.c: Likewise.
* g++.dg/goacc/cache-3-1.C: New.
* g++.dg/goacc/cache-3-2.C: Likewise.
* g++.dg/goacc/data-clause-1.C: Likewise.
* g++.dg/goacc/data-clause-2.C: Likewise.
* g++.dg/gomp/map-1.C: Adjust.
* g++.dg/gomp/map-2.C: Likewise.
Reported-by: Sandra Loosemore <sandra@codesourcery.com>
Generate special double mode sequence also for QImode and HImode.
Without QImode and HImode patterns, middle-end extends operands to SImode
and emits SImode conditional move instruction with paradoxical SImode output
register. This form is not recognized by STV pass, but a single abs with
input operand in a register would not be converted anyway due to relatively
high register conversion cost.
2020-11-26 Uroš Bizjak <ubizjak@gmail.com>
PR target/97873
gcc/
* config/i386/i386.md (abs<mode>2): Use SDWIM mode iterator.
(*abs<mode>2_1): Use SWI mode iterator.
(<maxmin:code><mode>3): Use SDWIM mode iterator.
(*<maxmin:code><mode>3_1): Use SWI mode iterator.
gcc/testsuite/
* gcc.target/i386/pr97873-3.c: New test.
gcc/ada/
* sem_ch6.adb (Analyze_Call_And_Resolve): Add information to the
error message on an illegal procedure call, when the illegality
is due to the presence of a component of the full view of the
target object, as well as a procedure with the same name (See RM
4.1.3 (9.2/3)).
gcc/ada/
* sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings):
when the restriction is a configuration pragma and specifies
No_Tasking, a global flag is set to reject task declarations,
and to prevent the construction of Master entities. The flag
must not be set if the pragma is a Restriction_Warning, in which
case task declarationns are allowed.
gcc/ada/
* libgnat/a-stzhas.adb (Wide_Wide_Hash): Instantiate inside a
wrapper function.
* libgnat/a-stzhas.ads (Wide_Wide_Hash): Likewise; remove wrong
comment, because this is indeed a RM unit, as described in Ada
RM A.4.8 (1/3).
gcc/ada/
* freeze.adb (Freeze_Array_Type): Remove propagation of
Has_Own_Invariants to the first subtype. This is a no-op,
because the current (incorrect) version of Has_Own_Invariants
calls Base_Type.
* sem_prag.adb, sem_util.adb: Pass the base type to
Set_Has_Own_Invariants.
gcc/ada/
* sem_ch12.adb (Instantiate_Formal_Package): If previous matched
entity is overloadable, advance in the list of actuals of the
actual package, to prevent an erroneous match of two adjacent
overloadable homonyms with the same entity.
gcc/ada/
* sem_ch6.adb (First_Selector): Utility routine to return the
first selector or choice in an association.
(Check_Return_Construct_Accessibility): Modify loop to handle
named associations when iterating through discriminants.
The following patch renames VI12_AVX2 iterator to VI12_AVX2_AVX512BW
for consistency with some other iterators, as I need VI12_AVX2 without
AVX512BW for this change.
The real meat is a combiner split which combine
can use to optimize psubusw compared to 0 into pminuw compared to op0
(and similarly for psubusb compared to 0 into pminub compared to op0).
According to Agner Fog's tables, psubus[bw] and pminu[bw] timings
are the same, but the advantage of pminu[bw] is that the comparison
doesn't need a zero operand, so e.g. for -msse4.1 it causes changes like
- psubusw %xmm1, %xmm0
- pxor %xmm1, %xmm1
+ pminuw %xmm0, %xmm1
pcmpeqw %xmm1, %xmm0
and similarly for avx2:
- vpsubusb %ymm1, %ymm0, %ymm0
- vpxor %xmm1, %xmm1, %xmm1
- vpcmpeqb %ymm1, %ymm0, %ymm0
+ vpminub %ymm1, %ymm0, %ymm1
+ vpcmpeqb %ymm0, %ymm1, %ymm0
I haven't done the AVX512{BW,VL} define_split(s), they'll need
to match the UNSPEC_PCMP which are used for avx512 comparisons.
2020-11-26 Jakub Jelinek <jakub@redhat.com>
PR target/96906
* config/i386/sse.md (VI12_AVX2): Remove V64QI/V32HI modes.
(VI12_AVX2_AVX512BW): New mode iterator.
(<sse2_avx2>_<plusminus_insn><mode>3<mask_name>,
uavg<mode>3_ceil, <sse2_avx2>_uavg<mode>3<mask_name>): Use
VI12_AVX2_AVX512BW iterator instead of VI12_AVX2.
(*<sse2_avx2>_<plusminus_insn><mode>3<mask_name>): Likewise.
(*<sse2_avx2>_uavg<mode>3<mask_name>): Likewise.
(*<sse2_avx2>_<plusminus_insn><mode>3<mask_name>): Add a new
define_split after this insn.
* gcc.target/i386/pr96906-1.c: New test.
2020-11-25 Martin Uecker <muecker@gwdg.de>
gcc/c/
PR c/65455
PR c/92935
* c-parser.c (c_parser_declaration_or_fndef): Remove
redundant code to drop qualifiers of _Atomic types for __auto_type.
(c_parser_typeof_specifier): Do not drop qualifiers of _Atomic
types for __typeof__.
gcc/
PR c/65455
PR c/92935
* ginclude/stdatomic.h: Use comma operator to drop qualifiers.
gcc/testsuite/
PR c/65455
PR c/92935
* gcc.dg/typeof-2.c: Adapt test.
nextafter-2.c builds nextafter-1.c with math.h, but nextafter-1.c
provides prototypes for the functions. The prototypes can conflict
with the definitions in math.h. This patch omits the prototypes
when compiling nextafer-2.c.
profile-info-section.c uses the profile-info-section flag that is not
valid on AIX, so skip the test on AIX.
gcc/testsuite/ChangeLog:
* gcc.dg/nextafter-1.c: Omit prototypes if _NEXT_AFTER_2 defined.
* gcc.dg/nextafter-2.c: Define _NEXT_AFTER_2.
* gcc.dg/profile-info-section.c: Skip on AIX.
gcc/
2020-11-25 Vladimir Makarov <vmakarov@redhat.com>
PR bootstrap/97983
* lra.c (lra_process_new_insns): Use emit_insn_before_noloc or
emit_insn_after_noloc with the destination BB.