aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2021-07-29Xfail just the failing assertion and correct target.Martin Sebor1-3/+1
Related to: PR middle-end/101674 - gcc.dg/uninit-pred-9_b.c fails after jump threading rewrite gcc/testsuite: PR middle-end/101674 * gcc.dg/uninit-pred-9_b.c: Xfail just the failing assertion and correct target.
2021-07-29d: Generate Object class if it doesn't exist during TypeInfo emission (PR101672)Iain Buclaw3-3/+41
Having a stub will prevent errors from occuring when compiling D code with an empty object.d. Though if it were to actually be used implicitly then an error should occur. PR d/101672 gcc/d/ChangeLog: * typeinfo.cc (make_frontend_typeinfo): Generate Object class if it doesn't exist. (check_typeinfo_type): Don't warn if there's no location. gcc/testsuite/ChangeLog: * gdc.dg/pr100967.d: Update test. * gdc.dg/pr101672.d: New test.
2021-07-29d: Return the correct value for C++ constructor calls (PR101664)Iain Buclaw4-0/+77
C++ constructors return void, even though the front-end semantic treats them as implicitly returning `this'. To handle this correctly, the object reference is cached and used as the result of the expression. PR d/101664 gcc/d/ChangeLog: * expr.cc (ExprVisitor::visit (CallExp *)): Use object expression as result for C++ constructor calls. gcc/testsuite/ChangeLog: * gdc.dg/extern-c++/extern-c++.exp: New. * gdc.dg/extern-c++/pr101664.d: New test. * gdc.dg/extern-c++/pr101664_1.cc: New test.
2021-07-29d: Ensure casting from bool results in either 0 or 1 (PR96435)Iain Buclaw4-5/+66
If casting from bool, the result is either 0 or 1, any other value violates @safe code, so enforce that it is never invalid. PR d/96435 gcc/d/ChangeLog: * d-convert.cc (convert_for_rvalue): New function. * d-tree.h (convert_for_rvalue): Declare. * expr.cc (ExprVisitor::visit (CastExp *)): Use convert_for_rvalue. (build_return_dtor): Likewise. gcc/testsuite/ChangeLog: * gdc.dg/torture/pr96435.d: New test.
2021-07-29d: Remove generated D header files on error (PR101657)Iain Buclaw2-0/+33
If an error occurs later during compilation, remember that we generated the headers, so that they can be removed before exit. PR d/101657 gcc/d/ChangeLog: * d-lang.cc (d_parse_file): Remove generated D header files on error. gcc/testsuite/ChangeLog: * gdc.dg/pr101657.d: New test.
2021-07-29d: Don't escape quoted format strings in escape_d_format (PR101656)Iain Buclaw1-1/+13
If the format string is enclosed by two '`' characters, then don't escape the first and laster characters. PR d/101656 gcc/d/ChangeLog: * d-diagnostic.cc (escape_d_format): Don't escape quoted format strings.
2021-07-29testsuite: Fix up two tests for recent libstdc++ header changes [PR101647]Jakub Jelinek2-1/+2
After recent libstdc++ header changes <functional> no longer includes (parts of?) <array> and doesn't have to and <memory> no longer includes (parts of?) <initializer_list>. This patch fixes: testsuite/g++.dg/pr71389.C:10:39: error: aggregate 'std::array<std::array<int, 16>, 16> v13' has incomplete type and cannot be defined as well as testsuite/g++.dg/cpp0x/initlist48.C:11:6: error: 'initializer_list' in namespace 'std' does not name a template type; did you mean 'uninitialized_fill'? 2021-07-29 Jakub Jelinek <jakub@redhat.com> PR testsuite/101647 * g++.dg/pr71389.C: Include <array> instead of <functional>. * g++.dg/cpp0x/initlist48.C: Include also <initializer_list>.
2021-07-29[OpenACC] Extract 'pass_oacc_loop_designation' out of 'pass_oacc_device_lower'Thomas Schwinge20-130/+186
This really is a separate step -- and another pass to be added between the two, later on. gcc/ * omp-offload.c (oacc_loop_xform_head_tail, oacc_loop_process): 'update_stmt' after modification. (pass_oacc_loop_designation): New function, extracted out of... (pass_oacc_device_lower): ... this. (pass_data_oacc_loop_designation, pass_oacc_loop_designation) (make_pass_oacc_loop_designation): New * passes.def: Add it. * tree-parloops.c (create_parallel_loop): Adjust. * tree-pass.h (make_pass_oacc_loop_designation): New. gcc/testsuite/ * c-c++-common/goacc/classify-kernels-unparallelized.c: 's%oaccdevlow%oaccloops%g'. * c-c++-common/goacc/classify-kernels.c: Likewise. * c-c++-common/goacc/classify-parallel.c: Likewise. * c-c++-common/goacc/classify-routine-nohost.c: Likewise. * c-c++-common/goacc/classify-routine.c: Likewise. * c-c++-common/goacc/classify-serial.c: Likewise. * c-c++-common/goacc/routine-nohost-1.c: Likewise. * g++.dg/goacc/template.C: Likewise. * gcc.dg/goacc/loop-processing-1.c: Likewise. * gfortran.dg/goacc/classify-kernels-unparallelized.f95: Likewise. * gfortran.dg/goacc/classify-kernels.f95: Likewise. * gfortran.dg/goacc/classify-parallel.f95: Likewise. * gfortran.dg/goacc/classify-routine-nohost.f95: Likewise. * gfortran.dg/goacc/classify-routine.f95: Likewise. * gfortran.dg/goacc/classify-serial.f95: Likewise. * gfortran.dg/goacc/routine-multiple-directives-1.f90: Likewise. libgomp/ * testsuite/libgomp.oacc-c-c++-common/pr85486-2.c: 's%oaccdevlow%oaccloops%g'. * testsuite/libgomp.oacc-c-c++-common/pr85486-3.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/pr85486.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/routine-nohost-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/vector-length-128-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/vector-length-128-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/vector-length-128-3.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/vector-length-128-4.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/vector-length-128-5.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/vector-length-128-6.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/vector-length-128-7.c: Likewise. * testsuite/libgomp.oacc-fortran/routine-nohost-1.f90: Likewise. Co-Authored-By: Julian Brown <julian@codesourcery.com> Co-Authored-By: Kwok Cheung Yeung <kcy@codesourcery.com>
2021-07-29Fix failed test cases caused by disabling mode promotion for pseudos [PR100952]Haochen Gui2-4/+4
gcc/testsuite PR target/100952 * gcc.target/powerpc/pr56605.c: Change matching conditions. * gcc.target/powerpc/pr81348.c: Likewise.
2021-07-29Backwards jump threader rewrite with ranger.Aldy Hernandez56-57/+959
This is a rewrite of the backwards threader with a ranger based solver. The code is divided into two parts: the path solver in gimple-range-path.*, and the path discovery bits in tree-ssa-threadbackward.c. The legacy code is still available with --param=threader-mode=legacy, but will be removed shortly after. gcc/ChangeLog: * Makefile.in (tree-ssa-loop-im.o-warn): New. * flag-types.h (enum threader_mode): New. * params.opt: Add entry for --param=threader-mode. * tree-ssa-threadbackward.c (THREADER_ITERATIVE_MODE): New. (class back_threader): New. (back_threader::back_threader): New. (back_threader::~back_threader): New. (back_threader::maybe_register_path): New. (back_threader::find_taken_edge): New. (back_threader::find_taken_edge_switch): New. (back_threader::find_taken_edge_cond): New. (back_threader::resolve_def): New. (back_threader::resolve_phi): New. (back_threader::find_paths_to_names): New. (back_threader::find_paths): New. (dump_path): New. (debug): New. (thread_jumps::find_jump_threads_backwards): Call ranger threader. (thread_jumps::find_jump_threads_backwards_with_ranger): New. (pass_thread_jumps::execute): Abstract out code... (try_thread_blocks): ...here. * tree-ssa-threadedge.c (jump_threader::thread_outgoing_edges): Abstract out threading candidate code to... (single_succ_to_potentially_threadable_block): ...here. * tree-ssa-threadedge.h (single_succ_to_potentially_threadable_block): New. * tree-ssa-threadupdate.c (register_jump_thread): Return boolean. * tree-ssa-threadupdate.h (class jump_thread_path_registry): Return bool from register_jump_thread. libgomp/ChangeLog: * testsuite/libgomp.graphite/force-parallel-4.c: Adjust for threader. * testsuite/libgomp.graphite/force-parallel-8.c: Same. gcc/testsuite/ChangeLog: * g++.dg/debug/dwarf2/deallocator.C: Adjust for threader. * gcc.c-torture/compile/pr83510.c: Same. * dg.dg/analyzer/pr94851-2.c: Same. * gcc.dg/loop-unswitch-2.c: Same. * gcc.dg/old-style-asm-1.c: Same. * gcc.dg/pr68317.c: Same. * gcc.dg/pr97567-2.c: Same. * gcc.dg/predict-9.c: Same. * gcc.dg/shrink-wrap-loop.c: Same. * gcc.dg/sibcall-1.c: Same. * gcc.dg/tree-ssa/builtin-sprintf-3.c: Same. * gcc.dg/tree-ssa/pr21001.c: Same. * gcc.dg/tree-ssa/pr21294.c: Same. * gcc.dg/tree-ssa/pr21417.c: Same. * gcc.dg/tree-ssa/pr21458-2.c: Same. * gcc.dg/tree-ssa/pr21563.c: Same. * gcc.dg/tree-ssa/pr49039.c: Same. * gcc.dg/tree-ssa/pr61839_1.c: Same. * gcc.dg/tree-ssa/pr61839_3.c: Same. * gcc.dg/tree-ssa/pr77445-2.c: Same. * gcc.dg/tree-ssa/split-path-4.c: Same. * gcc.dg/tree-ssa/ssa-dom-thread-11.c: Same. * gcc.dg/tree-ssa/ssa-dom-thread-12.c: Same. * gcc.dg/tree-ssa/ssa-dom-thread-14.c: Same. * gcc.dg/tree-ssa/ssa-dom-thread-18.c: Same. * gcc.dg/tree-ssa/ssa-dom-thread-6.c: Same. * gcc.dg/tree-ssa/ssa-dom-thread-7.c: Same. * gcc.dg/tree-ssa/ssa-fre-48.c: Same. * gcc.dg/tree-ssa/ssa-thread-11.c: Same. * gcc.dg/tree-ssa/ssa-thread-12.c: Same. * gcc.dg/tree-ssa/ssa-thread-14.c: Same. * gcc.dg/tree-ssa/vrp02.c: Same. * gcc.dg/tree-ssa/vrp03.c: Same. * gcc.dg/tree-ssa/vrp05.c: Same. * gcc.dg/tree-ssa/vrp06.c: Same. * gcc.dg/tree-ssa/vrp07.c: Same. * gcc.dg/tree-ssa/vrp09.c: Same. * gcc.dg/tree-ssa/vrp19.c: Same. * gcc.dg/tree-ssa/vrp20.c: Same. * gcc.dg/tree-ssa/vrp33.c: Same. * gcc.dg/uninit-pred-9_b.c: Same. * gcc.dg/uninit-pr61112.c: Same. * gcc.dg/vect/bb-slp-16.c: Same. * gcc.target/i386/avx2-vect-aggressive.c: Same. * gcc.dg/tree-ssa/ranger-threader-1.c: New test. * gcc.dg/tree-ssa/ranger-threader-2.c: New test. * gcc.dg/tree-ssa/ranger-threader-3.c: New test. * gcc.dg/tree-ssa/ranger-threader-4.c: New test. * gcc.dg/tree-ssa/ranger-threader-5.c: New test.
2021-07-29c/101512 - fix missing address-taking in c_common_mark_addressable_vecRichard Biener2-4/+18
c_common_mark_addressable_vec fails to look through C_MAYBE_CONST_EXPR in the case it isn't at the toplevel. 2021-07-21 Richard Biener <rguenther@suse.de> PR c/101512 gcc/c-family/ * c-common.c (c_common_mark_addressable_vec): Look through C_MAYBE_CONST_EXPR even if not at the toplevel. gcc/testsuite/ * gcc.dg/torture/pr101512.c: New testcase.
2021-07-29Adjust docu of TARGET_VECTORIZE_VEC_PERM_CONSTAndreas Krebbel2-2/+2
gcc/ChangeLog: * target.def: in0 and in1 do not need to be registers. * doc/tm.texi: Regenerate.
2021-07-29analyzer: : Refactor callstring to work with pairs of supernodes.Ankur Saini3-51/+154
2021-07-25 Ankur Saini <arsenic@sourceware.org> gcc/analyzer/ChangeLog: * call-string.cc (call_string::element_t::operator==): New operator. (call_String::element_t::operator!=): New operator. (call_string::element_t::get_caller_function): New function. (call_string::element_t::get_callee_function): New function. (call_string::call_string): Refactor to Initialise m_elements. (call_string::operator=): Refactor to work with m_elements. (call_string::operator==): Likewise. (call_string::to_json): Likewise. (call_string::hash): Refactor to hash e.m_caller. (call_string::push_call): Refactor to work with m_elements. (call_string::push_call): New overload to push call via supernodes. (call_string::pop): Refactor to work with m_elements. (call_string::calc_recursion_depth): Likewise. (call_string::cmp): Likewise. (call_string::validate): Likewise. (call_string::operator[]): Likewise. * call-string.h (class supernode): New forward decl. (struct call_string::element_t): New struct. (call_string::call_string): Refactor to initialise m_elements. (call_string::bool empty_p): Refactor to work with m_elements. (call_string::get_callee_node): New decl. (call_string::get_caller_node): New decl. (m_elements): Replaces m_return_edges. * program-point.cc (program_point::get_function_at_depth): Refactor to work with new call-string format. (program_point::validate): Likewise. (program_point::on_edge): Likewise.
2021-07-29Adjust/Refine testcases.liuhongt5-6/+6
gcc/testsuite/ChangeLog: PR target/99881 * gcc.target/i386/pr91446.c: * gcc.target/i386/pr92658-avx512bw-2.c: * gcc.target/i386/pr92658-sse4-2.c: * gcc.target/i386/pr92658-sse4.c: * gcc.target/i386/pr99881.c:
2021-07-29Add a separate function to calculate cost for WIDEN_MULT_EXPR.liuhongt3-1/+96
gcc/ChangeLog: PR target/39821 * config/i386/i386.c (ix86_widen_mult_cost): New function. (ix86_add_stmt_cost): Use ix86_widen_mult_cost for WIDEN_MULT_EXPR. gcc/testsuite/ChangeLog: PR target/39821 * gcc.target/i386/sse2-pr39821.c: New test. * gcc.target/i386/sse4-pr39821.c: New test.
2021-07-29Use preferred mode for doloop IV [PR61837]Jiufu Guo8-2/+131
Currently, doloop.xx variable is using the type as niter which may be shorter than word size. For some targets, it would be better to use word size type. For example, on 64bit system, to access 32bit value, subreg maybe used. Then using 64bit type maybe better for niter if it can be present in both 32bit and 64bit. This patch add target hook to query preferred mode for doloop IV, and update mode accordingly. gcc/ChangeLog: 2021-07-29 Jiufu Guo <guojiufu@linux.ibm.com> PR target/61837 * config/rs6000/rs6000.c (TARGET_PREFERRED_DOLOOP_MODE): New hook. (rs6000_preferred_doloop_mode): New hook. * doc/tm.texi: Regenerate. * doc/tm.texi.in: Add hook preferred_doloop_mode. * target.def (preferred_doloop_mode): New hook. * targhooks.c (default_preferred_doloop_mode): New hook. * targhooks.h (default_preferred_doloop_mode): New hook. * tree-ssa-loop-ivopts.c (compute_doloop_base_on_mode): New function. (add_iv_candidate_for_doloop): Call targetm.preferred_doloop_mode and compute_doloop_base_on_mode. gcc/testsuite/ChangeLog: 2021-07-29 Jiufu Guo <guojiufu@linux.ibm.com> PR target/61837 * gcc.target/powerpc/pr61837.c: New test.
2021-07-29Daily bump.GCC Administrator7-1/+440
2021-07-28Correct uninitialized object offset and size computation [PR101494].Martin Sebor2-8/+72
Resolves: PR middle-end/101494 - -Wuninitialized false alarm with memrchr of size 0 gcc/ChangeLog: PR middle-end/101494 * tree-ssa-uninit.c (maybe_warn_operand): Correct object offset and size computation. gcc/testsuite/ChangeLog: PR middle-end/101494 * gcc.dg/uninit-pr101494.c: New test.
2021-07-28Correct -Warray-bounds handling if function pointers [PR101601].Martin Sebor3-15/+111
Resolves: PR middle-end/101601 - -Warray-bounds triggers error: arrays of functions are not meaningful PR middle-end/101601 gcc/ChangeLog: * gimple-array-bounds.cc (array_bounds_checker::check_mem_ref): Remove a pointless test. Handle pointers to functions. gcc/testsuite/ChangeLog: * g++.dg/warn/Warray-bounds-25.C: New test. * gcc.dg/Warray-bounds-85.c: New test.
2021-07-28Add new gimple-ssa-warn-access pass.Martin Sebor19-3740/+4010
gcc/ChangeLog: * Makefile.in (OBJS): Add gimple-ssa-warn-access.o and pointer-query.o. * attribs.h (fndecl_dealloc_argno): Move fndecl_dealloc_argno to tree.h. * builtins.c (compute_objsize_r): Move to pointer-query.cc. (access_ref::access_ref): Same. (access_ref::phi): Same. (access_ref::get_ref): Same. (access_ref::size_remaining): Same. (access_ref::offset_in_range): Same. (access_ref::add_offset): Same. (access_ref::inform_access): Same. (ssa_name_limit_t::visit_phi): Same. (ssa_name_limit_t::leave_phi): Same. (ssa_name_limit_t::next): Same. (ssa_name_limit_t::next_phi): Same. (ssa_name_limit_t::~ssa_name_limit_t): Same. (pointer_query::pointer_query): Same. (pointer_query::get_ref): Same. (pointer_query::put_ref): Same. (pointer_query::flush_cache): Same. (warn_string_no_nul): Move to gimple-ssa-warn-access.cc. (check_nul_terminated_array): Same. (unterminated_array): Same. (maybe_warn_for_bound): Same. (check_read_access): Same. (warn_for_access): Same. (get_size_range): Same. (check_access): Same. (gimple_call_alloc_size): Move to tree.c. (gimple_parm_array_size): Move to pointer-query.cc. (get_offset_range): Same. (gimple_call_return_array): Same. (handle_min_max_size): Same. (handle_array_ref): Same. (handle_mem_ref): Same. (compute_objsize): Same. (gimple_call_alloc_p): Move to gimple-ssa-warn-access.cc. (call_dealloc_argno): Same. (fndecl_dealloc_argno): Same. (new_delete_mismatch_p): Same. (matching_alloc_calls_p): Same. (warn_dealloc_offset): Same. (maybe_emit_free_warning): Same. * builtins.h (check_nul_terminated_array): Move to gimple-ssa-warn-access.h. (check_nul_terminated_array): Same. (warn_string_no_nul): Same. (unterminated_array): Same. (class ssa_name_limit_t): Same. (class pointer_query): Same. (struct access_ref): Same. (class range_query): Same. (struct access_data): Same. (gimple_call_alloc_size): Same. (gimple_parm_array_size): Same. (compute_objsize): Same. (class access_data): Same. (maybe_emit_free_warning): Same. * calls.c (initialize_argument_information): Remove call to maybe_emit_free_warning. * gimple-array-bounds.cc: Include new header.. * gimple-fold.c: Same. * gimple-ssa-sprintf.c: Same. * gimple-ssa-warn-restrict.c: Same. * passes.def: Add pass_warn_access. * tree-pass.h (make_pass_warn_access): Declare. * tree-ssa-strlen.c: Include new headers. * tree.c (fndecl_dealloc_argno): Move here from builtins.c. * tree.h (fndecl_dealloc_argno): Move here from attribs.h. * gimple-ssa-warn-access.cc: New file. * gimple-ssa-warn-access.h: New file. * pointer-query.cc: New file. * pointer-query.h: New file. gcc/cp/ChangeLog: * init.c: Include new header.
2021-07-28PR 100168: Fix call test on power10.Michael Meissner1-1/+1
Fix a test that was checking for 64-bit TOC calls, to also allow for PC-relative calls. 2021-07-28 Michael Meissner <meissner@linux.ibm.com> gcc/testsuite PR testsuite/100168 * gcc.dg/pr56727-2.c: Add support for PC-relative calls.
2021-07-28analyzer: play better with -fsanitize=boundsDavid Malcolm2-0/+66
gcc/analyzer/ChangeLog: * region-model.cc (region_model::on_call_pre): Treat IFN_UBSAN_BOUNDS, BUILT_IN_STACK_SAVE, and BUILT_IN_STACK_RESTORE as no-ops, rather than handling them as unknown functions. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/torture/ubsan-1.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-07-28analyzer: remove redundant return value from various impl_call_*David Malcolm3-43/+53
gcc/analyzer/ChangeLog: * region-model-impl-calls.cc (region_model::impl_call_alloca): Drop redundant return value. (region_model::impl_call_builtin_expect): Likewise. (region_model::impl_call_calloc): Likewise. (region_model::impl_call_malloc): Likewise. (region_model::impl_call_memset): Likewise. (region_model::impl_call_operator_new): Likewise. (region_model::impl_call_operator_delete): Likewise. (region_model::impl_call_strlen): Likewise. * region-model.cc (region_model::on_call_pre): Fix return value of known functions that don't have unknown side-effects. * region-model.h (region_model::impl_call_alloca): Drop redundant return value. (region_model::impl_call_builtin_expect): Likewise. (region_model::impl_call_calloc): Likewise. (region_model::impl_call_malloc): Likewise. (region_model::impl_call_memset): Likewise. (region_model::impl_call_strlen): Likewise. (region_model::impl_call_operator_new): Likewise. (region_model::impl_call_operator_delete): Likewise. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-07-28Fortran: ICE in resolve_allocate_deallocate for invalid STAT argumentHarald Anlauf7-22/+117
gcc/fortran/ChangeLog: PR fortran/101564 * expr.c (gfc_check_vardef_context): Add check for KIND and LEN parameter inquiries. * match.c (gfc_match): Fix comment for %v code. (gfc_match_allocate, gfc_match_deallocate): Replace use of %v code by %e in gfc_match to allow for function references as STAT and ERRMSG arguments. * resolve.c (resolve_allocate_deallocate): Avoid NULL pointer dereferences and shortcut for bad STAT and ERRMSG argument to (DE)ALLOCATE. Remove bogus parts of checks for STAT and ERRMSG. gcc/testsuite/ChangeLog: PR fortran/101564 * gfortran.dg/allocate_stat_3.f90: New test. * gfortran.dg/allocate_stat.f90: Adjust error messages. * gfortran.dg/implicit_11.f90: Likewise. * gfortran.dg/inquiry_type_ref_3.f90: Likewise.
2021-07-28ubsan: Fix ICEs with DECL_REGISTER tests [PR101624]Jakub Jelinek4-3/+63
The following testcase ICEs, because the base is a CONST_DECL for the Fortran parameter, and ubsan/sanopt uses DECL_REGISTER macro on it. /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. */ #define DECL_REGISTER(NODE) (DECL_WRTL_CHECK (NODE)->decl_common.decl_flag_0) while CONST_DECL doesn't satisfy DECL_WRTL_CHECK. The following patch checks explicitly for VAR_DECL/PARM_DECL/RESULT_DECL only before using DECL_REGISTER, assumes other decls aren't DECL_REGISTER. Not really sure about RESULT_DECL but it at least satisfies DECL_WRTL_CHECK... 2021-07-28 Jakub Jelinek <jakub@redhat.com> PR middle-end/101624 * ubsan.c (maybe_instrument_pointer_overflow, instrument_object_size): Only test DECL_REGISTER on VAR_DECLs, PARM_DECLs or RESULT_DECLs. * sanopt.c (maybe_optimize_ubsan_ptr_ifn): Likewise. * gfortran.dg/ubsan/ubsan.exp: New file. * gfortran.dg/ubsan/pr101624.f90: New test.
2021-07-28match.pd: Fix up recent __builtin_bswap16 simplifications [PR101642]Jakub Jelinek2-3/+22
The following testcase ICEs. The problem is that for __builtin_bswap16 (and only that, others are fine) the argument of the builtin is promoted to int while the patterns assume it is not and is the same as that of the return type. For the bswap simplifications before these new ones it just means we fail to optimize stuff like __builtin_bswap16 (__builtin_bswap16 (x)) because there are casts in between, but the last one, equality comparison of __builtin_bswap16 with integer constant results in ICE, because we create comparison with incompatible types of the operands, and the other might be fine because usually we bit and the operand before promoting, but I think it is too dangerous to rely on it, one day we find out that because it is operand to such a built in, we can throw away any changes that affect the upper bits and all of sudden it would misbehave. So, this patch introduces converts that shouldn't do anything for bswap{32,64,128} and should fix these issues for bswap16. 2021-07-28 Jakub Jelinek <jakub@redhat.com> PR middle-end/101642 * match.pd (bswap16 (x) == bswap16 (y)): Cast both operands to type of bswap16 for comparison. (bswap16 (x) == cst): Cast bswap16 operand to type of cst. * gcc.c-torture/compile/pr101642.c: New test.
2021-07-28IBM Z: Fix 5 tests in 31-bit modeIlya Leoshkevich5-8/+9
gcc/testsuite/ChangeLog: * gcc.target/s390/global-array-element-pic2.c: Add -mzarch, add an expectation for 31-bit mode. * gcc.target/s390/load-imm64-1.c: Use unsigned long long. * gcc.target/s390/load-imm64-2.c: Likewise. * gcc.target/s390/vector/long-double-vx-macro-off-on.c: Use -mzarch. * gcc.target/s390/vector/long-double-vx-macro-on-off.c: Likewise.
2021-07-28tree-optimization/101615 - SLP permute opt with CTOR rootsRichard Biener2-0/+35
CTOR roots are not explicitely represented so we have to make sure to materialize permutes on SLP graph entries to them. 2021-07-28 Richard Biener <rguenther@suse.de> PR tree-optimization/101615 * tree-vect-slp.c (vect_optimize_slp): Materialize permutes at CTOR SLP graph entries. * gcc.dg/vect/bb-slp-pr101615-2.c: New testcase.
2021-07-28aarch64: Add smov alternative to sign_extend patternKyrylo Tkachov3-5/+19
In the testcase here we were generating a umov + sxth to move a half-word value from SIMD to GP regs with sign-extension. We can use a single smov instruction for it instead but the sign-extend pattern was missing the right alternative. The *zero_extend<SHORT:mode><GPI:mode>2_aarch64 pattern for zero-extension already has the right alternative for the analogous umov instruction, so this mirrors that pattern. Bootstrapped and tested on aarch64-none-linux-gnu. The test gcc.target/aarch64/sve/clastb_4.c is adjusted to scan for the clastb h0, p0, h0, z0.h form instead of the clastb w0, p0, w0, z0.h form. This is an improvement as the W forms of the clast instructions are more expensive. gcc/ChangeLog: * config/aarch64/aarch64.md (*extend<SHORT:mode><GPI:mode>2_aarch64): Add "r,w" alternative. gcc/testsuite/ChangeLog: * gcc.target/aarch64/smov_1.c: New test. * gcc.target/aarch64/sve/clastb_4.c: Adjust clast scan-assembler.
2021-07-28x86: Don't set AVX_U128_DIRTY when zeroing YMM/ZMM registerH.J. Lu3-0/+154
There is no SSE <-> AVX transition penalty if the upper bits of YMM/ZMM registers are unchanged and YMM/ZMM store doesn't change the upper bits of YMM/ZMM registers. 1. Since zeroing YMM/ZMM register is implemented with zeroing XMM register, don't set AVX_U128_DIRTY when zeroing YMM/ZMM register. 2. Since store doesn't change the INIT state on the upper bits of YMM/ZMM register, don't set AVX_U128_DIRTY on store if the source of store was never non-zero. Here are the vzeroupper count differences on SPEC CPU 2017 with -Ofast -march=skylake-avx512 Before After Diff 500.perlbench_r 226 225 -0.44% 502.gcc_r 1263 1103 -12.67% 503.bwaves_r 14 14 0.00% 505.mcf_r 29 28 -3.45% 507.cactuBSSN_r 4651 4628 -0.49% 508.namd_r 433 432 -0.23% 510.parest_r 20380 19347 -5.07% 511.povray_r 495 452 -8.69% 519.lbm_r 2 2 0.00% 520.omnetpp_r 5954 5677 -4.65% 521.wrf_r 12353 12339 -0.11% 523.xalancbmk_r 13137 13001 -1.04% 525.x264_r 192 191 -0.52% 526.blender_r 2515 2366 -5.92% 527.cam4_r 4601 4583 -0.39% 531.deepsjeng_r 20 19 -5.00% 538.imagick_r 898 805 -10.36% 541.leela_r 427 399 -6.56% 544.nab_r 74 74 0.00% 548.exchange2_r 72 72 0.00% 549.fotonik3d_r 318 318 0.00% 554.roms_r 558 554 -0.72% 557.xz_r 79 52 -34.18% and performance differences are within noise range. gcc/ PR target/101456 * config/i386/i386.c (ix86_avx_u128_mode_needed): Don't set AVX_U128_DIRTY when all bits are zero. gcc/testsuite/ PR target/101456 * gcc.target/i386/pr101456-1.c: New test. * gcc.target/i386/pr101456-2.c: Likewise.
2021-07-28tree-optimization/101615 - SLP permute opt of existing vectorsRichard Biener2-2/+34
This fixes one issue discovered when analyzing PR101615, namely we happily push permutes to pre-existing vectors but end up not actually permuting them. In fact we don't want to, so force materialization on the external. It doesn't fix the original testcase though. 2021-07-28 Richard Biener <rguenther@suse.de> PR tree-optimization/101615 * tree-vect-slp.c (vect_optimize_slp): Pre-existing vector external nodes cannot be permuted so make them perm_out 0. * gcc.dg/vect/bb-slp-pr101615-1.c: New testcase.
2021-07-28amdgcn: Fix attributes for LLVM-12 [PR 100208]Andrew Stubbs6-6/+235
This should work for a wider range of LLVM 12 variants now. More work required for LLVM 13 though. gcc/ChangeLog: PR target/100208 * config.in: Regenerate. * config/gcn/gcn-hsa.h (A_FIJI): New define. (A_900): New define. (A_906): New define. (A_908): New define. (ASM_SPEC): Use A_FIJI, A_900, A_906 and A_908. * config/gcn/gcn.c (output_file_start): Adjust attributes according to the assembler capabilities. * config/gcn/mkoffload.c (main): Likewise. * configure: Regenerate. * configure.ac: Add tests for LLVM assembler attribute features.
2021-07-28Return undefined on edges which are not executed.Andrew MacLeod1-0/+15
When a branch has been folded, mark any range requests on the unexecutable edge as UNDEFINED. * gimple-range-gori.cc (gori_compute::outgoing_edge_range_p): Check for cond_false and cond_true on branches.
2021-07-28analyzer: Handle strdup builtinsSiddhesh Poyarekar4-16/+60
Consolidate allocator builtin handling and add support for __builtin_strdup and __builtin_strndup. gcc/analyzer/ChangeLog: * analyzer.cc (is_named_call_p, is_std_named_call_p): Make first argument a const_tree. * analyzer.h (is_named_call_p, -s_std_named_call_p): Likewise. * sm-malloc.cc (known_allocator_p): New function. (malloc_state_machine::on_stmt): Use it. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/strdup-1.c (test_4, test_5, test_6): New tests.
2021-07-28analyzer: Recognize __builtin_free as a matching deallocatorSiddhesh Poyarekar2-1/+21
Recognize __builtin_free as being equivalent to free when passed into __attribute__((malloc ())), similar to how it is treated when it is encountered as a call. This fixes spurious warnings in glibc where xmalloc family of allocators as well as reallocarray, memalign, etc. are declared to have __builtin_free as the free function. gcc/analyzer/ChangeLog: * sm-malloc.cc (malloc_state_machine::get_or_create_deallocator): Recognize __builtin_free. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/attr-malloc-1.c (compatible_alloc, compatible_alloc2): New extern allocator declarations. (test_9, test_10): New tests.
2021-07-28d: Wrong evaluation order of binary expressions (PR101640)Iain Buclaw3-2/+13
The use of fold_build2 can in some cases swap the order of its operands if that is the more optimal thing to do. However this breaks semantic guarantee of left-to-right evaluation in D. PR d/101640 gcc/d/ChangeLog: * expr.cc (binary_op): Use build2 instead of fold_build2. gcc/testsuite/ChangeLog: * gdc.dg/pr96429.d: Update test. * gdc.dg/pr101640.d: New test.
2021-07-28d: fix ICE at convert_expr(tree_node*, Type*, Type*) (PR101490)Iain Buclaw6-26/+57
Both the front-end and code generator had a modulo by zero bug when testing if a conversion from a static array to dynamic array was valid. PR d/101490 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 27e388b4c. * d-codegen.cc (build_array_index): Handle void arrays same as byte. * d-convert.cc (convert_expr): Handle converting to zero-sized arrays. gcc/testsuite/ChangeLog: * gdc.dg/pr101490.d: New test.
2021-07-28d: __FUNCTION__ doesn't work in core.stdc.stdio functions without cast ↵Iain Buclaw3-3/+15
(PR101441) Backports fix from upstream to allow __FUNCTION__ and __PRETTY_FUNCTION__ to be used as C string literals. Reviewed-on: https://github.com/dlang/dmd/pull/12923 PR d/101441 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd f8c1ca928.
2021-07-28d: Compile-time reflection for supported built-ins (PR101127)Iain Buclaw5-0/+33
In order to allow user-code to determine whether a back-end builtin is available without error, LANG_HOOKS_BUILTIN_FUNCTION_EXT_SCOPE has been defined to delay putting back-end builtin functions until the ISA that defines them has been declared. However in D, there is no global namespace. All builtins get pushed into the `gcc.builtins' module, which is constructed during the semantic analysis pass, which has already finished by the time target attributes are evaluated. So builtins are not pushed by the new langhook because they would be ultimately ignored. Builtins exposed to D code then can now only be altered by the command-line. PR d/101127 gcc/d/ChangeLog: * d-builtins.cc (d_builtin_function_ext_scope): New function. * d-lang.cc (LANG_HOOKS_BUILTIN_FUNCTION_EXT_SCOPE): Define. * d-tree.h (d_builtin_function_ext_scope): Declare. gcc/testsuite/ChangeLog: * gdc.dg/pr101127a.d: New test. * gdc.dg/pr101127b.d: New test.
2021-07-28d: Change in DotTemplateExp type semantics leading to regression (PR101619)Iain Buclaw13-9/+63
By giving dot templates a type, meant that properry resolving silently started passing for code that should never have passed. The simple fix is to provide implementations for checkType and checkValue that give an error about dot templates having neither a value nor type. Reviewed-on: https://github.com/dlang/dmd/pull/12920 PR d/101619 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 1d8386a63.
2021-07-28AArch64: use stable sorting in generating ldp/stpBin Cheng1-2/+10
In some corner cases, we have code as below: [base + 0x310] = A [base + 0x320] = B [base + 0x330] = C [base + 0x320] = D unstable sorting could result in wrong value in offset 0x320. The patch fixes it by using gcc_stablesort. 2021-07-28 Bin Cheng <bin.cheng@linux.alibaba.com> * config/aarch64/aarch64.c (aarch64_gen_adjusted_ldpstp): use gcc_stablesort.
2021-07-28Don't skip prologue/epilogue when initializing alias.Bin Cheng1-12/+0
Register might be modified in prologue/epilogue, which shouldn't be skipped in alias info analysis. 2021-07-28 Bin Cheng <bin.cheng@linux.alibaba.com> gcc/ * alias.c (init_alias_analysis): Don't skip prologue/epilogue.
2021-07-28i386: Improve AVX2 expansion of vector >> vector DImode arithm. shifts ↵Jakub Jelinek3-7/+93
[PR101611] AVX2 introduced vector >> vector shifts, but unfortunately for V{2,4}DImode it only supports logical and not arithmetic shifts, only AVX512F for V8DImode or AVX512VL for V{2,4}DImode fixed that omission. Earlier in GCC12 cycle I've committed vector >> scalar arithmetic shift emulation using various sequences, this patch handles the vector >> vector case. No need to adjust costs, the previous cost adjustment actually covers even the vector by vector shifts. The patch emits the right arithmetic V{2,4}DImode shifts using 2 logical right V{2,4}DImode shifts (once of the original operands, once of sign mask constant by the vector shift count), xor and subtraction, on each element (long long) x >> y is done as (((unsigned long long) x >> y) ^ (0x8000000000000000ULL >> y)) - (0x8000000000000000ULL >> y) i.e. if x doesn't have in some element the MSB set, it is just the logical shift, if it does, then the xor and subtraction cause also all higher bits to be set. 2021-07-28 Jakub Jelinek <jakub@redhat.com> PR target/101611 * config/i386/sse.md (vashr<mode>3): Split into vashrv8di3 expander and vashrv4di3 expander, where the latter requires just TARGET_AVX2 and has special !TARGET_AVX512VL expansion. (vashrv2di3<mask_name>): Rename to ... (vashrv2di3): ... this. Change condition to TARGET_XOP || TARGET_AVX2 and add special !TARGET_XOP && !TARGET_AVX512VL expansion. * gcc.target/i386/avx2-pr101611-1.c: New test. * gcc.target/i386/avx2-pr101611-2.c: New test.
2021-07-28Correct a mistake in a warnung for -Wnonnull.Martin Uecker2-20/+20
In the warning for -Wnonnull when warning about array parameters with bounds > 0 and which are NULL the numbers referring to the two arguments are switched. This patch corrects the mistake. 2021-07-28 Martin Uecker <muecker@gwdg.de> gcc/ * calls.c (maybe_warn_rdwr_sizes): Correct argument numbers in warning that were switched. gcc/testsuite/ * gcc.dg/Wnonnull-4.c: Correct argument numbers in warnings.
2021-07-27Bind(c): Improve error checking in CFI_* functionsSandra Loosemore1-4/+4
This patch adds additional run-time checking for invalid arguments to CFI_establish and CFI_setpointer. It also changes existing messages throughout the CFI_* functions to use PRIiPTR to format CFI_index_t values instead of casting them to int and using %d (which may not work on targets where int is a smaller type), simplifies wording of some messages, and fixes issues with capitalization, typos, and the like. Additionally some coding standards problems such as >80 character lines are addressed. 2021-07-24 Sandra Loosemore <sandra@codesourcery.com> PR libfortran/101317 libgfortran/ * runtime/ISO_Fortran_binding.c: Include <inttypes.h>. (CFI_address): Tidy error messages and comments. (CFI_allocate): Likewise. (CFI_deallocate): Likewise. (CFI_establish): Likewise. Add new checks for validity of elem_len when it's used, plus type argument and extents. (CFI_is_contiguous): Tidy error messages and comments. (CFI_section): Likewise. Refactor some repetitive code to make it more understandable. (CFI_select_part): Likewise. (CFI_setpointer): Likewise. Check that source is not an unallocated allocatable array or an assumed-size array. gcc/testsuite/ * gfortran.dg/ISO_Fortran_binding_17.f90: Fix typo in error message patterns.
2021-07-27Bind(c): Fix bugs in CFI_sectionSandra Loosemore1-4/+6
CFI_section was incorrectly adjusting the base pointer for the result array twice in different ways. It was also overwriting the array dimension info in the result descriptor before computing the base address offset from the source descriptor, which caused problems if the two descriptors are the same. This patch fixes both problems and makes the code simpler, too. A consequence of this patch is that the result array is now 0-based in all dimensions instead of starting at the numbering to match the first element of the source array. The Fortran standard only specifies the shape of the result array, not its lower bounds, so this is permitted and probably less confusing for users as well as implementors. 2021-07-17 Sandra Loosemore <sandra@codesourcery.com> PR libfortran/101310 libgfortran/ * runtime/ISO_Fortran_binding.c (CFI_section): Fix the base address computation and simplify the code. gcc/testsuite/ * gfortran.dg/ISO_Fortran_binding_1.c (section_c): Remove incorrect assertions.
2021-07-27Fix ISO_Fortran_binding.h paths in gfortran testsuiteSandra Loosemore19-19/+19
ISO_Fortran_binding.h is now generated in the libgfortran build directory where it is on the default include path. Adjust includes in the gfortran testsuite not to include an explicit path pointing at the source directory. 2021-07-27 Sandra Loosemore <sandra@codesourcery.com> gcc/testsuite/ PR libfortran/101305 * gfortran.dg/ISO_Fortran_binding_1.c: Adjust include path. * gfortran.dg/ISO_Fortran_binding_10.c: Likewise. * gfortran.dg/ISO_Fortran_binding_11.c: Likewise. * gfortran.dg/ISO_Fortran_binding_12.c: Likewise. * gfortran.dg/ISO_Fortran_binding_15.c: Likewise. * gfortran.dg/ISO_Fortran_binding_16.c: Likewise. * gfortran.dg/ISO_Fortran_binding_17.c: Likewise. * gfortran.dg/ISO_Fortran_binding_18.c: Likewise. * gfortran.dg/ISO_Fortran_binding_3.c: Likewise. * gfortran.dg/ISO_Fortran_binding_5.c: Likewise. * gfortran.dg/ISO_Fortran_binding_6.c: Likewise. * gfortran.dg/ISO_Fortran_binding_7.c: Likewise. * gfortran.dg/ISO_Fortran_binding_8.c: Likewise. * gfortran.dg/ISO_Fortran_binding_9.c: Likewise. * gfortran.dg/PR94327.c: Likewise. * gfortran.dg/PR94331.c: Likewise. * gfortran.dg/bind_c_array_params_3_aux.c: Likewise. * gfortran.dg/iso_fortran_binding_uint8_array_driver.c: Likewise. * gfortran.dg/pr93524.c: Likewise.
2021-07-27vect: Fix wrong check in vect_recog_mulhs_pattern [PR101596]Kewen Lin4-27/+154
As PR101596 showed, vect_recog_mulhs_pattern uses target_precision to check the scale_term is expected or not, it could be wrong when the precision of the actual used new_type larger than target_precision as shown by the example. This patch is to use precision of new_type instead of target_precision for the scale_term matching check. Bootstrapped & regtested on powerpc64le-linux-gnu P10, powerpc64-linux-gnu P8, x86_64-redhat-linux and aarch64-linux-gnu. gcc/ChangeLog: PR tree-optimization/101596 * tree-vect-patterns.c (vect_recog_mulhs_pattern): Fix wrong check by using new_type's precision instead. gcc/testsuite/ChangeLog: PR tree-optimization/101596 * gcc.target/powerpc/pr101596-1.c: New test. * gcc.target/powerpc/pr101596-2.c: Likewise. * gcc.target/powerpc/pr101596-3.c: Likewise.
2021-07-28Add the member integer_to_sse to processor_cost as a cost simulation for ↵liuhongt4-1/+81
movd/pinsrd. It will be used to calculate the cost of vec_construct. gcc/ChangeLog: PR target/99881 * config/i386/i386.h (processor_costs): Add new member integer_to_sse. * config/i386/x86-tune-costs.h (ix86_size_cost, i386_cost, i486_cost, pentium_cost, lakemont_cost, pentiumpro_cost, geode_cost, k6_cost, athlon_cost, k8_cost, amdfam10_cost, bdver_cost, znver1_cost, znver2_cost, znver3_cost, btver1_cost, btver2_cost, btver3_cost, pentium4_cost, nocona_cost, atom_cost, atom_cost, slm_cost, intel_cost, generic_cost, core_cost): Initialize integer_to_sse same value as sse_op. (skylake_cost): Initialize integer_to_sse twice as much as sse_op. * config/i386/i386.c (ix86_builtin_vectorization_cost): Use integer_to_sse instead of sse_op to calculate the cost of vec_construct. gcc/testsuite/ChangeLog: PR target/99881 * gcc.target/i386/pr99881.c: New test.
2021-07-28Daily bump.GCC Administrator5-1/+210