- 03 Jul, 2018 7 commits
-
-
This patch is the main part of PR85694. The aim is to recognise at least: signed char *a, *b, *c; ... for (int i = 0; i < 2048; i++) c[i] = (a[i] + b[i]) >> 1; as an over-widening pattern, since the addition and shift can be done on shorts rather than ints. However, it ended up being a lot more general than that. The current over-widening pattern detection is limited to a few simple cases: logical ops with immediate second operands, and shifts by a constant. These cases are enough for common pixel-format conversion and can be detected in a peephole way. The loop above requires two generalisations of the current code: support for addition as well as logical ops, and support for non-constant second operands. These are harder to detect in the same peephole way, so the patch tries to take a more global approach. The idea is to get information about the minimum operation width in two ways: (1) by using the range information attached to the SSA_NAMEs (effectively a forward walk, since the range info is context-independent). (2) by back-propagating the number of output bits required by users of the result. As explained in the comments, there's a balance to be struck between narrowing an individual operation and fitting in with the surrounding code. The approach is pretty conservative: if we could narrow an operation to N bits without changing its semantics, it's OK to do that if: - no operations later in the chain require more than N bits; or - all internally-defined inputs are extended from N bits or fewer, and at least one of them is single-use. See the comments for the rationale. I didn't bother adding STMT_VINFO_* wrappers for the new fields since the code seemed more readable without. 2018-06-20 Richard Sandiford <richard.sandiford@arm.com> gcc/ * poly-int.h (print_hex): New function. * dumpfile.h (dump_dec, dump_hex): Declare. * dumpfile.c (dump_dec, dump_hex): New poly_wide_int functions. * tree-vectorizer.h (_stmt_vec_info): Add min_output_precision, min_input_precision, operation_precision and operation_sign. * tree-vect-patterns.c (vect_get_range_info): New function. (vect_same_loop_or_bb_p, vect_single_imm_use) (vect_operation_fits_smaller_type): Delete. (vect_look_through_possible_promotion): Add an optional single_use_p parameter. (vect_recog_over_widening_pattern): Rewrite to use new stmt_vec_info infomration. Handle one operation at a time. (vect_recog_cast_forwprop_pattern, vect_narrowable_type_p) (vect_truncatable_operation_p, vect_set_operation_type) (vect_set_min_input_precision): New functions. (vect_determine_min_output_precision_1): Likewise. (vect_determine_min_output_precision): Likewise. (vect_determine_precisions_from_range): Likewise. (vect_determine_precisions_from_users): Likewise. (vect_determine_stmt_precisions, vect_determine_precisions): Likewise. (vect_vect_recog_func_ptrs): Put over_widening first. Add cast_forwprop. (vect_pattern_recog): Call vect_determine_precisions. gcc/testsuite/ * gcc.dg/vect/vect-widen-mult-u8-u32.c: Check specifically for a widen_mult pattern. * gcc.dg/vect/vect-over-widen-1.c: Update the scan tests for new over-widening messages. * gcc.dg/vect/vect-over-widen-1-big-array.c: Likewise. * gcc.dg/vect/vect-over-widen-2.c: Likewise. * gcc.dg/vect/vect-over-widen-2-big-array.c: Likewise. * gcc.dg/vect/vect-over-widen-3.c: Likewise. * gcc.dg/vect/vect-over-widen-3-big-array.c: Likewise. * gcc.dg/vect/vect-over-widen-4.c: Likewise. * gcc.dg/vect/vect-over-widen-4-big-array.c: Likewise. * gcc.dg/vect/bb-slp-over-widen-1.c: New test. * gcc.dg/vect/bb-slp-over-widen-2.c: Likewise. * gcc.dg/vect/vect-over-widen-5.c: Likewise. * gcc.dg/vect/vect-over-widen-6.c: Likewise. * gcc.dg/vect/vect-over-widen-7.c: Likewise. * gcc.dg/vect/vect-over-widen-8.c: Likewise. * gcc.dg/vect/vect-over-widen-9.c: Likewise. * gcc.dg/vect/vect-over-widen-10.c: Likewise. * gcc.dg/vect/vect-over-widen-11.c: Likewise. * gcc.dg/vect/vect-over-widen-12.c: Likewise. * gcc.dg/vect/vect-over-widen-13.c: Likewise. * gcc.dg/vect/vect-over-widen-14.c: Likewise. * gcc.dg/vect/vect-over-widen-15.c: Likewise. * gcc.dg/vect/vect-over-widen-16.c: Likewise. * gcc.dg/vect/vect-over-widen-17.c: Likewise. * gcc.dg/vect/vect-over-widen-18.c: Likewise. * gcc.dg/vect/vect-over-widen-19.c: Likewise. * gcc.dg/vect/vect-over-widen-20.c: Likewise. * gcc.dg/vect/vect-over-widen-21.c: Likewise. From-SVN: r262333
Richard Sandiford committed -
r262275 allowed pattern matching on pattern statements. Testing for SVE on more benchmarks showed a case where this interacted badly with 14/n. The new over-widening detection could narrow a COND_EXPR A to another COND_EXPR B, which mixed_size_cond could then match. This was working as expected. However, we left B (now dead) in the pattern definition sequence with a non-null PATTERN_DEF_SEQ. mask_conversion also matched B, and unlike most recognisers, didn't clear PATTERN_DEF_SEQ before adding statements to it. This meant that the statements created by mixed_size_cond appeared in two supposedy separate sequences, causing much confusion. This patch removes pattern statements that are replaced by further pattern statements. As a belt-and-braces fix, it also nullifies PATTERN_DEF_SEQ on failure, in the same way Richard B. did recently for RELATED_STMT. I have patches to clean up the PATTERN_DEF_SEQ handling, but they only apply after the complete PR85694 sequence, whereas this needs to go in before 14/n. 2018-07-03 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-patterns.c (vect_mark_pattern_stmts): Remove pattern statements that have been replaced by further pattern statements. (vect_pattern_recog_1): Clear STMT_VINFO_PATTERN_DEF_SEQ on failure. gcc/testsuite/ * gcc.dg/vect/vect-mixed-size-cond-1.c: New test. From-SVN: r262332
Richard Sandiford committed -
2018-07-03 Richard Biener <rguenther@suse.de> * tree-vect-stmts.c (vect_is_simple_use): Consolidate dumping, always set *dt. Dump vectype in vectype overload. * dumpfile.h (dump_gimple_expr): New function. (dump_gimple_expr_loc): Likewise. * dumpfile.c (dump_gimple_expr): New function. (dump_gimple_expr_loc): Likewise. From-SVN: r262330
Richard Biener committed -
h8300.md (movqi_h8300, [...]): Consolidate the H8/300, H8/300H and H8/S variants into a single pattern. * config/h8300/h8300.md (movqi_h8300, movqi_h8300hs): Consolidate the H8/300, H8/300H and H8/S variants into a single pattern. (movhi_h8300, movqi_h8300hs): Similarly. (pushqi_h8300hs, pushhi_h8300hs): Consolidate into a single pattern. (QHI mode iterator): New. From-SVN: r262329
Jeff Law committed -
From-SVN: r262328
Jeff Law committed -
gcc/ * config/riscv/riscv.c (riscv_expand_epilogue): Use emit_jump_insn instead of emit_insn for interrupt returns. * config/riscv/riscv.md (riscv_met): Add (return) to rtl. (riscv_sret, riscv_uret): Likewise. gcc/testsuite/ * gcc.target/riscv/interrupt-debug.c: New. From-SVN: r262327
Jim Wilson committed -
From-SVN: r262326
GCC Administrator committed
-
- 02 Jul, 2018 23 commits
-
-
Extend __is_convertible_helper to also detect whether the conversion is non-throwing, for std::is_nothrow_convertible in C++2a, * include/std/type_traits [__cplusplus > 201703] (__is_convertible_helper::__is_nothrow_type): Define new member. (__is_convertible_helper<_From, _To, false>::__test_aux1): Add noexcept. (__is_convertible_helper<_From, _To, false>::__test_nothrow) (__is_convertible_helper<_From, _To, false>::__is_nothrow_type): Add new members. (is_nothrow_convertible, is_nothrow_convertible_v): Define for C++2a. * testsuite/20_util/is_nothrow_convertible/value.cc: New. * testsuite/20_util/is_nothrow_convertible/requirements/ explicit_instantiation.cc: New. * testsuite/20_util/is_nothrow_convertible/requirements/typedefs.cc: New. From-SVN: r262322
Jonathan Wakely committed -
parser.c (set_and_check_decl_spec_loc): Use rich_location::add_range in error message about __thread and thread_local... /cp 2018-07-02 Paolo Carlini <paolo.carlini@oracle.com> * parser.c (set_and_check_decl_spec_loc): Use rich_location::add_range in error message about __thread and thread_local at the same time. /testsuite 2018-07-02 Paolo Carlini <paolo.carlini@oracle.com> * g++.dg/diagnostic/thread-thread_local.C: New. From-SVN: r262321
Paolo Carlini committed -
* include/std/type_traits (type_identity, type_identity_t): Define for C++2a. * testsuite/20_util/type_identity/requirements/alias_decl.cc: New. * testsuite/20_util/type_identity/requirements/ explicit_instantiation.cc:New. * testsuite/20_util/type_identity/requirements/typedefs.cc: New. From-SVN: r262319
Jonathan Wakely committed -
Avoid creation of unnecessary basic_string objects by using a simplified string_view type and performing comparisons on that type instead. A temporary basic_string object is still used when the sub_match's iterators are not contiguous, in order to get an object that the __string_view can reference. * include/bits/regex.h (sub_match::operator string_type): Call str(). (sub_match::compare): Use _M_str() instead of str(). (sub_match::_M_compare): New public function. (sub_match::__string_view): New helper type. (sub_match::_M_str): New overloaded functions to avoid creating a string_type object when not needed. (operator==, operator!=, operator<, operator>, operator<=, operator>=): Use sub_match::_M_compare instead of creating string_type objects. Fix Doxygen comments. * include/bits/regex_compiler.h (__has_contiguous_iter): Remove. (__is_contiguous_normal_iter): Rename to __is_contiguous_iter and simplify. (__enable_if_contiguous_iter, __disable_if_contiguous_iter): Use __enable_if_t. * include/std/type_traits (__enable_if_t): Define for C++11. * testsuite/28_regex/sub_match/compare.cc: New. * testsuite/util/testsuite_iterators.h (remove_cv): Add transformation trait. (input_iterator_wrapper): Use remove_cv for value_type argument of std::iterator base class. From-SVN: r262318
Jonathan Wakely committed -
This patch moves a workaround for locale differences from a selftest in pretty-print.c to selftest.h/c to make it reusable; I need this for a selftest in a followup patch. gcc/ChangeLog: * pretty-print.c (selftest::test_pp_format): Move save and restore of quotes to class auto_fix_quotes, and add an instance. * selftest.c: Include "intl.h". (selftest::auto_fix_quotes::auto_fix_quotes): New ctor. (selftest::auto_fix_quotes::~auto_fix_quotes): New dtor. * selftest.h (selftest::auto_fix_quotes): New class. From-SVN: r262317
David Malcolm committed -
PR go/86331 os: check return value as well as error from waitid https://gcc.gnu.org/PR86331 indicates that if a signal handler runs it is possible for syscall.Syscall6 to return a non-zero errno value even if no error occurs. That is a problem in general, but this fix will let us work around the general problem for the specific case of calling waitid. Reviewed-on: https://go-review.googlesource.com/121595 From-SVN: r262313
Ian Lance Taylor committed -
* config/aarch64/aarch64-protos.h, config/aarch64/aarch64.c (aarch64_sve_prepare_conditional_op): Remove. * config/aarch64/aarch64-sve.md (cond_<SVE_INT_BINARY><SVE_I>): Allow aarch64_simd_reg_or_zero as select operand; remove the aarch64_sve_prepare_conditional_op call. (cond_<SVE_INT_BINARY_SD><SVE_SDI>): Likewise. (cond_<SVE_COND_FP_BINARY><SVE_F>): Likewise. (*cond_<SVE_INT_BINARY><SVE_I>_z): New pattern. (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_z): New pattern. (*cond_<SVE_COND_FP_BINARY><SVE_F>_z): New pattern. (*cond_<SVE_INT_BINARY><SVE_I>_any): New pattern. (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_any): New pattern. (*cond_<SVE_COND_FP_BINARY><SVE_F>_any): New pattern and a splitters to match all of the *_any patterns. * config/aarch64/predicates.md (aarch64_sve_any_binary_operator): New. * config/aarch64/iterators.md (SVE_INT_BINARY_REV): Remove. (SVE_COND_FP_BINARY_REV): Remove. (sve_int_op_rev, sve_fp_op_rev): New. * config/aarch64/aarch64-sve.md (*cond_<SVE_INT_BINARY><SVE_I>_0): New. (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_0): New. (*cond_<SVE_COND_FP_BINARY><SVE_F>_0): New. (*cond_<SVE_INT_BINARY><SVE_I>_2): Rename, add movprfx alternative. (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_2): Similarly. (*cond_<SVE_COND_FP_BINARY><SVE_F>_2): Similarly. (*cond_<SVE_INT_BINARY><SVE_I>_3): Similarly; use sve_int_op_rev. (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_3): Similarly. (*cond_<SVE_COND_FP_BINARY><SVE_F>_3): Similarly; use sve_fp_op_rev. * config/aarch64/aarch64-sve.md (cond_<SVE_COND_FP_BINARY><SVE_F>): Remove match_dup 1 from the inner unspec. (*cond_<SVE_COND_FP_BINARY><SVE_F>): Likewise. * config/aarch64/aarch64.md (movprfx): New attr. (length): Default movprfx to 8. * config/aarch64/aarch64-sve.md (*mul<SVE_I>3): Add movprfx alt. (*madd<SVE_I>, *msub<SVE_I): Likewise. (*<su>mul<SVE_I>3_highpart): Likewise. (*<SVE_INT_BINARY_SD><SVE_SDI>3): Likewise. (*v<ASHIFT><SVE_I>3): Likewise. (*<su><MAXMIN><SVE_I>3): Likewise. (*<su><MAXMIN><SVE_F>3): Likewise. (*fma<SVE_F>4, *fnma<SVE_F>4): Likewise. (*fms<SVE_F>4, *fnms<SVE_F>4): Likewise. (*div<SVE_F>4): Likewise. From-SVN: r262312
Richard Henderson committed -
2018-07-02 Martin Liska <mliska@suse.cz> PR testsuite/86366 * gcc.dg/profile-dir-1.c: Fix scanned pattern. * gcc.dg/profile-dir-2.c: Likewise. * gcc.dg/profile-dir-3.c: Likewise. From-SVN: r262311
Martin Liska committed -
2018-07-02 Christophe Lyon <christophe.lyon@linaro.org> * gcc.target/arm/arm-soft-strd-even.c: Skip if -mfloat-abi is overriden. From-SVN: r262309
Christophe Lyon committed -
Noticed by Christophe on arm-none-linux-gnueabihf. 2018-07-02 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-patterns.c (vect_recog_widen_shift_pattern): Fix typo in dump string. From-SVN: r262308
Richard Sandiford committed -
2018-07-02 Richard Biener <rguenther@suse.de> PR tree-optimization/86363 * tree-ssa-sccvn.c (vn_reference_lookup_3): Check the memset argument refers to a non-variable address. * gcc.dg/torture/pr86363.c: New testcase. From-SVN: r262307
Richard Biener committed -
extract_range_from_binary_expr_1 into separate functions. From-SVN: r262306
Aldy Hernandez committed -
* tree-vrp.c (extract_range_from_unary_expr): Abstract ABS_EXPR code... (extract_range_from_abs_expr): ...here. From-SVN: r262305
Aldy Hernandez committed -
2018-07-02 Martin Liska <mliska@suse.cz> * gcc.dg/completion-1.c: New test. * gcc.dg/completion-2.c: New test. * gcc.dg/completion-3.c: New test. From-SVN: r262304
Martin Liska committed -
i386.c (ix86_finalize_stack_frame_flags): Do not overrule -fno-omit-frame-pointer when not optimizing. * config/i386/i386.c (ix86_finalize_stack_frame_flags): Do not overrule -fno-omit-frame-pointer when not optimizing. From-SVN: r262302
Eric Botcazou committed -
re PR lto/86321 (ICE: in splice_child_die, at dwarf2out.c:5693 for several Fortran tests with -g -flto) 2018-07-02 Richard Biener <rguenther@suse.de> PR lto/86321 * trans-types.c (gfc_get_array_type_bounds): Unshare TYPE_FIELDs for the distinct type copy. From-SVN: r262301
Richard Biener committed -
2018-07-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/45305 * expr.c : Add a prototype for scalarize_intrinsic_call. (gfc_simplify_expr): Use scalarize_intrinsic_call for elemental intrinsic function calls. (scalarize_intrinsic_call): Add 'init_flag' argument. Check if the expression or any of the actual argument expressions are NULL. Before calling gfc_check_init_expr, check 'init_flag'. Only simplify the scalarized expressions if there are no errors on the stack. (gfc_check_init_expr): Set 'init_flag' true in the call to scalarize_intrinsic_call. 2018-07-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/45305 * gfortran.dg/scalarize_parameter_array_2.f90: New test. From-SVN: r262300
Paul Thomas committed -
2018-07-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/45305 * expr.c : Add a prototype for scalarize_intrinsic_call. (gfc_simplify_expr): Use scalarize_intrinsic_call for elemental intrinsic function calls. (scalarize_intrinsic_call): Add 'init_flag' argument. Check if the expression or any of the actual argument expressions are NULL. Before calling gfc_check_init_expr, check 'init_flag'. Only simplify the scalarized expressions if there are no errors on the stack. (gfc_check_init_expr): Set 'init_flag' true in the call to scalarize_intrinsic_call. 2018-07-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/45305 * gfortran.dg/scalarize_parameter_array_2.f90: New test. From-SVN: r262299
Paul Thomas committed -
2018-07-02 Martin Liska <mliska@suse.cz> PR ipa/86279 * ipa-pure-const.c (malloc_candidate_p): Revert usage of ::get. (propagate_nothrow): Likewise. 2018-07-02 Martin Liska <mliska@suse.cz> PR ipa/86279 * gcc.dg/ipa/pr86279.c: New test. From-SVN: r262298
Martin Liska committed -
2018-07-02 Martin Liska <mliska@suse.cz> PR ipa/86323 * ipa-inline.c (early_inliner): Revert wrongly added ::get call. 2018-07-02 Martin Liska <mliska@suse.cz> PR ipa/86323 * g++.dg/ipa/pr86323.C: New test. From-SVN: r262297
Martin Liska committed -
2018-07-02 Martin Liska <mliska@suse.cz> * gnatvsn.ads: Bump Library_Version to 9. From-SVN: r262296
Martin Liska committed -
gcc/ChangeLog: * dumpfile.c (dump_generic_expr_loc): Undo removal of this function in r262149, changing "loc" param from source_location to const dump_location_t &. * dumpfile.h (dump_generic_expr_loc): Undo removal of this declaration, as above. From-SVN: r262295
David Malcolm committed -
From-SVN: r262294
GCC Administrator committed
-
- 01 Jul, 2018 8 commits
-
-
2018-07-01 Tom de Vries <tdevries@suse.de> revert: 2018-07-01 Tom de Vries <tdevries@suse.de> * gcc.dg/guality/prevent-optimization.h (VOLATILE): Define. * gcc.dg/guality/vla-1.c (f1): Mark local vla a as VOLATILE. From-SVN: r262290
Tom de Vries committed -
compatible output. * common/config/pdp11/pdp11-common.c (pdp11_handle_option): Handle -munit-asm, -mgnu-asm, -mdec-asm. * config/pdp11/pdp11-protos.h (pdp11_gen_int_label): New. (pdp11_output_labelref): New. (pdp11_output_def): New. (pdp11_output_addr_vec_elt): New. * config/pdp11/pdp11.c: Use tab between opcode and operands. Use %# and %@ format codes. (pdp11_option_override): New. (TARGET_ASM_FILE_START_FILE_DIRECTIVE): Define. (pdp11_output_ident): New. (pdp11_asm_named_section): New. (pdp11_asm_init_sections): New. (pdp11_file_start): New. (pdp11_file_end): New. (output_ascii): Use .ascii/.asciz for -mdec-asm. (pdp11_asm_print_operand): Update %# and %$ for -mdec-asm. Add %o, like %c but octal. (pdp11_option_override): New. * config/pdp11/pdp11.h (TEXT_SECTION_ASM_OP): Update for -mdec-asm. (DATA_SECTION_ASM_OP): Ditto. (READONLY_DATA_SECTION_ASM_OP): New. (IS_ASM_LOGICAL_LINE_SEPARATOR): New. (ASM_GENERATE_INTERNAL_LABEL): Use new function. (ASM_OUTPUT_LABELREF): Ditto. (ASM_OUTPUT_DEF): Ditto. (ASM_OUTPUT_EXTERNAL): New. (ASM_OUTPUT_SOURCE_FILENAME): New. (ASM_OUTPUT_ADDR_VEC_ELT): Use new function. (ASM_OUTPUT_SKIP): Update for -mdec-asm. * config/pdp11/pdp11.md: Use tab between opcode and operands. Use %# and %@ format codes. * config/pdp11/pdp11.opt (mgnu-asm): New. (mdec-asm): Conflicts with -mgnu-asm and -munix-asm. (munix-asm): Conflicts with -mdec-asm and -mgnu-asm. * doc/invoke.txt (PDP-11 Options): Add -mgnu-asm. From-SVN: r262289
Paul Koning committed -
2018-07-01 Tom de Vries <tdevries@suse.de> * lib/gcc-gdb-test.exp (gdb-test): Handle '@' prefix in line number argument. * gcc.dg/guality/const-volatile.c: Replace gdb-test line nrs 50 and 58 with @main. From-SVN: r262288
Tom de Vries committed -
2018-07-01 Tom de Vries <tdevries@suse.de> * gcc.dg/guality/prevent-optimization.h (VOLATILE): Define. * gcc.dg/guality/vla-1.c (f1): Mark local vla a as VOLATILE. From-SVN: r262287
Tom de Vries committed -
2018-07-01 Tom de Vries <tdevries@suse.de> * lib/gcc-dg.exp (get-absolute-line): Handle '.'. * gcc.dg/guality/vla-1.c: Use relative line numbers. From-SVN: r262286
Tom de Vries committed -
2018-07-01 Tom de Vries <tdevries@suse.de> * gcc.dg-selftests/dg-final.exp (verify_call_1): Factor out of ... (verify_call): ... here. Move to toplevel. (verify_call_np, dg_final_directive_check_utils): New proc. (toplevel): Call dg_final_directive_check_utils. * lib/gcc-dg.exp (get-absolute-line): Fix typo in variable reference. From-SVN: r262284
Tom de Vries committed -
From-SVN: r262283
Aldy Hernandez committed -
From-SVN: r262282
GCC Administrator committed
-
- 30 Jun, 2018 2 commits
-
-
gcc/ * config/riscv/predicates.md (p2m1_shift_operand): New. (high_mask_shift_operand): New. * config/riscv/riscv.md (lshrsi3_zero_extend_3+1): New combiner pattern using p2m1_shift_operand. (lshsi3_zero_extend_3+2): New combiner pattern using high_mask_shift_operand. gcc/testsuite/ * gcc.target/riscv/shift-shift-1.c: New. * gcc.target/riscv/shift-shift-2.c: New. * gcc.target/riscv/shift-shift-3.c: New. From-SVN: r262278
Jim Wilson committed -
vect_recog_rotate_pattern had code to prevent operations on invariants being vectorised unnecessarily: if (dt == vect_external_def && TREE_CODE (oprnd1) == SSA_NAME && is_a <loop_vec_info> (vinfo)) { struct loop *loop = as_a <loop_vec_info> (vinfo)->loop; ext_def = loop_preheader_edge (loop); if (!SSA_NAME_IS_DEFAULT_DEF (oprnd1)) { basic_block bb = gimple_bb (SSA_NAME_DEF_STMT (oprnd1)); if (bb == NULL || !dominated_by_p (CDI_DOMINATORS, ext_def->dest, bb)) ext_def = NULL; } } [..] if (ext_def) { basic_block new_bb = gsi_insert_on_edge_immediate (ext_def, def_stmt); gcc_assert (!new_bb); } This patch reuses the same idea for casts of invariants created during widening optimisations. One hitch was that vect_loop_versioning asserted that the vector loop preheader was still empty, although the cfg transformation it's doing should be correct either way. 2018-06-30 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-patterns.c (vect_get_external_def_edge): New function, split out from... (vect_recog_rotate_pattern): ...here. (vect_convert_input): Try to insert casts of invariants in the preheader. * tree-vect-loop-manip.c (vect_loop_versioning): Don't require the preheader to be empty. gcc/testsuite/ * gcc.dg/vect/vect-widen-mult-extern-1.c: New test. From-SVN: r262277
Richard Sandiford committed
-