Hi, I am seeing an internal compiler error, related to this patch: during GIMPLE pass: slp options-save.cc: In function 'void cl_optimization_restore(gcc_options*, gcc_options*, cl_optimization*)': options-save.cc:1292:1: internal compiler error: in supportable_widening_operation, at tree-vect-stmts.cc:12199 1292 | cl_optimization_restore (struct gcc_options *opts, struct gcc_options *opts_set, | ^~~~~~~~~~~~~~~~~~~~~~~ /…/src/gcc/gcc/profile-count.cc: In member function 'int profile_count::to_cgraph_frequency(profile_count) const': /…/src/gcc/gcc/profile-count.cc:308:1: note: parameter passing for argument of type 'profile_count' changed in GCC 9.1 308 | profile_count::to_cgraph_frequency (profile_count entry_bb_count) const | ^~~~~~~~~~~~~ /…/src/gcc/gcc/profile-count.cc: In member function 'sreal profile_count::to_sreal_scale(profile_count, bool*) const': /…/src/gcc/gcc/profile-count.cc:326:1: note: parameter passing for argument of type 'profile_count' changed in GCC 9.1 326 | profile_count::to_sreal_scale (profile_count in, bool *known) const | ^~~~~~~~~~~~~ 0x2195bdd supportable_widening_operation(vec_info*, tree_code, _stmt_vec_info*, tree_node*, tree_node*, tree_code*, tree_code*, int*, vec*) /…/src/gcc/gcc/tree-vect-stmts.cc:12199 0x2180493 vectorizable_conversion /…/src/gcc/gcc/tree-vect-stmts.cc:5064 0x2192fdd vect_analyze_stmt(vec_info*, _stmt_vec_info*, bool*, _slp_tree*, _slp_instance*, vec*) /…/src/gcc/gcc/tree-vect-stmts.cc:11256 /…/src/gcc/gcc/profile-count.cc: In member function 'profile_count profile_count::combine_with_ipa_count(profile_count)': /…/src/gcc/gcc/profile-count.cc:398:1: note: parameter passing for argument of type 'profile_count' changed in GCC 9.1 398 | profile_count::combine_with_ipa_count (profile_count ipa) | ^~~~~~~~~~~~~ 0x14f95d1 vect_slp_analyze_node_operations_1 /…/src/gcc/gcc/tree-vect-slp.cc:5958 0x14f9c19 vect_slp_analyze_node_operations /…/src/gcc/gcc/tree-vect-slp.cc:6147 0x14f9b4d vect_slp_analyze_node_operations /…/src/gcc/gcc/tree-vect-slp.cc:6126 0x14fa439 vect_slp_analyze_operations(vec_info*) /…/src/gcc/gcc/tree-vect-slp.cc:6387 0x14fd423 vect_slp_analyze_bb_1 /…/src/gcc/gcc/tree-vect-slp.cc:7372 0x14fd599 vect_slp_region /…/src/gcc/gcc/tree-vect-slp.cc:7419 0x14fe0d1 vect_slp_bbs /…/src/gcc/gcc/tree-vect-slp.cc:7610 0x14fe46f vect_slp_function(function*) /…/src/gcc/gcc/tree-vect-slp.cc:7698 0x151a109 execute /…/src/gcc/gcc/tree-vectorizer.cc:1532 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See for instructions. Makefile:1146: recipe for target 'options-save.o' failed make[3]: *** [options-save.o] Error 1 That happens when building the arm-none-linux-gnueabihf toolchain natively with glibc bootstrap: Build:arm-none-linux-gnueabihf Host:arm-none-linux-gnueabihf Target: arm-none-linux-gnueabihf The compiler being used to build the toolchain is gcc 7.5.0. Kind regards Vasee ________________________________ From: Gcc-patches on behalf of Richard Biener via Gcc-patches Sent: 22 November 2022 08:48 To: gcc-patches@gcc.gnu.org Subject: [PATCH] tree-optimization/107672 - avoid vector mode type_for_mode call The following avoids using type_for_mode on vector modes which might not work for all frontends. Instead we look for the inner mode type and use build_vector_type_for_mode instead. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. PR tree-optimization/107672 * tree-vect-stmts.cc (supportable_widening_operation): Avoid type_for_mode on vector modes. --- gcc/tree-vect-stmts.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index bc0ef136f19..b35b986889d 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -12195,9 +12195,15 @@ supportable_widening_operation (vec_info *vinfo, intermediate_type = vect_halve_mask_nunits (prev_type, intermediate_mode); else - intermediate_type - = lang_hooks.types.type_for_mode (intermediate_mode, - TYPE_UNSIGNED (prev_type)); + { + gcc_assert (VECTOR_MODE_P (intermediate_mode)); + tree intermediate_element_type + = lang_hooks.types.type_for_mode (GET_MODE_INNER (intermediate_mode), + TYPE_UNSIGNED (prev_type)); + intermediate_type + = build_vector_type_for_mode (intermediate_element_type, + intermediate_mode); + } if (VECTOR_BOOLEAN_TYPE_P (intermediate_type) && VECTOR_BOOLEAN_TYPE_P (prev_type) -- 2.35.3