aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-09-07Daily bump.GCC Administrator3-1/+19
2020-09-06fortran: Add comment about previous commitFrancois-Xavier Coudert1-0/+2
gcc/fortran/ChangeLog * trans-types.c (gfc_get_ppc_type): Add comment.
2020-09-06fortran: Fix function arg types for class objectsFrancois-Xavier Coudert1-1/+1
gcc/fortran/ChangeLog * trans-types.c (gfc_get_ppc_type): Fix function arg types.
2020-09-06fortran: caf_fail_image expects no argumentFrancois-Xavier Coudert2-3/+2
gcc/fortran/ChangeLog PR fortran/96947 * trans-stmt.c (gfc_trans_fail_image): caf_fail_image expects no argument. gcc/testsuite/ChangeLog * gfortran.dg/coarray_fail_st.f90: Adjust test.
2020-09-06Daily bump.GCC Administrator1-1/+1
2020-09-05Daily bump.GCC Administrator5-1/+128
2020-09-04d: Fix ICE in create_tmp_var, at gimple-expr.c:482Iain Buclaw3-15/+14
Array concatenate expressions were creating more SAVE_EXPRs than what was necessary. The internal error itself was the result of a forced temporary being made on a TREE_ADDRESSABLE type. gcc/d/ChangeLog: PR d/96924 * expr.cc (ExprVisitor::visit (CatAssignExp *)): Don't force temporaries needlessly. gcc/testsuite/ChangeLog: PR d/96924 * gdc.dg/simd13927b.d: Removed. * gdc.dg/pr96924.d: New test.
2020-09-04c++: Use iloc_sentinel in mark_use.Jason Merrill1-3/+1
gcc/cp/ChangeLog: * expr.c (mark_use): Use iloc_sentinel.
2020-09-04tree-optimization/96920 - another ICE when vectorizing nested cyclesRichard Biener6-67/+144
This refines the previous fix for PR96698 by re-doing how and where we arrange for setting vectorized cycle PHI backedge values. 2020-09-04 Richard Biener <rguenther@suse.de> PR tree-optimization/96698 PR tree-optimization/96920 * tree-vectorizer.h (loop_vec_info::reduc_latch_defs): Remove. (loop_vec_info::reduc_latch_slp_defs): Likewise. * tree-vect-stmts.c (vect_transform_stmt): Remove vectorized cycle PHI latch code. * tree-vect-loop.c (maybe_set_vectorized_backedge_value): New helper to set vectorized cycle PHI latch values. (vect_transform_loop): Walk over all PHIs again after vectorizing them, calling maybe_set_vectorized_backedge_value. Call maybe_set_vectorized_backedge_value for each vectorized stmt. Remove delayed update code. * tree-vect-slp.c (vect_analyze_slp_instance): Initialize SLP instance reduc_phis member. (vect_schedule_slp): Set vectorized cycle PHI latch values. * gfortran.dg/vect/pr96920.f90: New testcase. * gcc.dg/vect/pr96920.c: Likewise.
2020-09-04vec: dead code removal in tree-vect-loop.cAndrea Corallo1-11/+4
gcc/ChangeLog 2020-09-04 Andrea Corallo <andrea.corallo@arm.com> * tree-vect-loop.c (vect_estimate_min_profitable_iters): Remove dead code as LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo) is always verified.
2020-09-04arm: Improve immediate generation for thumb-1 with -mpurecode [PR96769]Christophe Lyon2-15/+35
This patch moves the move-immediate splitter after the regular ones so that it has lower precedence, and updates its constraints. For int f3 (void) { return 0x11000000; } int f3_2 (void) { return 0x12345678; } we now generate: * with -O2 -mcpu=cortex-m0 -mpure-code: f3: movs r0, #136 lsls r0, r0, #21 bx lr f3_2: movs r0, #18 lsls r0, r0, #8 adds r0, r0, #52 lsls r0, r0, #8 adds r0, r0, #86 lsls r0, r0, #8 adds r0, r0, #121 bx lr * with -O2 -mcpu=cortex-m23 -mpure-code: f3: movs r0, #136 lsls r0, r0, #21 bx lr f3_2: movw r0, #22136 movt r0, 4660 bx lr 2020-09-04 Christophe Lyon <christophe.lyon@linaro.org> PR target/96769 gcc/ * config/arm/thumb1.md: Move movsi splitter for arm_disable_literal_pool after the other movsi splitters. gcc/testsuite/ * gcc.target/arm/pure-code/pr96769.c: New test.
2020-09-04rename widest_irange to int_range_max.Aldy Hernandez4-71/+71
gcc/ChangeLog: * range-op.cc (range_operator::fold_range): Rename widest_irange to int_range_max. (operator_div::wi_fold): Same. (operator_lshift::op1_range): Same. (operator_rshift::op1_range): Same. (operator_cast::fold_range): Same. (operator_cast::op1_range): Same. (operator_bitwise_and::remove_impossible_ranges): Same. (operator_bitwise_and::op1_range): Same. (operator_abs::op1_range): Same. (range_cast): Same. (widest_irange_tests): Same. (range3_tests): Rename irange3 to int_range3. (int_range_max_tests): Rename from widest_irange_tests. Rename widest_irange to int_range_max. (operator_tests): Rename widest_irange to int_range_max. (range_tests): Same. * tree-vrp.c (find_case_label_range): Same. * value-range.cc (irange::irange_intersect): Same. (irange::invert): Same. * value-range.h: Same.
2020-09-04tree-optimization/96931 - clear ctrl-altering flag more aggressivelyRichard Biener2-2/+39
The testcase shows that we fail to clear gimple_call_ctrl_altering_p when the last abnormal edge goes away, causing an edge insert to a loop header edge when we have preheaders to split the edge unnecessarily. The following addresses this by more aggressively clearing the flag in cleanup_call_ctrl_altering_flag. 2020-09-04 Richard Biener <rguenther@suse.de> PR tree-optimization/96931 * tree-cfgcleanup.c (cleanup_call_ctrl_altering_flag): If there's a fallthru edge and no abnormal edge the call is no longer control-altering. (cleanup_control_flow_bb): Pass down the BB to cleanup_call_ctrl_altering_flag. * gcc.dg/pr96931.c: New testcase.
2020-09-04lto: Remove stream_input_location_nowJakub Jelinek2-19/+4
As discussed yesterday, stream_input_location_now has been used in 3 remaining places. For ERT_MUST_NOT_THROW, I believe the failure_loc location is stable at least until the apply_cache after the bbs are all read, and the locations do not include BLOCK, so we can use normal stream_input_location, and the two input_struct_function_base also shouldn't include BLOCK and are stable at least until that same apply_cache after reading all bbs, so again we can use the location cache. 2020-09-04 Jakub Jelinek <jakub@redhat.com> * lto-streamer.h (stream_input_location_now): Remove declaration. * lto-streamer-in.c (stream_input_location_now): Remove. (input_eh_region, input_struct_function_base): Use stream_input_location instead of stream_input_location_now.
2020-09-04lto: Ensure we force a change for file/line/column after clear_line_infoJakub Jelinek2-0/+13
As discussed yesterday: On the streamer out side, we call clear_line_info in multiple spots which resets the current_* values to something, but on the reader side, we don't have corresponding resets in the same location, just have the stream_* static variables that keep the current values through the entire stream in (so across all the clear_line_info spots in a single LTO object but also across jumping from one LTO object to another one). Now, in an earlier version of my patch it actually broke LTO bootstrap (and a lot of LTO testcases), so for the BLOCK case I've solved it by clear_line_info setting current_block to something that should never appear, which means that in the LTO stream after the clear_line_info spots including the start of the LTO stream we force the block change bit to be set and thus BLOCK to be streamed and therefore stream_block from earlier to be ignored. But for the rest I think that is not the case, so I wonder if we don't sometimes end up with wrong line/column info because of that, or please tell me what prevents that. clear_line_info does: ob->current_file = NULL; ob->current_line = 0; ob->current_col = 0; ob->current_sysp = false; while I think NULL current_file is something that should likely be different from expanded_location (...).file (UNKNOWN_LOCATION/BUILTINS_LOCATION are handled separately and not go through the caching), I think line number 0 can sometimes occur and especially column 0 occurs frequently if we ran out of location_t with columns info. But then we do: bp_pack_value (bp, ob->current_file != xloc.file, 1); bp_pack_value (bp, ob->current_line != xloc.line, 1); bp_pack_value (bp, ob->current_col != xloc.column, 1); and stream the details only if the != is true. If that happens immediately after clear_line_info and e.g. xloc.column is 0, we would stream 0 bit and not stream the actual value, so on read-in it would reuse whatever stream_col etc. were before. Shouldn't we set some ob->current_* new bit that would signal we are immediately past clear_line_info which would force all these != checks to non-zero? Either by oring something into those tests, or perhaps: if (ob->current_reset) { if (xloc.file == NULL) ob->current_file = ""; if (xloc.line == 0) ob->current_line = 1; if (xloc.column == 0) ob->current_column = 1; ob->current_reset = false; } before doing those bp_pack_value calls with a comment, effectively forcing all 6 != comparisons to be true? 2020-09-04 Jakub Jelinek <jakub@redhat.com> * lto-streamer.h (struct output_block): Add reset_locus member. * lto-streamer-out.c (clear_line_info): Set reset_locus to true. (lto_output_location_1): If reset_locus, clear it and ensure current_{file,line,col} is different from xloc members.
2020-09-04bpf: generate indirect calls for xBPFDavid Faust3-3/+29
This patch updates the BPF back end to generate indirect calls via the 'call %reg' instruction when targetting xBPF. Additionally, the BPF ASM_SPEC is updated to pass along -mxbpf to gas, where it is now supported. 2020-09-03 David Faust <david.faust@oracle.com> gcc/ * config/bpf/bpf.h (ASM_SPEC): Pass -mxbpf to gas, if specified. * config/bpf/bpf.c (bpf_output_call): Support indirect calls in xBPF. gcc/testsuite/ * gcc.target/bpf/xbpf-indirect-call-1.c: New test.
2020-09-03test/rs6000: Replace test targets p8 and p9+Kewen Lin3-23/+3
This patch is to clean existing rs6000 test targets p8 and p9+ with existing has_arch_pwr8 and has_arch_pwr9 targets combination or only one of them. gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr92398.p9+.c: Replace p9+ with has_arch_pwr9. * gcc.target/powerpc/pr92398.p9-.c: Replace p9+ with has_arch_pwr9, and replace p8 with has_arch_pwr8 && !has_arch_pwr9. * lib/target-supports.exp (check_effective_target_p8): Remove. (check_effective_target_p9+): Remove.
2020-09-04Daily bump.GCC Administrator5-1/+197
2020-09-03sra: Avoid SRAing if there is an aout-of-bounds access (PR 96820)Martin Jambor2-2/+19
The testcase causes and ICE in the SRA verifier on x86_64 when compiling with -m32 because build_user_friendly_ref_for_offset looks at an out-of-bounds array_ref within an array_ref which accesses an offset which does not fit into a signed 32bit integer and turns it into an array-ref with a negative index. The best thing is probably to bail out early when encountering an out of bounds access to a local stack-allocated aggregate (and let the DSE just delete such statements) which is what the patch does. I also glanced over to the initial candidate vetting routine to make sure the size would fit into HWI and noticed that it uses unsigned variants whereas the rest of SRA operates on signed offsets and sizes (because get_ref_and_extent does) and so changed that for the sake of consistency. These ancient checks operate on sizes of types as opposed to DECLs but I hope that any issues potentially arising from that are basically hypothetical. gcc/ChangeLog: 2020-08-28 Martin Jambor <mjambor@suse.cz> PR tree-optimization/96820 * tree-sra.c (create_access): Disqualify candidates with accesses beyond the end of the original aggregate. (maybe_add_sra_candidate): Check that candidate type size fits signed uhwi for the sake of consistency. gcc/testsuite/ChangeLog: 2020-08-28 Martin Jambor <mjambor@suse.cz> PR tree-optimization/96820 * gcc.dg/tree-ssa/pr96820.c: New test.
2020-09-03[PATCH, rs6000] Fix vector long long subtype (PR96139)Will Schmidt4-2/+92
Hi, This corrects an issue with the powerpc vector long long subtypes. As reported by SjMunroe, when building some code with -Wall, and attempting to print an element of a "long long vector" with a long long printf format string, we will report an error because the vector sub-type was improperly defined as int. When defining a V2DI_type_node we use a TARGET_POWERPC64 ternary to define the V2DI_type_node with "vector long" or "vector long long". We also need to specify the proper sub-type when we define the type. PR target/96139 2020-09-03 Will Schmidt <will_schmidt@vnet.ibm.com> gcc/ChangeLog: * config/rs6000/rs6000-call.c (rs6000_init_builtin): Update V2DI_type_node and unsigned_V2DI_type_node definitions. gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr96139-a.c: New test. * gcc.target/powerpc/pr96139-b.c: New test. * gcc.target/powerpc/pr96139-c.c: New test.
2020-09-03c++: Fix another PCH hash_map issue [PR96901]Jakub Jelinek2-1/+6
The recent libstdc++ changes caused lots of libstdc++-v3 tests FAILs on i686-linux, all of them in the same spot during constexpr evaluation of a recursive _S_gcd call. The problem is yet another hash_map that used the default hasing of tree keys through pointer hashing which is preserved across PCH write/read. During PCH handling, the addresses of GC objects are changed, which means that the hash values of the keys in such hash tables change without those hash tables being rehashed. Which in the fundef_copies_table case usually means we just don't find a copy of a FUNCTION_DECL body for recursive uses and start from scratch. But when the hash table keeps growing, the "dead" elements in the hash table can sometimes reappear and break things. In particular what I saw under the debugger is when the fundef_copies_table hash map has been used on the outer _S_gcd call, it didn't find an entry for it, so returned a slot with *slot == NULL, which is treated as that the function itself is used directly (i.e. no recursion), but that addition of a hash table slot caused the recursive _S_gcd call to actually find something in the hash table, unfortunately not the new *slot == NULL spot, but a different one from the pre-PCH streaming which contained the returned toplevel (non-recursive) call entry for it, which means that for the recursive _S_gcd call we actually used the same trees as for the outer ones rather than a copy of those, which breaks constexpr evaluation. 2020-09-03 Jakub Jelinek <jakub@redhat.com> PR c++/96901 * tree.h (struct decl_tree_traits): New type. (decl_tree_map): New typedef. * constexpr.c (fundef_copies_table): Change type from hash_map<tree, tree> * to decl_tree_map *.
2020-09-03PR fortran/96890 - Wrong answer with intrinsic IALLHarald Anlauf1-0/+22
The IALL intrinsic would always return 0 when the DIM and MASK arguments were present since the initial value of repeated BIT-AND operations was set to 0 instead of -1. libgfortran/ChangeLog: * m4/iall.m4: Initial value for result should be -1. * generated/iall_i1.c (miall_i1): Generated. * generated/iall_i16.c (miall_i16): Likewise. * generated/iall_i2.c (miall_i2): Likewise. * generated/iall_i4.c (miall_i4): Likewise. * generated/iall_i8.c (miall_i8): Likewise. gcc/testsuite/ChangeLog: * gfortran.dg/iall_masked.f90: New test.
2020-09-03c++: Fix P0960 in member init list and array [PR92812]Marek Polacek13-47/+239
This patch nails down the remaining P0960 case in PR92812: struct A { int ar[2]; A(): ar(1, 2) {} // doesn't work without this patch }; Note that when the target object is not of array type, this already works: struct S { int x, y; }; struct A { S s; A(): s(1, 2) { } // OK in C++20 }; because build_new_method_call_1 takes care of the P0960 magic. It proved to be quite hairy. When the ()-list has more than one element, we can always create a CONSTRUCTOR, because the code was previously invalid. But when the ()-list has just one element, it gets all kinds of difficult. As usual, we have to handle a("foo") so as not to wrap the STRING_CST in a CONSTRUCTOR. Always turning x(e) into x{e} would run into trouble as in c++/93790. Another issue was what to do about x({e}): previously, this would trigger "list-initializer for non-class type must not be parenthesized". I figured I'd make this work in C++20, so that given struct S { int x, y; }; you can do S a[2]; [...] A(): a({1, 2}) // initialize a[0] with {1, 2} and a[1] with {} It also turned out that, as an extension, we support compound literals: F (): m((S[1]) { 1, 2 }) so this has to keep working as before. Moreover, make sure not to trigger in compiler-generated code, like =default, where array assignment is allowed. I've factored out a function that turns a TREE_LIST into a CONSTRUCTOR to simplify handling of P0960. paren-init35.C also tests this with vector types. gcc/cp/ChangeLog: PR c++/92812 * cp-tree.h (do_aggregate_paren_init): Declare. * decl.c (do_aggregate_paren_init): New. (grok_reference_init): Use it. (check_initializer): Likewise. * init.c (perform_member_init): Handle initializing an array from a ()-list. Use do_aggregate_paren_init. gcc/testsuite/ChangeLog: PR c++/92812 * g++.dg/cpp0x/constexpr-array23.C: Adjust dg-error. * g++.dg/cpp0x/initlist69.C: Likewise. * g++.dg/diagnostic/mem-init1.C: Likewise. * g++.dg/init/array28.C: Likewise. * g++.dg/cpp2a/paren-init33.C: New test. * g++.dg/cpp2a/paren-init34.C: New test. * g++.dg/cpp2a/paren-init35.C: New test. * g++.old-deja/g++.brendan/crash60.C: Adjust dg-error. * g++.old-deja/g++.law/init10.C: Likewise. * g++.old-deja/g++.other/array3.C: Likewise.
2020-09-03c++: Disable -frounding-math during manifestly constant evaluation [PR96862]Jakub Jelinek2-0/+22
As discussed in the PR, fold-const.c punts on floating point constant evaluation if the result is inexact and -frounding-math is turned on. /* Don't constant fold this floating point operation if the result may dependent upon the run-time rounding mode and flag_rounding_math is set, or if GCC's software emulation is unable to accurately represent the result. */ if ((flag_rounding_math || (MODE_COMPOSITE_P (mode) && !flag_unsafe_math_optimizations)) && (inexact || !real_identical (&result, &value))) return NULL_TREE; Jonathan said that we should be evaluating them anyway, e.g. conceptually as if they are done with the default rounding mode before user had a chance to change that, and e.g. in C in initializers it is also ignored. In fact, fold-const.c for C initializers turns off various other options: /* Perform constant folding and related simplification of initializer expression EXPR. These behave identically to "fold_buildN" but ignore potential run-time traps and exceptions that fold must preserve. */ int saved_signaling_nans = flag_signaling_nans;\ int saved_trapping_math = flag_trapping_math;\ int saved_rounding_math = flag_rounding_math;\ int saved_trapv = flag_trapv;\ int saved_folding_initializer = folding_initializer;\ flag_signaling_nans = 0;\ flag_trapping_math = 0;\ flag_rounding_math = 0;\ flag_trapv = 0;\ folding_initializer = 1; flag_signaling_nans = saved_signaling_nans;\ flag_trapping_math = saved_trapping_math;\ flag_rounding_math = saved_rounding_math;\ flag_trapv = saved_trapv;\ folding_initializer = saved_folding_initializer; So, shall cxx_eval_outermost_constant_expr instead turn off all those options (then warning_sentinel wouldn't be the right thing to use, but given the 8 or how many return stmts in cxx_eval_outermost_constant_expr, we'd need a RAII class for this. Not sure about the folding_initializer, that one is affecting complex multiplication and division constant evaluation somehow. 2020-09-03 Jakub Jelinek <jakub@redhat.com> PR c++/96862 * constexpr.c (cxx_eval_outermost_constant_expr): Temporarily disable flag_rounding_math during manifestly constant evaluation. * g++.dg/cpp1z/constexpr-96862.C: New test.
2020-09-03lto: Cache location_ts including BLOCKs in GIMPLE streaming [PR94311]Jakub Jelinek8-69/+200
As mentioned in the PR, when compiling valgrind even on fairly small testcase where in one larger function the location keeps oscillating between a small line number and 8000-ish line number in the same file we very quickly run out of all possible location_t numbers and because of that emit non-sensical line numbers in .debug_line. There are ways how to decrease speed of depleting location_t numbers in libcpp, but the main reason of this is that we use stream_input_location_now for streaming in location_t for gimple_location and phi arg locations. libcpp strongly prefers that the locations it is given are sorted by the different files and by line numbers in ascending order, otherwise it depletes quickly no matter what and is much more costly (many extra file changes etc.). The reason for not caching those were the BLOCKs that were streamed immediately after the location and encoded into the locations (and for PHIs we failed to stream the BLOCKs altogether). This patch enhances the location cache to handle also BLOCKs (but not for everything, only for the spots we care about the BLOCKs) and also optimizes the size of the LTO stream by emitting a single bit into a pack whether the BLOCK changed from last case and only streaming the BLOCK tree if it changed. 2020-09-03 Jakub Jelinek <jakub@redhat.com> PR lto/94311 * gimple.h (gimple_location_ptr, gimple_phi_arg_location_ptr): New functions. * streamer-hooks.h (struct streamer_hooks): Add output_location_and_block callback. Fix up formatting for output_location. (stream_output_location_and_block): Define. * lto-streamer.h (class lto_location_cache): Fix comment typo. Add current_block member. (lto_location_cache::input_location_and_block): New method. (lto_location_cache::lto_location_cache): Initialize current_block. (lto_location_cache::cached_location): Add block member. (struct output_block): Add current_block member. (lto_output_location): Formatting fix. (lto_output_location_and_block): Declare. * lto-streamer.c (lto_streamer_hooks_init): Initialize streamer_hooks.output_location_and_block. * lto-streamer-in.c (lto_location_cache::cmp_loc): Also compare block members. (lto_location_cache::apply_location_cache): Handle blocks. (lto_location_cache::accept_location_cache, lto_location_cache::revert_location_cache): Fix up function comments. (lto_location_cache::input_location_and_block): New method. (lto_location_cache::input_location): Implement using input_location_and_block. (input_function): Invoke apply_location_cache after streaming in all bbs. * lto-streamer-out.c (clear_line_info): Set current_block. (lto_output_location_1): New function, moved from lto_output_location, added block handling. (lto_output_location): Implement using lto_output_location_1. (lto_output_location_and_block): New function. * gimple-streamer-in.c (input_phi): Use input_location_and_block to input and cache both location and block. (input_gimple_stmt): Likewise. * gimple-streamer-out.c (output_phi): Use stream_output_location_and_block. (output_gimple_stmt): Likewise.
2020-09-03Improve constant folding of vector lowering with vector boolsRichard Biener2-14/+4
This improves the situation somewhat when vector lowering tries to access vector bools as seen in PR96814. 2020-09-03 Richard Biener <rguenther@suse.de> * tree-vect-generic.c (tree_vec_extract): Remove odd special-casing of boolean vectors. * fold-const.c (fold_ternary_loc): Handle boolean vector type BIT_FIELD_REFs.
2020-09-03Preliminary work on support for 128bits integersArnaud Charlet3-0/+12
* fe.h, opt.ads (Enable_128bit_Types): New. * stand.ads (Standard_Long_Long_Long_Integer, S_Long_Long_Long_Integer): New.
2020-09-03Look at fullest view when checking for static types in unnestingArnaud Charlet3-13/+96
When seeing if any bound involved in a type is an uplevel reference, we must look at the fullest view of a type, since that's what the backends will do. Similarly for private types. We introduce Get_Fullest_View for that purpose. * sem_util.ads, sem_util.adb (Get_Fullest_View): New procedure. * exp_unst.adb (Check Static_Type): Do all processing on fullest view of specified type.
2020-09-03Optimize memory broadcast for constant vector under AVX512.liuhongt19-23/+848
For constant vector having one duplicated value, there's no need to put whole vector in the constant pool, using embedded broadcast instead. 2020-07-09 Hongtao Liu <hongtao.liu@intel.com> gcc/ChangeLog: PR target/87767 * config/i386/i386-features.c (replace_constant_pool_with_broadcast): New function. (constant_pool_broadcast): Ditto. (class pass_constant_pool_broadcast): New pass. (make_pass_constant_pool_broadcast): Ditto. (remove_partial_avx_dependency): Call replace_constant_pool_with_broadcast under TARGET_AVX512F, it would save compile time when both pass rpad and cpb are available. (remove_partial_avx_dependency_gate): New function. (class pass_remove_partial_avx_dependency::gate): Call remove_partial_avx_dependency_gate. * config/i386/i386-passes.def: Insert new pass after combine. * config/i386/i386-protos.h (make_pass_constant_pool_broadcast): Declare. * config/i386/sse.md (*avx512dq_mul<mode>3<mask_name>_bcst): New define_insn. (*avx512f_mul<mode>3<mask_name>_bcst): Ditto. * config/i386/avx512fintrin.h (_mm512_set1_ps, _mm512_set1_pd,_mm512_set1_epi32, _mm512_set1_epi64): Adjusted. gcc/testsuite/ChangeLog: PR target/87767 * gcc.target/i386/avx2-broadcast-pr87767-1.c: New test. * gcc.target/i386/avx512f-broadcast-pr87767-1.c: New test. * gcc.target/i386/avx512f-broadcast-pr87767-2.c: New test. * gcc.target/i386/avx512f-broadcast-pr87767-3.c: New test. * gcc.target/i386/avx512f-broadcast-pr87767-4.c: New test. * gcc.target/i386/avx512f-broadcast-pr87767-5.c: New test. * gcc.target/i386/avx512f-broadcast-pr87767-6.c: New test. * gcc.target/i386/avx512f-broadcast-pr87767-7.c: New test. * gcc.target/i386/avx512vl-broadcast-pr87767-1.c: New test. * gcc.target/i386/avx512vl-broadcast-pr87767-1.c: New test. * gcc.target/i386/avx512vl-broadcast-pr87767-2.c: New test. * gcc.target/i386/avx512vl-broadcast-pr87767-3.c: New test. * gcc.target/i386/avx512vl-broadcast-pr87767-4.c: New test. * gcc.target/i386/avx512vl-broadcast-pr87767-5.c: New test. * gcc.target/i386/avx512vl-broadcast-pr87767-6.c: New test.
2020-09-03Adjust testcase.liuhongt6-12/+25
gcc/testsuite/ChangeLog: PR target/96246 PR target/96855 PR target/96856 PR target/96857 * g++.target/i386/avx512bw-pr96246-2.C: Add runtime check for AVX512BW. * g++.target/i386/avx512vl-pr96246-2.C: Add runtime check for AVX512BW and AVX512VL * g++.target/i386/avx512f-helper.h: New header. * gcc.target/i386/pr92658-avx512f.c: Add -mprefer-vector-width=512 to avoid impact of different default mtune which gcc is built with. * gcc.target/i386/avx512bw-pr95488-1.c: Ditto. * gcc.target/i386/pr92645-4.c: Add -mno-avx512f to avoid impact of different default march which gcc is built with.
2020-09-03Daily bump.GCC Administrator5-1/+206
2020-09-02d: __vectors unsupported in hardware should be rejected at compile-time.Iain Buclaw55-1960/+2076
gcc/d/ChangeLog: PR d/96869 * d-builtins.cc (build_frontend_type): Don't expose intrinsics that use unsupported vector types. * d-target.cc (Target::isVectorTypeSupported): Restrict to supporting only if TARGET_VECTOR_MODE_SUPPORTED_P is true. Don't allow complex or boolean vector types. gcc/testsuite/ChangeLog: PR d/96869 * gdc.dg/simd.d: Removed. * gdc.dg/cast1.d: New test. * gdc.dg/gdc213.d: Compile with target vect_sizes_16B_8B. * gdc.dg/gdc284.d: Likewise. * gdc.dg/gdc67.d: Likewise. * gdc.dg/pr96869.d: New test. * gdc.dg/simd1.d: New test. * gdc.dg/simd10447.d: New test. * gdc.dg/simd12776.d: New test. * gdc.dg/simd13841.d: New test. * gdc.dg/simd13927.d: New test. * gdc.dg/simd15123.d: New test. * gdc.dg/simd15144.d: New test. * gdc.dg/simd16087.d: New test. * gdc.dg/simd16697.d: New test. * gdc.dg/simd17237.d: New test. * gdc.dg/simd17695.d: New test. * gdc.dg/simd17720a.d: New test. * gdc.dg/simd17720b.d: New test. * gdc.dg/simd19224.d: New test. * gdc.dg/simd19627.d: New test. * gdc.dg/simd19628.d: New test. * gdc.dg/simd19629.d: New test. * gdc.dg/simd19630.d: New test. * gdc.dg/simd2a.d: New test. * gdc.dg/simd2b.d: New test. * gdc.dg/simd2c.d: New test. * gdc.dg/simd2d.d: New test. * gdc.dg/simd2e.d: New test. * gdc.dg/simd2f.d: New test. * gdc.dg/simd2g.d: New test. * gdc.dg/simd2h.d: New test. * gdc.dg/simd2i.d: New test. * gdc.dg/simd2j.d: New test. * gdc.dg/simd7951.d: New test. * gdc.dg/torture/array2.d: New test. * gdc.dg/torture/array3.d: New test. * gdc.dg/torture/simd16488a.d: New test. * gdc.dg/torture/simd16488b.d: New test. * gdc.dg/torture/simd16703.d: New test. * gdc.dg/torture/simd19223.d: New test. * gdc.dg/torture/simd19607.d: New test. * gdc.dg/torture/simd3.d: New test. * gdc.dg/torture/simd4.d: New test. * gdc.dg/torture/simd7411.d: New test. * gdc.dg/torture/simd7413a.d: New test. * gdc.dg/torture/simd7413b.d: New test. * gdc.dg/torture/simd7414.d: New test. * gdc.dg/torture/simd9200.d: New test. * gdc.dg/torture/simd9304.d: New test. * gdc.dg/torture/simd9449.d: New test. * gdc.dg/torture/simd9910.d: New test.
2020-09-02d: Only test with default permutation flags for runnable tests.Iain Buclaw1-12/+17
Unless the test explicitly requests, all compilable tests as well as fail_compilation tests will be ran without any extra flags. The C++ tests now are checked against shared D runtime library. gcc/testsuite/ChangeLog: * lib/gdc-utils.exp (gdc-convert-test): Handle LINK directive. Set PERMUTE_ARGS as DEFAULT_DFLAGS only for runnable tests. (gdc-do-test): Set default action of compilable tests to compile. Test SHARED_OPTION on runnable_cxx tests.
2020-09-02d: Move all runnable tests in gdc.dg to gdc.dg/tortureIain Buclaw37-53/+90
Tests that are not executed do not need to be compiled as torture tests, they are only present for testing for a certain bug or ICE. gcc/testsuite/ChangeLog: * gdc.dg/dg.exp: Remove torture options. * gdc.dg/gdc115.d: Move test to gdc.dg/torture. * gdc.dg/gdc131.d: Likewise. * gdc.dg/gdc141.d: Likewise. * gdc.dg/gdc17.d: Likewise. * gdc.dg/gdc171.d: Likewise. * gdc.dg/gdc179.d: Likewise. * gdc.dg/gdc186.d: Likewise. * gdc.dg/gdc187.d: Likewise. * gdc.dg/gdc191.d: Likewise. * gdc.dg/gdc198.d: Likewise. * gdc.dg/gdc200.d: Likewise. * gdc.dg/gdc210.d: Likewise. * gdc.dg/gdc240.d: Likewise. * gdc.dg/gdc242b.d: Likewise. * gdc.dg/gdc248.d: Likewise. * gdc.dg/gdc250.d: Likewise. * gdc.dg/gdc273.d: Likewise. * gdc.dg/gdc283.d: Likewise. * gdc.dg/gdc285.d: Likewise. * gdc.dg/gdc286.d: Likewise. * gdc.dg/gdc309.d: Likewise. * gdc.dg/gdc35.d: Likewise. * gdc.dg/gdc36.d: Likewise. * gdc.dg/gdc51.d: Likewise. * gdc.dg/gdc57.d: Likewise. * gdc.dg/gdc66.d: Likewise. * gdc.dg/imports/gdc36.d: Likewise. * gdc.dg/init1.d: Likewise. * gdc.dg/pr92309.d: Likewise. * gdc.dg/pr94424.d: Likewise. * gdc.dg/pr94777b.d: Likewise. * gdc.dg/pr96152.d: Likewise. * gdc.dg/pr96153.d: Likewise. * gdc.dg/pr96156.d: Likewise. * gdc.dg/pr96157a.d: Likewise. * gdc.dg/torture/torture.exp: New file.
2020-09-02c++: Stop defining true, false and bool as macros in <stdbool.h>Jonathan Wakely2-7/+6
Since r216679 these macros have only been defined in C++98 mode, rather than all modes. That is permitted as a GNU extension because that header doesn't exist in the C++ standard until C++11, so we can make it do whatever we want for C++98. But as discussed in the PR c++/60304 comments, these macros shouldn't ever be defined for C++. This patch removes the macro definitions for C++98 too. The new test already passed for C++98 (and the conversion is ill-formed in C++11 and later) so this new test is arguably unnecessary. gcc/ChangeLog: PR c++/60304 * ginclude/stdbool.h (bool, false, true): Never define for C++. gcc/testsuite/ChangeLog: PR c++/60304 * g++.dg/warn/Wconversion-null-5.C: New test.
2020-09-02testsuite: Add missing <exception> header to testcaseJonathan Wakely1-0/+1
This test no longer compiles because <new> stopped including <exception>, so std::set_terminate is not defined. gcc/testsuite/ChangeLog: * g++.old-deja/g++.abi/cxa_vec.C: Include <exception> for std::set_terminate.
2020-09-02MSP430: Fix -mlarge documentation to indicate size_t is a 20-bit typeJozef Lawrynowicz1-1/+1
gcc/ChangeLog: * doc/invoke.texi (MSP430 options): Fix -mlarge description to indicate size_t is a 20-bit type.
2020-09-02MSP430: Skip gcc.dg/pr55940.c in the small memory modelJozef Lawrynowicz1-0/+1
In the MSP430 small memory model, there is a 16-bit address space and pointer arithmetic wraps around the address space, so any calculated address is always within this range. In this test, pointer arithmetic wraps when 0x1000 is added to the address of a variable, causing the resulting address to be unexpectedly less than 0x2000, which breaks the test. gcc/testsuite/ChangeLog: * gcc.dg/pr55940.c: Skip for msp430 unless -mlarge is specified.
2020-09-02fortran: Fix o'...' boz to integer/real conversions [PR96859]Jakub Jelinek2-4/+29
The standard says that excess digits from boz are truncated. For hexadecimal or binary, the routines copy just the number of digits that will be needed, but for octal we copy number of digits that contain one extra bit (for 8-bit, 32-bit or 128-bit, i.e. kind 1, 4 and 16) or two extra bits (for 16-bit or 64-bit, i.e. kind 2 and 8). The clearing of the first bit is done correctly by changing the first digit if it is 4-7 to one smaller by 4 (i.e. modulo 4). The clearing of the first two bits is done by changing 4 or 6 to 0 and 5 or 7 to 1, which is incorrect, because we really want to change the first digit to 0 if it was even, or to 1 if it was odd, so digits 2 and 3 are mishandled by keeping them as is, rather than changing 2 to 0 and 3 to 1. 2020-09-02 Jakub Jelinek <jakub@redhat.com> PR fortran/96859 * check.c (gfc_boz2real, gfc_boz2int): When clearing first two bits, change also '2' to '0' and '3' to '1' rather than just handling '4' through '7'. * gfortran.dg/pr96859.f90: New test.
2020-09-02hppa: Improve hppa_rtx_costs for shifts by constants.Roger Sayle1-0/+21
This patch provides more accurate rtx_costs estimates for shifts by integer constants (which are cheaper than by a register amount). 2020-09-02 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * config/pa/pa.c (hppa_rtx_costs) [ASHIFT, ASHIFTRT, LSHIFTRT]: Provide accurate costs for shifts of integer constants.
2020-09-02bpf: use the default asm_named_section target hookJose E. Marchesi1-17/+0
This patch makes the BPF backend to not provide its own implementation of the asm_named_section hook; the default handler works perfectly well. 2020-09-02 Jose E. Marchesi <jose.marchesi@oracle.com> gcc/ * config/bpf/bpf.c (bpf_asm_named_section): Delete. (TARGET_ASM_NAMED_SECTION): Likewise.
2020-09-02bpf: use elfos.hJose E. Marchesi2-37/+10
BPF is an ELF-based target, so it definitely benefits from using elfos.h. This patch makes the target to use it, and removes superfluous definitions from bpf.h which are better defined in elfos.h. Note that BPF, despite being an ELF target, doesn't use DWARF. At some point it will generate DWARF when generating xBPF (-mxbpf) and BTF when generating plain eBPF, but for the time being it just generates stabs. 2020-09-02 Jose E. Marchesi <jemarch@gnu.org> gcc/ * config.gcc: Use elfos.h in bpf-*-* targets. * config/bpf/bpf.h (MAX_OFILE_ALIGNMENT): Remove definition. (COMMON_ASM_OP): Likewise. (INIT_SECTION_ASM_OP): Likewise. (FINI_SECTION_ASM_OP): Likewise. (ASM_OUTPUT_SKIP): Likewise. (ASM_OUTPUT_ALIGNED_COMMON): Likewise. (ASM_OUTPUT_ALIGNED_LOCAL): Likewise.
2020-09-02Daily bump.GCC Administrator7-1/+120
2020-09-01Use the determined lower bound of the range of offsets in a PLUS_EXPR.Martin Sebor4-8/+129
gcc/ChangeLog: * builtins.c (compute_objsize): Only replace the upper bound of a POINTER_PLUS offset when it's less than the lower bound. gcc/testsuite/ChangeLog: * gcc.dg/Wstringop-overflow.c: Remove xfails. * gcc.dg/Wstringop-overflow-42.c: New test. * gcc.dg/Wstringop-overread-4.c: New test.
2020-09-01c++: Allow new char[4]{"foo"} [PR77841]Marek Polacek2-0/+12
Currently, we allow new char[]{"foo"}, but not new char[4]{"foo"}. We should accept the latter too: [dcl.init.list]p3.3 says to treat this as [dcl.init.string]. We were rejecting this code because we never called reshape_init before the digest_init in build_new_1. reshape_init handles [dcl.init.string] by unwrapping the STRING_CST from its enclosing { }, and digest_init assumes that reshape_init has been called for aggregates anyway, and an array is an aggregate. gcc/cp/ChangeLog: PR c++/77841 * init.c (build_new_1): Call reshape_init. gcc/testsuite/ChangeLog: PR c++/77841 * g++.dg/cpp0x/initlist-new4.C: New test.
2020-09-01rs6000: MMA built-in dies with incorrect sharing of tree nodes errorPeter Bergner2-7/+62
When we expand our MMA built-ins into gimple, we erroneously reused the accumulator memory reference for both the source input value as well as the destination output value. This led to a tree sharing error. The solution is to create separate memory references for the input and output values. 2020-09-01 Peter Bergner <bergner@linux.ibm.com> gcc/ PR target/96808 * config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Do not reuse accumulator memory reference for source and destination accesses. gcc/testsuite/ PR target/96808 * gcc.target/powerpc/pr96808.c: New test.
2020-09-01analyzer: fix false NULL deref warning after previous deref [PR96792]David Malcolm2-0/+48
gcc/analyzer/ChangeLog: PR analyzer/96792 * region-model.cc (region_model::deref_rvalue): Add the constraint that PTR_SVAL is non-NULL. gcc/testsuite/ChangeLog: PR analyzer/96792 * gcc.dg/analyzer/pr96792.c: New test.
2020-09-01vec: use inexact growth where possible.Martin Liska4-40/+13
gcc/ChangeLog: * cfgrtl.c (rtl_create_basic_block): Use default value for growth vector function. * gimple.c (gimple_set_bb): Likewise. * symbol-summary.h: Likewise. * tree-cfg.c (init_empty_tree_cfg_for_function): Likewise. (build_gimple_cfg): Likewise. (create_bb): Likewise. (move_block_to_fn): Likewise.
2020-09-01vec: default exect = false in grow functions.Martin Liska1-5/+5
gcc/ChangeLog: * vec.h (vec_safe_grow): Change default of exact to false. (vec_safe_grow_cleared): Likewise.
2020-09-01PR middle-end/90597: gcc_assert ICE in layout_typeRoger Sayle1-2/+3
This patch fixes the default implementation of TARGET_VECTOR_ALIGNMENT, known as default_vector_alignment, using the same logic as my earlier nvptx patch, as the ICE caused by TYPE_SIZE(type) being zero during error handling in gcc.dg/attr-vector_size.c is common among backends, and is known in bugzilla as PR middle-end/90597, apparently a recent regression. 2020-09-01 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog: PR middle-end/90597 * targhooks.c (default_vector_alignment): Return at least the GET_MODE_ALIGNMENT for the type's mode.