aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-05-05aarch64: eliminate redundant zero extend after bitwise negationAlex Coplan4-0/+32
The attached patch eliminates a redundant zero extend from the AArch64 backend. Given the following C code: unsigned long long foo(unsigned a) { return ~a; } prior to this patch, AArch64 GCC at -O2 generates: foo: mvn w0, w0 uxtw x0, w0 ret but the uxtw is redundant, since the mvn clears the upper half of the x0 register. After applying this patch, GCC at -O2 gives: foo: mvn w0, w0 ret Testing: Added regression test which passes after applying the change to aarch64.md. Full bootstrap and regression on aarch64-linux with no additional failures. * config/aarch64/aarch64.md (*one_cmpl_zero_extend): New. * gcc.target/aarch64/mvn_zero_ext.c: New test.
2020-05-05match.pd: Canonicalize (x + (x << cst)) into (x * cst2) [PR94800]Jakub Jelinek7-0/+202
The popcount* testcases show yet another creative way to write popcount, but rather than adjusting the popcount matcher to deal with it, I think we just should canonicalize those (X + (X << C) to X * (1 + (1 << C)) and (X << C1) + (X << C2) to X * ((1 << C1) + (1 << C2)), because for multiplication we already have simplification rules that can handle nested multiplication (X * CST1 * CST2), while the the shifts and adds we have nothing like that. And user could have written the multiplication anyway, so if we don't emit the fastest or smallest code for the multiplication by constant, we should improve that. At least on the testcases seems the emitted code is reasonable according to cost, except that perhaps we could in some cases try to improve expansion of vector multiplication by uniform constant. 2020-05-05 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94800 * match.pd (X + (X << C) to X * (1 + (1 << C)), (X << C1) + (X << C2) to X * ((1 << C1) + (1 << C2))): New canonicalizations. * gcc.dg/tree-ssa/pr94800.c: New test. * gcc.dg/tree-ssa/popcount5.c: New test. * gcc.dg/tree-ssa/popcount5l.c: New test. * gcc.dg/tree-ssa/popcount5ll.c: New test.
2020-05-05x86: Fix *vec_dupv4hi constraints [PR94942]Jakub Jelinek4-2/+32
This insn and split splits into HI->V?HImode broadcast for avx2 and later, but either the operands need to be %xmm0-%xmm15 (i.e. VEX encoded insn), or the insn needs both AVX512BW and AVX512VL. Now, Yv constraint is v for AVX512VL and x otherwise, so for -mavx512vl -mno-avx512bw we ICE if we end up with a %xmm16+ register from RA. Yw constraint is v for AVX512VL and AVX512BW and nothing otherwise, so in this pattern we actually need xYw. 2020-05-05 Jakub Jelinek <jakub@redhat.com> PR target/94942 * config/i386/mmx.md (*vec_dupv4hi): Use xYw constraints instead of Yv. * gcc.target/i386/pr94942.c: New test.
2020-05-05match.pd: Optimize (((type)A * B) >> prec) != 0 into __imag__ .MUL_OVERFLOW ↵Jakub Jelinek4-0/+49
[PR94914] On x86 (the only target with umulv4_optab) one can use mull; seto to check for overflow instead of performing wider multiplication and performing comparison on the high bits. 2020-05-05 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94914 * match.pd ((((type)A * B) >> prec) != 0 to .MUL_OVERFLOW(A, B) != 0): New simplification. * gcc.target/i386/pr94914.c: New test.
2020-05-05i386: Use int_nonimmediate_operand moreUros Bizjak2-15/+16
Pattern explosing and manual mode checks can be avoided by using int_nonimmediate_operand special predicate. While there, rewrite *x86_mov<SWI48:mode>cc_0_m1_neg_leu<SWI:mode> to a combine pass splitter. * config/i386/i386.md (*testqi_ext_3): Use int_nonimmediate_operand instead of manual mode checks. (*x86_mov<SWI48:mode>cc_0_m1_neg_leu<SWI:mode>): Use int_nonimmediate_operand predicate. Rewrite define_insn_and_split pattern to a combine pass splitter.
2020-05-05fix build of targets not implementing add_stmt_costRichard Biener1-1/+2
C++ makes mismatched prototype and implementation OK. 2020-05-05 Richard Biener <rguenther@suse.de> * targhooks.h (default_add_stmt_cost): Add vec_info * parameter.
2020-05-05build: Fix 32-bit TLS detection with 64-bit-default gas on Solaris/x86Rainer Orth3-0/+15
I've recently tested i386-pc-solaris2.11 bootstrap on Solaris 11/x86 with only the bundled tools (using /usr/gnu/bin/as from binutils 2.30 in this case). It failed compiling libgo/runtime/proc.c, creating invalid assembly: proc.s: Assembler messages: proc.s:2092: Error: junk at end of line, first unrecognized character is `*' .globl __emutls_v.*runtime.g and several more errors. This is completely unexpected since Solaris does support TLS. It turned out that 32-bit TLS detection in gcc/configure had failed: configure:25145: checking assembler for thread-local storage support configure:25158: /usr/gnu/bin/as --fatal-warnings -o conftest.o conftest.s >&5 conftest.s: Assembler messages: conftest.s:6: Error: relocated field and relocation type differ in signedness conftest.s:7: Error: @TLSLDM reloc is not supported with 64-bit output format conftest.s:7: Error: junk `@tlsldm' after expression which isn't unexpected given that the bundled gas has been configured for x86_64-pc-solaris2.11, i.e. 64-bit-default. This is easily fixed by explicitly passing --32 for the 32-bit case, matching what is done for the 64-bit test. Tested on i386-pc-solaris2.11 with 32-bit-default and 64-bit-default gas as well as with /usr/bin/as, always correctly detecting TLS support. * configure.ac <i[34567]86-*-*>: Add --32 to tls_as_opt on Solaris. * configure: Regenerate.
2020-05-05add vec_info * parameters where neededRichard Biener16-1017/+1169
Soonish we'll get SLP nodes which have no corresponding scalar stmt and thus not stmt_vec_info and thus no way to get back to the associated vec_info. This patch makes the vec_info available as part of the APIs instead of putting in that back-pointer into the leaf data structures. 2020-05-05 Richard Biener <rguenther@suse.de> * tree-vectorizer.h (_stmt_vec_info::vinfo): Remove. (STMT_VINFO_LOOP_VINFO): Likewise. (STMT_VINFO_BB_VINFO): Likewise. * tree-vect-data-refs.c: Adjust for the above, adding vec_info * parameters and adjusting calls. * tree-vect-loop-manip.c: Likewise. * tree-vect-loop.c: Likewise. * tree-vect-patterns.c: Likewise. * tree-vect-slp.c: Likewise. * tree-vect-stmts.c: Likewise. * tree-vectorizer.c: Likewise. * target.def (add_stmt_cost): Add vec_info * parameter. * target.h (stmt_in_inner_loop_p): Likewise. * targhooks.c (default_add_stmt_cost): Adjust. * doc/tm.texi: Re-generate. * config/aarch64/aarch64.c (aarch64_extending_load_p): Add vec_info * parameter and adjust. (aarch64_sve_adjust_stmt_cost): Likewise. (aarch64_add_stmt_cost): Likewise. * config/arm/arm.c (arm_add_stmt_cost): Likewise. * config/i386/i386.c (ix86_add_stmt_cost): Likewise. * config/rs6000/rs6000.c (rs6000_add_stmt_cost): Likewise.
2020-05-05i386: Simplify {,v}ph{add,sub{,s}{w,d} insn patterns [PR94460]Jakub Jelinek2-185/+81
As mentioned in the previous PR94460 patch, the RTL patterns look too large/complicated, we can simplify them by just performing two 2 arg permutations to move the arguments into the right spots and then just doing the plus/minus (or signed saturation version thereof). 2020-05-05 Jakub Jelinek <jakub@redhat.com> PR target/94460 * config/i386/sse.md (avx2_ph<plusminus_mnemonic>wv16hi3, ssse3_ph<plusminus_mnemonic>wv8hi3, ssse3_ph<plusminus_mnemonic>wv4hi3, avx2_ph<plusminus_mnemonic>dv8si3, ssse3_ph<plusminus_mnemonic>dv4si3, ssse3_ph<plusminus_mnemonic>dv2si3): Simplify RTL patterns.
2020-05-05Daily bump.GCC Administrator1-1/+1
2020-05-04c++: Avoid unnecessary copying in cp_fold [PR94038]Patrick Palka4-23/+57
When folding a CALL_EXPR, we can avoid copying it until folding changes one of its arguments. And when folding a TREE_VEC, we can avoid using an intermediate releasing_vec by copying the TREE_VEC as soon as folding changes one of its arguments, like we do in the CALL_EXPR case. Incidentally, the CALL_EXPR change also fixes the testcase in PR94038. The reason is that the call to maybe_constant_value from cp_fold on the call 'bar<int>()' now reuses the result of the earlier call to maybe_constant_value from fold_for_warn, via the cv_cache. This earlier call passes uid_sensitive=true, whereas the call from cp_fold passes uid_sensitive=false, and so by reusing the cached result of the earlier call we now avoid instantiating bar<int> at all. gcc/cp/ChangeLog: PR c++/94038 * cp-gimplify.c (cp_fold) <case CALL_EXPR>: Move some variable declarations closer to their uses. Copy the CALL_EXPR only when one of its arguments has changed. <case TREE_VEC>: Instead of first collecting the folded arguments into a releasing_vec, just make a copy of the TREE_VEC as soon as folding changes one of its arguments. gcc/testsuite/ChangeLog: PR c++/94038 * g++.dg/warn/pr94038.C: New test.
2020-05-04Fix Ada bootstrap on Cygwin64Eric Botcazou3-1/+9
This fixes two compilation errors preventing bootstrap with Ada on x86_64-pc-cygwin. 2020-05-04 Mikael Pettersson <mikpelinux@gmail.com> PR bootstrap/94918 * mingw32.h: Prevent windows.h from including emmintrin.h on Cygw64. * s-oscons-tmplt.c (Serial_Port_Descriptor): Use System.Win32.HANDLE also on Cygwin.
2020-05-04rs6000: AIX long double builtins for 64 bit long double.David Edelsohn2-4/+28
When long doubles are 64 bit, the AIX C library overrides the definitions but GCC builtins point to 128 bit names. This patch overrides the builtins for fmodl, frexpl, ldexpl and modfl to refer to the 64 bit symbols. 2020-05-04 Clement Chigot <clement.chigot@atos.net> David Edelsohn <dje.gcc@gmail.com> * config/rs6000/rs6000-call.c (rs6000_init_builtins): Override explicit for fmodl, frexpl, ldexpl and modfl builtins.
2020-05-04internal-fn: Avoid dropping the lhs of some calls [PR94941]Richard Sandiford4-0/+40
create_output_operand coerces an output operand to the insn's predicates, using a suggested rtx location if convenient. But if that rtx location is actually required rather than optional, the builder of the insn has to emit a move afterwards. (We could instead add a new interface that does this automatically, but that's future work.) This PR shows that we were failing to emit the move for some of the vector load internal functions. I think there are other routines in internal-fn.c that potentially have the same problem, but this patch is supposed to be a conservative subset suitable for backporting to GCC 10. 2020-05-04 Richard Sandiford <richard.sandiford@arm.com> gcc/ PR middle-end/94941 * internal-fn.c (expand_load_lanes_optab_fn): Emit a move if the chosen lhs is different from the gcall lhs. (expand_mask_load_optab_fn): Likewise. (expand_gather_load_optab_fn): Likewise. gcc/testsuite/ PR middle-end/94941 * gcc.target/aarch64/sve/acle/general/unoptimized_1.c: New test.
2020-05-04coroutines: Mark the gro as artificial.Iain Sandoe2-0/+7
This corrects an oversight, the coro.gro object is a a compiler-generated entity and should be marked as artificial and ignored. gcc/cp/ChangeLog: 2020-05-04 Iain Sandoe <iain@sandoe.co.uk> * coroutines.cc (morph_fn_to_coro): Mark the coro.gro variable as artificial and ignored.
2020-05-04Update gcc sv.po.Joseph Myers2-356/+238
* sv.po: Update.
2020-05-04Added missing ChangeLog entriesUros Bizjak2-0/+13
2020-05-04i386: Use SBB more [PR94650]Uros Bizjak3-3/+82
When returning 0 or -1, "SBB reg,reg" instruction that borrows carry flag can be used. Carry flag can be generated by converting compare with zero to a LTU compare with one, so e.g. return -(x == 0) generates: cmpq $1, %rdi sbbq %rax, %rax instead of: xorl %eax, %eax testq %rdi, %rdi sete %al negq %rax A similar conversion can be used for return -(x != 0) where NEG insn can be used instead of compare. According to x86 ISA, NEG insn sets carry flag when the source operand is != 0, resulting in: negq %rdi sbbq %rax, %rax The conversion avoids partial register stall with SETcc instructions. PR target/94795 * config/i386/i386.md (*neg<mode>_ccc): New insn pattern. (EQ compare->LTU compare splitter): New splitter. (NE compare->NEG splitter): Ditto. testsuite/ChangeLog: PR target/94795 * gcc.target/i386/pr94795-1.c: New test. * gcc.target/i386/pr94795-2.c: New test.
2020-05-04c++: Simplify process_template_parmNathan Sidwell2-21/+31
Process_template_parm ends up walking the parameter list twice. There's not need to do this. Just rember the final node and modify its CHAIN directly. Also comment on why end_template_parm_list does a pop and a push, rather than modifying the header in place. pt.c (process_template_parm): Don't walk the template list twice, remember the final node instead. (end_template_parm_list): Refactor. Comment on why we do a pop and a push.
2020-05-04c++: Don't save parms in nested requirement [pr 94827]Nathan Sidwell2-10/+13
This followup patch just removes some stashing that we never made use of. * constraint.cc (tsubst_nested_requirement): TYPE directly holds notmalized requirement. (finish_nested_requirement): Don't stash current tpl parms into the requirement. (diagnose_nested_requirement): TYPE directly holds notmalized requirement.
2020-05-04Revert "tree: Don't reuse types if TYPE_USER_ALIGN differ [PR94775]"Marek Polacek3-43/+10
This reverts commit 6318fe77395fc0dd59419bc4d69cd06ac0158e54. Revert: 2020-04-30 Marek Polacek <polacek@redhat.com> PR c++/94775 * tree.c (check_base_type): Return true only if TYPE_USER_ALIGN match. (check_aligned_type): Check if TYPE_USER_ALIGN match.
2020-05-04tree-optimization/93891 - improve same-store disambiguationRichard Biener2-2/+10
We need a reference to assess alignment, fall back to the original reference tree if available. 2020-05-04 Richard Biener <rguenther@suse.de> PR tree-optimization/93891 * tree-ssa-sccvn.c (vn_reference_lookup_3): Fall back to the original reference tree for assessing access alignment.
2020-05-04tree-optimization/39612 - avoid issueing loads in SM when possibleRichard Biener4-8/+76
Currently store-motion emits a load of the value in the loop preheader even when the original loop does not contain any read of the reference. This avoids doing this. In the conditional store-motion case we need to mark the sunk stores with no-warning since the control dependence is too tricky to figure out for the uninit warning. 2020-05-04 Richard Biener <rguenther@suse.de> PR tree-optimization/39612 * tree-ssa-loop-im.c (im_mem_ref::loaded): New member. (set_ref_loaded_in_loop): New. (mark_ref_loaded): Likewise. (gather_mem_refs_stmt): Call mark_ref_loaded for loads. (execute_sm): Avoid issueing a load when it was not there. (execute_sm_if_changed): Avoid issueing warnings for the conditional store. * gcc.dg/tree-ssa/pr39612.c: New testcase.
2020-05-04tree-inline: Simplify IPA-CP type conversion (PR 93385)Martin Jambor2-37/+12
when callers and callees do not quite agree on the type of a parameter, usually with ill-defined K&R or with smilarly wrong LTO input, IPA-CP can attempt to try and substitute a wrong type for a parameter (see e.g. gcc.dg/torture/pr48063.c). Function tree_function_versioning attempts to handle this in order not to create invalid gimple but it then creates the mapping using setup_one_parameter which also handles the same situation to avoid similar problems when inlining and in more defined way. So this patch simply removes the conversion attempts in tree_function_versioning itself. It is helpful for my upcoming fix of PR 93385 because then I do not need to teach ipa_param_body_adjustments to distinguish between successful and unsuccessful mappings - setup_one_parameter uses force_value_to_type for conversions which simly maps the worst cases to zero. 2020-05-04 Martin Jambor <mjambor@suse.cz> PR ipa/93385 * tree-inline.c (tree_function_versioning): Leave any type conversion of replacements to setup_one_parameter and its friend force_value_to_type.
2020-05-04i386: Use SHR to compare with large power-of-two constants [PR94650]Uros Bizjak5-0/+110
Convert unsigned compares where m >= LARGE_POWER_OF_TWO and LARGE_POWER_OF_TWO represent an immediate where bit 33+ is set to use a SHR instruction and compare the result to 0. This avoids loading a large immediate with MOVABS insn. movabsq $1099511627775, %rax cmpq %rax, %rdi ja .L5 gets converted to: shrq $40, %rdi jne .L5 PR target/94650 * config/i386/predicates.md (shr_comparison_operator): New predicate. * config/i386/i386.md (compare->shr splitter): New splitters. testsuite/ChangeLog: PR target/94650 * gcc.targeti/i386/pr94650.c: New test.
2020-05-04match.pd: Optimize (x < 0) != (y < 0) into (x ^ y) < 0 [PR94718]Jakub Jelinek5-0/+153
The following patch (on top of the two other PR94718 patches) performs the actual optimization requested in the PR. 2020-05-04 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94718 * match.pd ((X < 0) != (Y < 0) into (X ^ Y) < 0): New simplification. * gcc.dg/tree-ssa/pr94718-4.c: New test. * gcc.dg/tree-ssa/pr94718-5.c: New test.
2020-05-04match.pd: Decrease number of nop conversions around bitwise ops [PR94718]Jakub Jelinek4-3/+72
On the following testcase, there are in *.optimized dump 14 nop conversions (from signed to unsigned and back), while this patch decreases that number to just 4; for bitwise ops it really doesn't matter if they are performed in signed or unsigned, so the patch (in GIMPLE only, there are some comments about it being undesirable during GENERIC earlier), if it sees both bitop operands nop converted from the same types performs the bitop in their non-converted type and converts the result (i.e. 2 conversions into 1), similarly, if a bitop has one operand nop converted from something, the other not and the result is converted back to the type of the nop converted operand before conversion, it is possible to replace those 2 conversions with just a single conversion of the other operand. 2020-05-04 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94718 * match.pd (bitop (convert @0) (convert? @1)): For GIMPLE, if we can, replace two nop conversions on bit_{and,ior,xor} argument and result with just one conversion on the result or another argument. * gcc.dg/tree-ssa/pr94718-3.c: New test.
2020-05-04match.pd: Move (X & C) eqne (Y & C) -> -> (X ^ Y) & C eqne 0 opt to match.pd ↵Jakub Jelinek6-45/+115
[PR94718] This patch moves this optimization from fold-const.c to match.pd where it is actually much shorter to do and lets optimize even code not seen together in a single expression in the source, as the first step towards fixing the PR. 2020-05-04 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94718 * fold-const.c (fold_binary_loc): Move (X & C) eqne (Y & C) -> (X ^ Y) & C eqne 0 optimization to ... * match.pd ((X & C) op (Y & C) into (X ^ Y) & C op 0): ... here. * gcc.dg/tree-ssa/pr94718-1.c: New test. * gcc.dg/tree-ssa/pr94718-2.c: New test.
2020-05-04diagnostics: get_option_html_page fixesJakub Jelinek2-19/+16
While testing the --with-documentation-root-url= changes, I run into [Wreturn-type] URL pointing to gfortran documentation where it obviously isn't documented. The following patch updates the list of options to match reality (on the other side -Wconversion-extra is gfortran only option documented in gfortran.texi). Or, perhaps better use the attached patch instead, which doesn't have a hardcoded list and instead uses the flags? I went through options.c and the updated list of options matches exactly the cases where CL_Fortran is set for "-W*" options together with CL_C and/or CL_CXX (ok, there is also -Wall and -Wextra, but hopefully we don't emit [Wall] or [Wextra] for anything). 2020-05-04 Jakub Jelinek <jakub@redhat.com> * opts.c (get_option_html_page): Instead of hardcoding a list of options common between C/C++ and Fortran only use gfortran/ documentation for warnings that have CL_Fortran set but not CL_C or CL_CXX.
2020-05-04Daily bump.GCC Administrator1-1/+1
2020-05-03i386: Use plus_constant instead of gen_rtx_PLUSUros Bizjak4-33/+49
Replace gen_rtx_PLUS with a GEN_INT with plus_constant. 2020-05-03 Uroš Bizjak <ubizjak@gmail.com> * config/i386/i386-expand.c (ix86_expand_int_movcc): Use plus_constant instead of gen_rtx_PLUS with GEN_INT. (emit_memmov): Ditto. (emit_memset): Ditto. (ix86_expand_strlensi_unroll_1): Ditto. (release_scratch_register_on_entry): Ditto. (gen_frame_set): Ditto. (ix86_emit_restore_reg_using_pop): Ditto. (ix86_emit_outlined_ms2sysv_restore): Ditto. (ix86_expand_epilogue): Ditto. (ix86_expand_split_stack_prologue): Ditto. * config/i386/i386.md (push immediate splitter): Ditto. (strmov): Ditto. (strset): Ditto.
2020-05-03Fix incorrect use of 'Unrestricted_Access in testcaseEric Botcazou2-1/+5
2020-05-03Daily bump.GCC Administrator1-1/+1
2020-05-02gfortran: Get asan library from TEST_ALWAYS_FLAGSH.J. Lu2-0/+14
Update gfortran_target_compile to get the newly built asan library from TEST_ALWAYS_FLAGS to avoid: /usr/bin/ld: cannot find libasan_preinit.o: No such file or directory /usr/bin/ld: cannot find -lasan collect2: error: ld returned 1 exit status compiler exited with status 1 FAIL: gfortran.dg/asan/pointer_assign_16.f90 -fsanitize=address -O0 (test for excess errors) PR fortran/94788 * lib/gfortran.exp (gfortran_target_compile): Get asan library from TEST_ALWAYS_FLAGS.
2020-05-02Darwin: Fix a diagnostic spelling [PR93861]Iain Sandoe2-1/+7
Add a missing '-' to a diagnostic. gcc/ChangeLog: 2020-05-02 Iain Sandoe <iain@sandoe.co.uk> PR translation/93861 * config/darwin-driver.c (darwin_driver_init): Adjust spelling in a warning.
2020-05-02Add asan subdirectory for gfortran.dg.Thomas Koenig3-0/+351
Because the test case for PR 94788 requires -fsanitize=address to expose the double free, I have created a subdirectory under gfortran.dg where such test cases can go. I have tested this with make check-fortran RUNTESTFLAGS="asan.exp=*" and it works; with a compiler that introduces the double free bug into the test case, the result is as expected 2020-05-02 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/94788 * gfortran.dg/asan: New directory. * gfortran.dg/asan/asan.exp: New file. * gfortran.dg/asan/pointer_assign_16.f90: New test case.
2020-05-02tilegx: Unbreak buildJakub Jelinek2-1/+7
../../gcc/config/tilegx/tilegx.md:4109:1: ambiguous attribute 'n'; could be '1' (via 'I124MODE:n') or '4' (via 'I48MODE:n') ../../gcc/config/tilegx/tilegx.md:4109:1: ambiguous attribute 'n'; could be '1' (via 'I124MODE:n') or '' (via 'I48MODE:n') ../../gcc/config/tilegx/tilegx.md:4109:1: ambiguous attribute 'n'; could be '2' (via 'I124MODE:n') or '4' (via 'I48MODE:n') ../../gcc/config/tilegx/tilegx.md:4109:1: ambiguous attribute 'n'; could be '2' (via 'I124MODE:n') or '' (via 'I48MODE:n') ../../gcc/config/tilegx/tilegx.md:4109:1: ambiguous attribute 'n'; could be '4' (via 'I124MODE:n') or '' (via 'I48MODE:n') The insn name already uses <I124MODE:n> explicitly, just the preparation stmts don't, and as it creates a I124MODE lowpart subreg of a word mode register, <I124MODE:n> seems obviously correct. 2020-05-02 Jakub Jelinek <jakub@redhat.com> * config/tilegx/tilegx.md (insn_stnt<I124MODE:n>_add<I48MODE:bitsuffix>): Use <I124MODE:n> rather than just <n>.
2020-05-01Add patch_area_size and patch_area_entry to crtlH.J. Lu12-29/+116
Currently patchable area is at the wrong place. It is placed immediately after function label and before .cfi_startproc. A backend should be able to add a pseudo patchable area instruction durectly into RTL. This patch adds patch_area_size and patch_area_entry to crtl so that the patchable area info is available in RTL passes. It also limits patch_area_size and patch_area_entry to 65535, which is a reasonable maximum size for patchable area. gcc/ PR target/93492 * cfgexpand.c (pass_expand::execute): Set crtl->patch_area_size and crtl->patch_area_entry. * emit-rtl.h (rtl_data): Add patch_area_size and patch_area_entry. * opts.c (common_handle_option): Limit function_entry_patch_area_size and function_entry_patch_area_start to USHRT_MAX. Fix a typo in error message. * varasm.c (assemble_start_function): Use crtl->patch_area_size and crtl->patch_area_entry. * doc/invoke.texi: Document the maximum value for -fpatchable-function-entry. gcc/c-family/ PR target/93492 * c-attribs.c (handle_patchable_function_entry_attribute): Limit value to USHRT_MAX (65535). gcc/testsuite/ PR target/93492 * c-c++-common/patchable_function_entry-error-1.c: New test. * c-c++-common/patchable_function_entry-error-2.c: Likewise. * c-c++-common/patchable_function_entry-error-3.c: Likewise.
2020-05-02Daily bump.GCC Administrator1-1/+1
2020-05-01c++: Missing SFINAE with inaccessible static data member [PR90880]Patrick Palka7-11/+61
This is a missing SFINAE issue when verifying the accessibility of a static data member. The cause is that check_accessibility_of_qualified_id unconditionally passes tf_warning_or_error to perform_or_defer_access_check, even when called from tsubst_qualified_id(..., complain=tf_none). This patch fixes this by plumbing 'complain' from tsubst_qualified_id through check_accessibility_of_qualified_id to reach perform_or_defer_access_check, and by giving check_accessibility_of_qualified_id the appropriate return value. gcc/cp/ChangeLog: PR c++/90880 * cp-tree.h (check_accessibility_of_qualified_id): Add tsubst_flags_t parameter and change return type to bool. * parser.c (cp_parser_lookup_name): Pass tf_warning_to_error to check_accessibility_of_qualified_id. * pt.c (tsubst_qualified_id): Return error_mark_node if check_accessibility_of_qualified_id returns false. * semantics.c (check_accessibility_of_qualified_id): Add complain parameter. Pass complain instead of tf_warning_or_error to perform_or_defer_access_check. Return true unless perform_or_defer_access_check returns false. gcc/testsuite/ChangeLog: PR c++/90880 * g++.dg/template/sfinae29.C: New test.
2020-05-01c++: Parenthesized-init of aggregates accepts invalid code [PR94885]Marek Polacek4-1/+30
Here we have (conceptually *) something like struct B { }; struct D : B { }; D(0); // invalid and in C++20 the ()-initialization has created a { 0 } constructor that it tries to initialize an object of type D with. We should reject initializing an object of type B from 0, but we wrongly accept it because process_init_constructor_record skips initializers for empty bases/fields: if (DECL_SIZE (field) && integer_zerop (DECL_SIZE (field)) && !TREE_SIDE_EFFECTS (next)) /* Don't add trivial initialization of an empty base/field to the constructor, as they might not be ordered the way the back-end expects. */ continue; but here 'next' was error_mark_node, returned by massage_elt_init, so we wound up with { } which would validly value-initialize the object. [*] Usually digest_init in build_new_method_call_1 would detect this, but in this case the instance is is_dummy_object and we don't call digest just yet. PR c++/94885 * typeck2.c (process_init_constructor_record): Return PICFLAG_ERRONEOUS if an initializer element was erroneous. * g++.dg/cpp2a/paren-init26.C: New test.
2020-05-01Darwin: Fix bootstrap break from libsanitizer changes.Iain Sandoe2-4/+8
The recent libsanitizer change seems to have had a corrupt chunk, that caused it to apply a change part way through the SUBTARGET_INIT_BUILTINS macro, leading to a bootstrap fail in stage1. gcc/ChangeLog: 2020-05-01 Iain Sandoe <iain@sandoe.co.uk> * config/i386/darwin.h: Repair SUBTARGET_INIT_BUILTINS. Override SUBTARGET_SHADOW_OFFSET macro.
2020-05-01testsuite: Enable asan tests on FreeBSD x86_64Andreas Tobler12-13/+30
Enable asan tests on FreeBSD x86_64. testsuite: * gcc.dg/asan/pr87930.c: Enable on x86_64 FreeBSD. * c-c++-common/asan/asan-interface-1.c: Likewise. * c-c++-common/asan/clone-test-1.c: Likewise. * c-c++-common/asan/no-asan-stack.c: Likewise. * c-c++-common/asan/pr59063-1.c: Likewise. * c-c++-common/asan/pr59063-2.c: Likewise. * g++.dg/asan/asan_test.C: Likewise. * g++.dg/asan/asan_test_utils.h: Likewise. * g++.dg/asan/interception-failure-test-1.C: Likewise. * g++.dg/asan/interception-malloc-test-1.C: Likewise.
2020-05-01c++: Local class DMI using local static [PR90479]Jason Merrill3-3/+23
For default member initializers in templates it's important to push into the right context during get_nsdmi. But for a local class that's not possible, and trying leaves the function context we need to be in, so don't try. gcc/cp/ChangeLog 2020-05-01 Jason Merrill <jason@redhat.com> PR c++/90479 * init.c (get_nsdmi): Don't push_to_top_level for a local class.
2020-05-01c++: -fmerge-all-constants vs. destructors [PR91529]Jason Merrill3-1/+24
cp_finish_decl avoids setting TREE_READONLY on TREE_STATIC variables that have non-constant construction or destruction, but -fmerge-all-constants was converting an automatic variable to static while leaving TREE_READONLY set. Fixed by clearing the flag in cp_finish_decl in the presence of -fmerge-all-constants. gcc/cp/ChangeLog 2020-05-01 Jason Merrill <jason@redhat.com> PR c++/91529 * decl.c (cp_finish_decl): Also clear TREE_READONLY if -fmerge-all-constants.
2020-05-01c++: generic lambda and -fsanitize=vla-bound [PR93822]Jason Merrill2-0/+15
Within the generic lambda the VLA capture proxy VAR_DECL has DECL_VALUE_EXPR which is a NOP_EXPR to the VLA type of the proxy. The problem here was that when instantiating we were tsubsting that type twice, once for the type of the DECL and once for the type of the NOP_EXPR, and getting two different (though equivalent) types. Then gimplify_type_sizes fixed up the type of the DECL, but that didn't affect the type of the NOP_EXPR, leading to sadness. Fixed by directly reusing the type from the DECL. gcc/cp/ChangeLog 2020-05-01 Jason Merrill <jason@redhat.com> PR c++/93822 * pt.c (tsubst_decl): Make sure DECL_VALUE_EXPR continues to have the same type as the variable.
2020-05-01gcc: Enable bits for sanitizer support on FreeBSD x86_64Andreas Tobler6-3/+48
This patch add the necessary bits to suport libasan on FreeBSD x86_64. gcc * config/i386/i386.h: Define a new macro: SUBTARGET_SHADOW_OFFSET. * config/i386/i386.c (ix86_asan_shadow_offset): Use this macro. * config/i386/darwin.h: Override the SUBTARGET_SHADOW_OFFSET macro. * config/i386/freebsd.h: Likewise. * config/freebsd.h (LIBASAN_EARLY_SPEC): Define. LIBTSAN_EARLY_SPEC): Likewise. (LIBLSAN_EARLY_SPEC): Likewise. libsanitizer: * configure.tgt: Add x86_64- and i?86-*-freebsd* targets.
2020-04-30document effective target fileioAlexandre Oliva2-0/+11
check_effective_target_fileio was added to gcc/testsuite/lib/target-supports.exp the other day, without documentation. This patch adds the corresponding documentation. for gcc/ChangeLog * doc/sourcebuild.texi (Effective-Target Keywords): Document the newly-introduced fileio effective target.
2020-05-01Daily bump.GCC Administrator1-1/+1
2020-04-30cse: Add test case. [PR94740]Peter Bergner2-0/+16
PR rtl-optimization/94740 * gcc.target/powerpc/pr94740.c: New test.