]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
17 months agogccrs: Add Lexer for Rust front-end
Joel Phillips [Tue, 23 Aug 2022 15:11:00 +0000 (16:11 +0100)] 
gccrs: Add Lexer for Rust front-end

The lexer is referred to as a ManagedTokenSource within the parser. This
lexer does not currently support Unicode, but serves as a starting point
to do so.

gcc/rust/
* lex/rust-codepoint.h: New.
* lex/rust-lex.cc: New.
* lex/rust-lex.h: New.
* lex/rust-token.cc: New.
* lex/rust-token.h: New.
* rust-buffered-queue.h: New.

Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
Co-authored-by: Mark Wielaard <mark@klomp.org>
Signed-off-by: Joel Phillips <simplytheother@gmail.com>
17 months agogccrs: Add Rust AST visitors
Joel Phillips [Fri, 21 Oct 2022 11:35:58 +0000 (13:35 +0200)] 
gccrs: Add Rust AST visitors

This patch contains the basic framework of our AST visitors, as well as
one aimed at pretty-printing and exporting these AST nodes.

gcc/rust/
* ast/rust-ast-dump.cc: New.
* ast/rust-ast-dump.h: New.
* ast/rust-ast-visitor.h: New.
* ast/rust-cond-compilation.h: New.

Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
Signed-off-by: Joel Phillips <simplytheother@gmail.com>
17 months agogccrs: Add full definitions of Rust AST data structures
Joel Phillips [Fri, 21 Oct 2022 12:35:54 +0000 (14:35 +0200)] 
gccrs: Add full definitions of Rust AST data structures

This adds the proper definitions of our AST nodes split across multiple
files for clarity

gcc/rust/
* ast/rust-expr.h: New.
* ast/rust-macro.h: New.
* ast/rust-path.h: New.
* ast/rust-pattern.h: New.
* ast/rust-stmt.h: New.
* ast/rust-type.h: New.

Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Signed-off-by: Joel Phillips <simplytheother@gmail.com>
17 months agogccrs: Add definitions of Rust Items in AST data structures
Joel Phillips [Fri, 21 Oct 2022 12:35:09 +0000 (14:35 +0200)] 
gccrs: Add definitions of Rust Items in AST data structures

This adds the proper definitions of our AST Item nodes.

gcc/rust/
* ast/rust-item.h: New.

Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Signed-off-by: Joel Phillips <simplytheother@gmail.com>
17 months agogccrs: Add Rust front-end base AST data structures
Joel Phillips [Fri, 21 Oct 2022 11:34:11 +0000 (13:34 +0200)] 
gccrs: Add Rust front-end base AST data structures

This is a full C++11 class hierarchy representing the Rust AST. We do not
allow dynamic_cast and so the main mechanism to work with the AST is by
using the visitor interface. Slowly we are adding TREE_CODE style node
types to the AST which will allow for more ways to work with the AST but
for now this is it.

See: https://doc.rust-lang.org/reference/items.html

gcc/rust/
* ast/rust-ast-full-decls.h: New.
* ast/rust-ast-full-test.cc: New.
* ast/rust-ast-full.h: New.
* ast/rust-ast.h: New.
* operator.h: New.

Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
Signed-off-by: Joel Phillips <simplytheother@gmail.com>
17 months agogccrs: Add gcc-check-target check-rust
Philip Herron [Tue, 23 Aug 2022 15:04:30 +0000 (16:04 +0100)] 
gccrs: Add gcc-check-target check-rust

This allows us to invoke the rust testsuite.

* Makefile.def: Add Rust language.
* Makefile.in: Regenerate via autogen.

17 months agogccrs: Add execution test cases
Philip Herron [Tue, 23 Aug 2022 15:02:25 +0000 (16:02 +0100)] 
gccrs: Add execution test cases

This is similar to the compile/torture/*.rs test cases, but all of these are
dg-execute testcases. They are compiled, linked and executed by default. These
testcases are also compiled with the matrix of torture options.

The only caveat here is that gccrs does not currently support the main shim,
so we have a C-style main function here returning zero which is not proper Rust
code.

gcc/testsuite/
* rust/execute/torture/block_expr1.rs: New.
* rust/execute/torture/builtin_macro_cfg.rs: New.
* rust/execute/torture/builtin_macro_concat.rs: New.
* rust/execute/torture/builtin_macro_env.rs: New.
* rust/execute/torture/builtin_macro_include_bytes.rs: New.
* rust/execute/torture/builtin_macro_include_str.rs: New.
* rust/execute/torture/builtin_macro_line.rs: New.
* rust/execute/torture/builtin_macros1.rs: New.
* rust/execute/torture/builtin_macros3.rs: New.
* rust/execute/torture/cfg1.rs: New.
* rust/execute/torture/cfg2.rs: New.
* rust/execute/torture/cfg3.rs: New.
* rust/execute/torture/cfg4.rs: New.
* rust/execute/torture/cfg5.rs: New.
* rust/execute/torture/coercion1.rs: New.
* rust/execute/torture/coercion2.rs: New.
* rust/execute/torture/const_fold1.rs: New.
* rust/execute/torture/const_fold2.rs: New.
* rust/execute/torture/copy_nonoverlapping1.rs: New.
* rust/execute/torture/empty_main.rs: New.
* rust/execute/torture/execute.exp: New.
* rust/execute/torture/exit_error.rs: New.
* rust/execute/torture/extern_mod4.rs: New.
* rust/execute/torture/func1.rs: New.
* rust/execute/torture/helloworld1.rs: New.
* rust/execute/torture/helloworld2.rs: New.
* rust/execute/torture/include.txt: New.
* rust/execute/torture/index1.rs: New.
* rust/execute/torture/issue-1120.rs: New.
* rust/execute/torture/issue-1133.rs: New.
* rust/execute/torture/issue-1198.rs: New.
* rust/execute/torture/issue-1231.rs: New.
* rust/execute/torture/issue-1232.rs: New.
* rust/execute/torture/issue-1249.rs: New.
* rust/execute/torture/issue-1436.rs: New.
* rust/execute/torture/issue-1496.rs: New.
* rust/execute/torture/issue-647.rs: New.
* rust/execute/torture/issue-845.rs: New.
* rust/execute/torture/issue-851.rs: New.
* rust/execute/torture/issue-858.rs: New.
* rust/execute/torture/issue-976.rs: New.
* rust/execute/torture/issue-995.rs: New.
* rust/execute/torture/macros1.rs: New.
* rust/execute/torture/macros10.rs: New.
* rust/execute/torture/macros11.rs: New.
* rust/execute/torture/macros12.rs: New.
* rust/execute/torture/macros13.rs: New.
* rust/execute/torture/macros14.rs: New.
* rust/execute/torture/macros16.rs: New.
* rust/execute/torture/macros17.rs: New.
* rust/execute/torture/macros18.rs: New.
* rust/execute/torture/macros19.rs: New.
* rust/execute/torture/macros2.rs: New.
* rust/execute/torture/macros20.rs: New.
* rust/execute/torture/macros21.rs: New.
* rust/execute/torture/macros22.rs: New.
* rust/execute/torture/macros23.rs: New.
* rust/execute/torture/macros24.rs: New.
* rust/execute/torture/macros25.rs: New.
* rust/execute/torture/macros26.rs: New.
* rust/execute/torture/macros27.rs: New.
* rust/execute/torture/macros28.rs: New.
* rust/execute/torture/macros29.rs: New.
* rust/execute/torture/macros3.rs: New.
* rust/execute/torture/macros30.rs: New.
* rust/execute/torture/macros31.rs: New.
* rust/execute/torture/macros4.rs: New.
* rust/execute/torture/macros5.rs: New.
* rust/execute/torture/macros6.rs: New.
* rust/execute/torture/macros7.rs: New.
* rust/execute/torture/macros8.rs: New.
* rust/execute/torture/macros9.rs: New.
* rust/execute/torture/match1.rs: New.
* rust/execute/torture/match2.rs: New.
* rust/execute/torture/match3.rs: New.
* rust/execute/torture/match_bool1.rs: New.
* rust/execute/torture/match_byte1.rs: New.
* rust/execute/torture/match_char1.rs: New.
* rust/execute/torture/match_int1.rs: New.
* rust/execute/torture/match_loop1.rs: New.
* rust/execute/torture/match_range1.rs: New.
* rust/execute/torture/match_range2.rs: New.
* rust/execute/torture/match_tuple1.rs: New.
* rust/execute/torture/method1.rs: New.
* rust/execute/torture/method2.rs: New.
* rust/execute/torture/method3.rs: New.
* rust/execute/torture/method4.rs: New.
* rust/execute/torture/mod1.rs: New.
* rust/execute/torture/modules/mod.rs: New.
* rust/execute/torture/operator_overload_1.rs: New.
* rust/execute/torture/operator_overload_10.rs: New.
* rust/execute/torture/operator_overload_11.rs: New.
* rust/execute/torture/operator_overload_12.rs: New.
* rust/execute/torture/operator_overload_2.rs: New.
* rust/execute/torture/operator_overload_3.rs: New.
* rust/execute/torture/operator_overload_4.rs: New.
* rust/execute/torture/operator_overload_5.rs: New.
* rust/execute/torture/operator_overload_6.rs: New.
* rust/execute/torture/operator_overload_7.rs: New.
* rust/execute/torture/operator_overload_8.rs: New.
* rust/execute/torture/operator_overload_9.rs: New.
* rust/execute/torture/slice-magic.rs: New.
* rust/execute/torture/slice-magic2.rs: New.
* rust/execute/torture/slice1.rs: New.
* rust/execute/torture/str-layout1.rs: New.
* rust/execute/torture/str-zero.rs: New.
* rust/execute/torture/trait1.rs: New.
* rust/execute/torture/trait10.rs: New.
* rust/execute/torture/trait11.rs: New.
* rust/execute/torture/trait12.rs: New.
* rust/execute/torture/trait13.rs: New.
* rust/execute/torture/trait2.rs: New.
* rust/execute/torture/trait3.rs: New.
* rust/execute/torture/trait4.rs: New.
* rust/execute/torture/trait5.rs: New.
* rust/execute/torture/trait6.rs: New.
* rust/execute/torture/trait7.rs: New.
* rust/execute/torture/trait8.rs: New.
* rust/execute/torture/trait9.rs: New.
* rust/execute/torture/transmute1.rs: New.
* rust/execute/torture/wrapping_op1.rs: New.
* rust/execute/torture/wrapping_op2.rs: New.
* rust/execute/xfail/macro1.rs: New.

Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>
Co-authored-by: Mark Wielaard <mark@klomp.org>
Co-authored-by: Marc Poulhiès <dkm@kataplop.net>
17 months agogccrs: Add general compilation test cases
Philip Herron [Tue, 23 Aug 2022 15:01:16 +0000 (16:01 +0100)] 
gccrs: Add general compilation test cases

This suite of tests has two sections: compile/*.rs and compile/torture/*.rs.
The first section is comprised entirely of dg-compile tests, containing a
mixture of dg-warning and dg-error annotations and some with no annotations,
ensuring the creation of resulting asm output. The second section is the same,
but has tests which are ran with the full torture options, for coverage of test
cases that may have an issue with a specific optimization level.

gcc/testsuite/
* rust/compile/abi-options1.rs: New.
* rust/compile/array3.rs: New.
* rust/compile/array_empty_list.rs: New.
* rust/compile/arrays1.rs: New.
* rust/compile/arrays2.rs: New.
* rust/compile/attr-mismatch-crate-name.rs: New.
* rust/compile/attr_cold.rs: New.
* rust/compile/attr_deprecated.rs: New.
* rust/compile/attr_deprecated_2.rs: New.
* rust/compile/bad-crate-name.rs: New.
* rust/compile/bad=file-name.rs: New.
* rust/compile/bad_as_bool_char.rs: New.
* rust/compile/bad_file_name.txt.rs: New.
* rust/compile/bad_inner_doc.rs: New.
* rust/compile/bad_pub_enumitems.rs: New.
* rust/compile/bad_stmt_enums.rs: New.
* rust/compile/bad_toplevel_enums.rs: New.
* rust/compile/bad_tuple_index.rs: New.
* rust/compile/bad_type1.rs: New.
* rust/compile/bad_type2.rs: New.
* rust/compile/break1.rs: New.
* rust/compile/break2.rs: New.
* rust/compile/builtin_macro_compile_error.rs: New.
* rust/compile/builtin_macro_concat.rs: New.
* rust/compile/builtin_macro_env.rs: New.
* rust/compile/builtin_macro_include_bytes.rs: New.
* rust/compile/builtin_macro_include_str.rs: New.
* rust/compile/builtin_macro_not_found.rs: New.
* rust/compile/bytecharstring.rs: New.
* rust/compile/canonical_paths1.rs: New.
* rust/compile/cast1.rs: New.
* rust/compile/cfg1.rs: New.
* rust/compile/cfg2.rs: New.
* rust/compile/cfg3.rs: New.
* rust/compile/cfg4.rs: New.
* rust/compile/cfg5.rs: New.
* rust/compile/compile.exp: New.
* rust/compile/complex-path1.rs: New.
* rust/compile/const-issue1440.rs: New.
* rust/compile/const1.rs: New.
* rust/compile/const2.rs: New.
* rust/compile/const3.rs: New.
* rust/compile/const_generics_1.rs: New.
* rust/compile/const_generics_2.rs: New.
* rust/compile/const_generics_3.rs: New.
* rust/compile/const_generics_4.rs: New.
* rust/compile/const_generics_5.rs: New.
* rust/compile/const_generics_6.rs: New.
* rust/compile/continue1.rs: New.
* rust/compile/deadcode_err1.rs: New.
* rust/compile/deadcode_err2.rs: New.
* rust/compile/debug-diagnostics-default.rs: New.
* rust/compile/debug-diagnostics-off.rs: New.
* rust/compile/debug-diagnostics-on.rs: New.
* rust/compile/doc_isolated_cr_block_comment.rs: New.
* rust/compile/doc_isolated_cr_inner_block_comment.rs: New.
* rust/compile/doc_isolated_cr_inner_line_comment.rs: New.
* rust/compile/doc_isolated_cr_line_comment.rs: New.
* rust/compile/dup_fields.rs: New.
* rust/compile/empty_comment_before_match.rs: New.
* rust/compile/expected_type_args2.rs: New.
* rust/compile/expected_type_args3.rs: New.
* rust/compile/func1.rs: New.
* rust/compile/func2.rs: New.
* rust/compile/func3.rs: New.
* rust/compile/func4.rs: New.
* rust/compile/func5.rs: New.
* rust/compile/generic-default1.rs: New.
* rust/compile/generics1.rs: New.
* rust/compile/generics10.rs: New.
* rust/compile/generics11.rs: New.
* rust/compile/generics12.rs: New.
* rust/compile/generics13.rs: New.
* rust/compile/generics2.rs: New.
* rust/compile/generics3.rs: New.
* rust/compile/generics4.rs: New.
* rust/compile/generics5.rs: New.
* rust/compile/generics6.rs: New.
* rust/compile/generics7.rs: New.
* rust/compile/generics8.rs: New.
* rust/compile/generics9.rs: New.
* rust/compile/implicit_returns_err1.rs: New.
* rust/compile/implicit_returns_err2.rs: New.
* rust/compile/implicit_returns_err3.rs: New.
* rust/compile/implicit_returns_err4.rs: New.
* rust/compile/infer-crate-name.rs: New.
* rust/compile/inline_1.rs: New.
* rust/compile/inline_2.rs: New.
* rust/compile/issue-1005.rs: New.
* rust/compile/issue-1019.rs: New.
* rust/compile/issue-1023.rs: New.
* rust/compile/issue-1031.rs: New.
* rust/compile/issue-1034.rs: New.
* rust/compile/issue-1089.rs: New.
* rust/compile/issue-1128.rs: New.
* rust/compile/issue-1129-1.rs: New.
* rust/compile/issue-1129-2.rs: New.
* rust/compile/issue-1130.rs: New.
* rust/compile/issue-1131.rs: New.
* rust/compile/issue-1152.rs: New.
* rust/compile/issue-1165.rs: New.
* rust/compile/issue-1173.rs: New.
* rust/compile/issue-1226.rs: New.
* rust/compile/issue-1234.rs: New.
* rust/compile/issue-1235.rs: New.
* rust/compile/issue-1237.rs: New.
* rust/compile/issue-1251.rs: New.
* rust/compile/issue-1271.rs: New.
* rust/compile/issue-1289.rs: New.
* rust/compile/issue-1323-1.rs: New.
* rust/compile/issue-1323-2.rs: New.
* rust/compile/issue-1383.rs: New.
* rust/compile/issue-1393.rs: New.
* rust/compile/issue-1447.rs: New.
* rust/compile/issue-407-2.rs: New.
* rust/compile/issue-407.rs: New.
* rust/compile/issue-557.rs: New.
* rust/compile/issue-635-1.rs: New.
* rust/compile/issue-635-2.rs: New.
* rust/compile/lookup_err1.rs: New.
* rust/compile/macro-issue1053-2.rs: New.
* rust/compile/macro-issue1053.rs: New.
* rust/compile/macro-issue1224.rs: New.
* rust/compile/macro-issue1233.rs: New.
* rust/compile/macro-issue1395-2.rs: New.
* rust/compile/macro-issue1395.rs: New.
* rust/compile/macro-issue1400-2.rs: New.
* rust/compile/macro-issue1400.rs: New.
* rust/compile/macro1.rs: New.
* rust/compile/macro10.rs: New.
* rust/compile/macro11.rs: New.
* rust/compile/macro12.rs: New.
* rust/compile/macro13.rs: New.
* rust/compile/macro14.rs: New.
* rust/compile/macro15.rs: New.
* rust/compile/macro16.rs: New.
* rust/compile/macro17.rs: New.
* rust/compile/macro18.rs: New.
* rust/compile/macro19.rs: New.
* rust/compile/macro2.rs: New.
* rust/compile/macro20.rs: New.
* rust/compile/macro21.rs: New.
* rust/compile/macro22.rs: New.
* rust/compile/macro23.rs: New.
* rust/compile/macro25.rs: New.
* rust/compile/macro26.rs: New.
* rust/compile/macro27.rs: New.
* rust/compile/macro28.rs: New.
* rust/compile/macro29.rs: New.
* rust/compile/macro3.rs: New.
* rust/compile/macro30.rs: New.
* rust/compile/macro31.rs: New.
* rust/compile/macro32.rs: New.
* rust/compile/macro33.rs: New.
* rust/compile/macro34.rs: New.
* rust/compile/macro35.rs: New.
* rust/compile/macro36.rs: New.
* rust/compile/macro37.rs: New.
* rust/compile/macro38.rs: New.
* rust/compile/macro39.rs: New.
* rust/compile/macro4.rs: New.
* rust/compile/macro40.rs: New.
* rust/compile/macro41.rs: New.
* rust/compile/macro42.rs: New.
* rust/compile/macro5.rs: New.
* rust/compile/macro6.rs: New.
* rust/compile/macro7.rs: New.
* rust/compile/macro8.rs: New.
* rust/compile/macro9.rs: New.
* rust/compile/macro_return.rs: New.
* rust/compile/match1.rs: New.
* rust/compile/match2.rs: New.
* rust/compile/match3.rs: New.
* rust/compile/match4.rs: New.
* rust/compile/match5.rs: New.
* rust/compile/match6.rs: New.
* rust/compile/match7.rs: New.
* rust/compile/method1.rs: New.
* rust/compile/method2.rs: New.
* rust/compile/mismatch-crate-name.rs: New.
* rust/compile/missing_middle/both_path.rs: New.
* rust/compile/missing_middle/explicit.not.rs: New.
* rust/compile/missing_middle/inner_path.rs: New.
* rust/compile/missing_middle/other.rs: New.
* rust/compile/missing_middle/outer_path.rs: New.
* rust/compile/missing_middle/sub/mod.rs: New.
* rust/compile/missing_return1.rs: New.
* rust/compile/mod_missing_middle.rs: New.
* rust/compile/never_type_err1.rs: New.
* rust/compile/privacy1.rs: New.
* rust/compile/privacy2.rs: New.
* rust/compile/privacy3.rs: New.
* rust/compile/privacy4.rs: New.
* rust/compile/privacy5.rs: New.
* rust/compile/privacy6.rs: New.
* rust/compile/pub_restricted_1.rs: New.
* rust/compile/pub_restricted_2.rs: New.
* rust/compile/pub_restricted_3.rs: New.
* rust/compile/raw_identifiers_bad_keywords.rs: New.
* rust/compile/raw_identifiers_underscore.rs: New.
* rust/compile/redef_error1.rs: New.
* rust/compile/redef_error2.rs: New.
* rust/compile/redef_error3.rs: New.
* rust/compile/redef_error4.rs: New.
* rust/compile/redef_error5.rs: New.
* rust/compile/redef_error6.rs: New.
* rust/compile/reference1.rs: New.
* rust/compile/self-path1.rs: New.
* rust/compile/self-path2.rs: New.
* rust/compile/shadow1.rs: New.
* rust/compile/specify-crate-name.rs: New.
* rust/compile/static_var1.rs: New.
* rust/compile/stmt_with_block_err1.rs: New.
* rust/compile/struct_align1.rs: New.
* rust/compile/struct_align2.rs: New.
* rust/compile/struct_init1.rs: New.
* rust/compile/struct_pack1.rs: New.
* rust/compile/struct_pack2.rs: New.
* rust/compile/syntax-only.rs: New.
* rust/compile/test_mod.rs: New.
* rust/compile/torture/all_doc_comment_line_blocks.rs: New.
* rust/compile/torture/all_doc_comment_line_blocks_crlf.rs: New.
* rust/compile/torture/arithmetic_expressions1.rs: New.
* rust/compile/torture/array_const_fold_1.rs: New.
* rust/compile/torture/array_const_fold_2.rs: New.
* rust/compile/torture/array_function.rs: New.
* rust/compile/torture/array_type_infer.rs: New.
* rust/compile/torture/array_zero_length.rs: New.
* rust/compile/torture/arrays1.rs: New.
* rust/compile/torture/arrays2.rs: New.
* rust/compile/torture/arrays3.rs: New.
* rust/compile/torture/arrays4.rs: New.
* rust/compile/torture/arrays5.rs: New.
* rust/compile/torture/arrays6.rs: New.
* rust/compile/torture/arrays_index1.rs: New.
* rust/compile/torture/arrays_index2.rs: New.
* rust/compile/torture/arrays_index3.rs: New.
* rust/compile/torture/as_bool_char.rs: New.
* rust/compile/torture/associated_types1.rs: New.
* rust/compile/torture/autoderef1.rs: New.
* rust/compile/torture/block_expr1.rs: New.
* rust/compile/torture/block_expr2.rs: New.
* rust/compile/torture/block_expr3.rs: New.
* rust/compile/torture/block_expr4.rs: New.
* rust/compile/torture/block_expr5.rs: New.
* rust/compile/torture/block_expr_parser_bug.rs: New.
* rust/compile/torture/bom.rs: New.
* rust/compile/torture/bom_comment.rs: New.
* rust/compile/torture/bom_shebang.rs: New.
* rust/compile/torture/bom_whitespace.rs: New.
* rust/compile/torture/bools_eq.rs: New.
* rust/compile/torture/borrow1.rs: New.
* rust/compile/torture/borrow_function.rs: New.
* rust/compile/torture/break_function.rs: New.
* rust/compile/torture/byte_char_str.rs: New.
* rust/compile/torture/byte_str.rs: New.
* rust/compile/torture/cast1.rs: New.
* rust/compile/torture/cast2.rs: New.
* rust/compile/torture/cast3.rs: New.
* rust/compile/torture/cfg_attr.rs: New.
* rust/compile/torture/char1.rs: New.
* rust/compile/torture/check-doc-attr-string.rs: New.
* rust/compile/torture/coercion1.rs: New.
* rust/compile/torture/coercion2.rs: New.
* rust/compile/torture/comparison_expr1.rs: New.
* rust/compile/torture/compile.exp: New.
* rust/compile/torture/compound_assignment_expr1.rs: New.
* rust/compile/torture/conditional.rs: New.
* rust/compile/torture/constant1.rs: New.
* rust/compile/torture/constant2.rs: New.
* rust/compile/torture/constant3.rs: New.
* rust/compile/torture/deadcode1.rs: New.
* rust/compile/torture/deadcode2.rs: New.
* rust/compile/torture/deref1.rs: New.
* rust/compile/torture/deref_function.rs: New.
* rust/compile/torture/doc_comment.rs: New.
* rust/compile/torture/enum1.rs: New.
* rust/compile/torture/extern_mod1.rs: New.
* rust/compile/torture/extern_mod2.rs: New.
* rust/compile/torture/float1.rs: New.
* rust/compile/torture/float_types.rs: New.
* rust/compile/torture/forward_decl_1.rs: New.
* rust/compile/torture/forward_decl_2.rs: New.
* rust/compile/torture/forward_decl_3-unsafe.rs: New.
* rust/compile/torture/forward_decl_3.rs: New.
* rust/compile/torture/forward_decl_4.rs: New.
* rust/compile/torture/forward_decl_5.rs: New.
* rust/compile/torture/func1.rs: New.
* rust/compile/torture/func2.rs: New.
* rust/compile/torture/function_reference1.rs: New.
* rust/compile/torture/function_reference2.rs: New.
* rust/compile/torture/function_reference3.rs: New.
* rust/compile/torture/function_reference4.rs: New.
* rust/compile/torture/generics1.rs: New.
* rust/compile/torture/generics10.rs: New.
* rust/compile/torture/generics11.rs: New.
* rust/compile/torture/generics12.rs: New.
* rust/compile/torture/generics13.rs: New.
* rust/compile/torture/generics14.rs: New.
* rust/compile/torture/generics15.rs: New.
* rust/compile/torture/generics16.rs: New.
* rust/compile/torture/generics17.rs: New.
* rust/compile/torture/generics18.rs: New.
* rust/compile/torture/generics19.rs: New.
* rust/compile/torture/generics2.rs: New.
* rust/compile/torture/generics20.rs: New.
* rust/compile/torture/generics21.rs: New.
* rust/compile/torture/generics22.rs: New.
* rust/compile/torture/generics23.rs: New.
* rust/compile/torture/generics24.rs: New.
* rust/compile/torture/generics25.rs: New.
* rust/compile/torture/generics26.rs: New.
* rust/compile/torture/generics27.rs: New.
* rust/compile/torture/generics28.rs: New.
* rust/compile/torture/generics29.rs: New.
* rust/compile/torture/generics3.rs: New.
* rust/compile/torture/generics30.rs: New.
* rust/compile/torture/generics31.rs: New.
* rust/compile/torture/generics32.rs: New.
* rust/compile/torture/generics4.rs: New.
* rust/compile/torture/generics5.rs: New.
* rust/compile/torture/generics6.rs: New.
* rust/compile/torture/generics7.rs: New.
* rust/compile/torture/generics8.rs: New.
* rust/compile/torture/generics9.rs: New.
* rust/compile/torture/grouped_expr_function.rs: New.
* rust/compile/torture/identifier-missing-impl-1.rs: New.
* rust/compile/torture/if.rs: New.
* rust/compile/torture/if_elif.rs: New.
* rust/compile/torture/if_elif_else_expr1.rs: New.
* rust/compile/torture/if_else.rs: New.
* rust/compile/torture/ifunaryexpr.rs: New.
* rust/compile/torture/impl_block1.rs: New.
* rust/compile/torture/impl_block2.rs: New.
* rust/compile/torture/impl_block3.rs: New.
* rust/compile/torture/impl_block_unused.rs: New.
* rust/compile/torture/implicit_returns1.rs: New.
* rust/compile/torture/infer_type1.rs: New.
* rust/compile/torture/inner_attributes.rs: New.
* rust/compile/torture/integer_inference_var1.rs: New.
* rust/compile/torture/integer_inference_var2.rs: New.
* rust/compile/torture/integer_inference_var3.rs: New.
* rust/compile/torture/integer_inference_var4.rs: New.
* rust/compile/torture/integer_inference_var5.rs: New.
* rust/compile/torture/integer_types.rs: New.
* rust/compile/torture/intrinsics-1.rs: New.
* rust/compile/torture/intrinsics-2.rs: New.
* rust/compile/torture/isolated_cr_block_comment.rs: New.
* rust/compile/torture/isolated_cr_line_comment.rs: New.
* rust/compile/torture/issue-1024.rs: New.
* rust/compile/torture/issue-1075.rs: New.
* rust/compile/torture/issue-1432.rs: New.
* rust/compile/torture/issue-1434.rs: New.
* rust/compile/torture/issue-368.rs: New.
* rust/compile/torture/issue-808.rs: New.
* rust/compile/torture/issue-862.rs: New.
* rust/compile/torture/issue-893-2.rs: New.
* rust/compile/torture/issue-893.rs: New.
* rust/compile/torture/lazybooleanexpr_function.rs: New.
* rust/compile/torture/lifetime1.rs: New.
* rust/compile/torture/literals1.rs: New.
* rust/compile/torture/loop1.rs: New.
* rust/compile/torture/loop2.rs: New.
* rust/compile/torture/loop3.rs: New.
* rust/compile/torture/loop4.rs: New.
* rust/compile/torture/loop5.rs: New.
* rust/compile/torture/loop6.rs: New.
* rust/compile/torture/loop7.rs: New.
* rust/compile/torture/macro-issue1403.rs: New.
* rust/compile/torture/macro-issue1426.rs: New.
* rust/compile/torture/macro_as_expr.rs: New.
* rust/compile/torture/match1.rs: New.
* rust/compile/torture/methods1.rs: New.
* rust/compile/torture/methods2.rs: New.
* rust/compile/torture/methods3.rs: New.
* rust/compile/torture/mod-nameresolve.rs: New.
* rust/compile/torture/mod1.rs: New.
* rust/compile/torture/mod2.rs: New.
* rust/compile/torture/mod3.rs: New.
* rust/compile/torture/modules/mod.rs: New.
* rust/compile/torture/modules/valid_path.rs: New.
* rust/compile/torture/must_use1.rs: New.
* rust/compile/torture/must_use2.rs: New.
* rust/compile/torture/name_resolve1.rs: New.
* rust/compile/torture/negation_function.rs: New.
* rust/compile/torture/nested_fn1.rs: New.
* rust/compile/torture/nested_fn2.rs: New.
* rust/compile/torture/nested_struct1.rs: New.
* rust/compile/torture/never_type1.rs: New.
* rust/compile/torture/not_shebang.rs: New.
* rust/compile/torture/not_shebang_block_comment.rs: New.
* rust/compile/torture/not_shebang_comment.rs: New.
* rust/compile/torture/not_shebang_multiline_comment.rs: New.
* rust/compile/torture/not_shebang_spaces.rs: New.
* rust/compile/torture/parameter_usage1.rs: New.
* rust/compile/torture/parens1.rs: New.
* rust/compile/torture/pointer1.rs: New.
* rust/compile/torture/primconsts.rs: New.
* rust/compile/torture/prims_struct_eq.rs: New.
* rust/compile/torture/range-lang-item1.rs: New.
* rust/compile/torture/raw_identifiers.rs: New.
* rust/compile/torture/raw_identifiers_keywords.rs: New.
* rust/compile/torture/recursive_fn1.rs: New.
* rust/compile/torture/return_function.rs: New.
* rust/compile/torture/scoping1.rs: New.
* rust/compile/torture/self_type1.rs: New.
* rust/compile/torture/shadow1.rs: New.
* rust/compile/torture/shadow2.rs: New.
* rust/compile/torture/shebang.rs: New.
* rust/compile/torture/shebang_plus_attr.rs: New.
* rust/compile/torture/shebang_plus_attr2.rs: New.
* rust/compile/torture/static_function.rs: New.
* rust/compile/torture/static_var1.rs: New.
* rust/compile/torture/stmt_with_block1.rs: New.
* rust/compile/torture/str1.rs: New.
* rust/compile/torture/struct_access1.rs: New.
* rust/compile/torture/struct_base_init_1.rs: New.
* rust/compile/torture/struct_decl.rs: New.
* rust/compile/torture/struct_init.rs: New.
* rust/compile/torture/struct_init_10.rs: New.
* rust/compile/torture/struct_init_11.rs: New.
* rust/compile/torture/struct_init_2.rs: New.
* rust/compile/torture/struct_init_3.rs: New.
* rust/compile/torture/struct_init_4.rs: New.
* rust/compile/torture/struct_init_5.rs: New.
* rust/compile/torture/struct_init_6.rs: New.
* rust/compile/torture/struct_init_7.rs: New.
* rust/compile/torture/struct_init_8.rs: New.
* rust/compile/torture/struct_init_9.rs: New.
* rust/compile/torture/top_attr.rs: New.
* rust/compile/torture/traits1.rs: New.
* rust/compile/torture/traits10.rs: New.
* rust/compile/torture/traits11.rs: New.
* rust/compile/torture/traits12.rs: New.
* rust/compile/torture/traits13.rs: New.
* rust/compile/torture/traits14.rs: New.
* rust/compile/torture/traits15.rs: New.
* rust/compile/torture/traits16.rs: New.
* rust/compile/torture/traits17.rs: New.
* rust/compile/torture/traits18.rs: New.
* rust/compile/torture/traits19.rs: New.
* rust/compile/torture/traits2.rs: New.
* rust/compile/torture/traits3.rs: New.
* rust/compile/torture/traits4.rs: New.
* rust/compile/torture/traits5.rs: New.
* rust/compile/torture/traits6.rs: New.
* rust/compile/torture/traits7.rs: New.
* rust/compile/torture/traits8.rs: New.
* rust/compile/torture/traits9.rs: New.
* rust/compile/torture/transmute-size-check-1.rs: New.
* rust/compile/torture/transmute1.rs: New.
* rust/compile/torture/tuple1.rs: New.
* rust/compile/torture/tuple2.rs: New.
* rust/compile/torture/tuple3.rs: New.
* rust/compile/torture/tuple_enum_variants.rs: New.
* rust/compile/torture/tuple_field_access.rs: New.
* rust/compile/torture/tuple_function.rs: New.
* rust/compile/torture/tuple_index.rs: New.
* rust/compile/torture/tuple_struct1.rs: New.
* rust/compile/torture/tuple_struct2.rs: New.
* rust/compile/torture/tuple_struct_unit.rs: New.
* rust/compile/torture/tuple_struct_unused.rs: New.
* rust/compile/torture/type-alias1.rs: New.
* rust/compile/torture/type-alias2.rs: New.
* rust/compile/torture/type_infer1.rs: New.
* rust/compile/torture/type_infer2.rs: New.
* rust/compile/torture/type_infer3.rs: New.
* rust/compile/torture/type_infer4.rs: New.
* rust/compile/torture/type_infer5.rs: New.
* rust/compile/torture/type_infer6.rs: New.
* rust/compile/torture/unary_operators.rs: New.
* rust/compile/torture/undended-string-1.rs: New.
* rust/compile/torture/undended-string-2.rs: New.
* rust/compile/torture/underscore_id.rs: New.
* rust/compile/torture/union.rs: New.
* rust/compile/torture/union_union.rs: New.
* rust/compile/torture/unit_type1.rs: New.
* rust/compile/torture/unit_type2.rs: New.
* rust/compile/torture/unit_type3.rs: New.
* rust/compile/torture/unit_type4.rs: New.
* rust/compile/torture/unit_type5.rs: New.
* rust/compile/torture/unsafe1.rs: New.
* rust/compile/torture/unsafe2.rs: New.
* rust/compile/torture/unsafe3.rs: New.
* rust/compile/torture/unsafe4.rs: New.
* rust/compile/torture/unused.rs: New.
* rust/compile/torture/unused1.rs: New.
* rust/compile/torture/unused_struct.rs: New.
* rust/compile/torture/unused_struct_field.rs: New.
* rust/compile/torture/usize1.rs: New.
* rust/compile/torture/very-broken-attr-string.rs: New.
* rust/compile/torture/while_function.rs: New.
* rust/compile/traits1.rs: New.
* rust/compile/traits10.rs: New.
* rust/compile/traits11.rs: New.
* rust/compile/traits12.rs: New.
* rust/compile/traits2.rs: New.
* rust/compile/traits3.rs: New.
* rust/compile/traits4.rs: New.
* rust/compile/traits5.rs: New.
* rust/compile/traits6.rs: New.
* rust/compile/traits7.rs: New.
* rust/compile/traits8.rs: New.
* rust/compile/traits9.rs: New.
* rust/compile/tuple1.rs: New.
* rust/compile/tuple_struct1.rs: New.
* rust/compile/tuple_struct2.rs: New.
* rust/compile/tuple_struct3.rs: New.
* rust/compile/type-alias1.rs: New.
* rust/compile/type-bindings1.rs: New.
* rust/compile/unary_negation.rs: New.
* rust/compile/unary_not.rs: New.
* rust/compile/unconstrained_type_param.rs: New.
* rust/compile/unicode_escape.rs: New.
* rust/compile/unsafe1.rs: New.
* rust/compile/unsafe10.rs: New.
* rust/compile/unsafe2.rs: New.
* rust/compile/unsafe3.rs: New.
* rust/compile/unsafe4.rs: New.
* rust/compile/unsafe5.rs: New.
* rust/compile/unsafe6.rs: New.
* rust/compile/unsafe7.rs: New.
* rust/compile/unsafe8.rs: New.
* rust/compile/unsafe9.rs: New.
* rust/compile/unterminated_c_comment.rs: New.
* rust/compile/use_1.rs: New.
* rust/compile/usize1.rs: New.
* rust/compile/xfail/lifetime_param.rs: New.
* rust/compile/xfail/struct_field_vis.rs: New.
* rust/compile/xfail/xfail.exp: New.

Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>
Co-authored-by: Mark Wielaard <mark@klomp.org>
Co-authored-by: Marc Poulhiès <dkm@kataplop.net>
17 months agogccrs: Add link cases testsuite
Philip Herron [Tue, 23 Aug 2022 15:00:51 +0000 (16:00 +0100)] 
gccrs: Add link cases testsuite

This testsuite is heavily inspired from the LTO testsuite that uses a
pattern where each file is compiled to an object file and finally linked
together. Since Rust does not have headers/prototypes, we rely on the
ordering here so that all files numbered greater than zero get compiled to
object files first. This leaves the _0 file free to test the 'extern crate' and
'use' keywords to force testing of the compiler to read metadata from the
other 'crates'.

gcc/testsuite/
* rust/link/generic_function_0.rs: New.
* rust/link/generic_function_1.rs: New.
* rust/link/link.exp: New.
* rust/link/simple_function_0.rs: New.
* rust/link/simple_function_1.rs: New.
* rust/link/trait_import_0.rs: New.
* rust/link/trait_import_1.rs: New.

17 months agogccrs: Add Debug info testsuite
Philip Herron [Tue, 23 Aug 2022 14:59:12 +0000 (15:59 +0100)] 
gccrs: Add Debug info testsuite

This testsuite is specifically about testcases which scan the asm debug
info for results.

gcc/testsuite/
* rust/debug/chartype.rs: New.
* rust/debug/custom_link_section.rs: New.
* rust/debug/debug.exp: New.
* rust/debug/i8u8.rs: New.
* rust/debug/lang.rs: New.
* rust/debug/no_mangle.rs: New.
* rust/debug/oldlang.rs: New.
* rust/debug/tuple.rs: New.
* rust/debug/win64-abi.rs: New.

Co-authored-by: Tom Tromey <tom@tromey.com>
Co-authored-by: Mark Wielaard <mark@klomp.org>
Co-authored-by: Marc Poulhiès <dkm@kataplop.net>
17 months agogccrs: Add necessary hooks for a Rust front-end testsuite
Philip Herron [Tue, 23 Aug 2022 14:49:47 +0000 (15:49 +0100)] 
gccrs: Add necessary hooks for a Rust front-end testsuite

This copies over code from other front-end testsuites to enable testing
for the rust front-end specifically.

gcc/testsuite/
* lib/rust-dg.exp: New.
* lib/rust.exp: New.

Co-authored-by: Marc Poulhiès <dkm@kataplop.net>
Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>
17 months agoUse DW_ATE_UTF for the Rust 'char' type
Tom Tromey [Tue, 23 Aug 2022 14:47:13 +0000 (15:47 +0100)] 
Use DW_ATE_UTF for the Rust 'char' type

The Rust 'char' type should use the DWARF DW_ATE_UTF encoding.

gcc/
* dwarf2out.cc (is_rust): New.
(base_type_die): Use DW_ATE_UTF for the Rust 'char' type.
(gen_compile_unit_die): Handle "GNU Rust".

Co-authored-by: Mark Wielaard <mark@klomp.org>
Co-authored-by: Marc Poulhiès <dkm@kataplop.net>
17 months agotree-optimization/108076 - if-conversion and forced labels
Richard Biener [Mon, 12 Dec 2022 16:52:46 +0000 (17:52 +0100)] 
tree-optimization/108076 - if-conversion and forced labels

When doing if-conversion we simply throw away labels without checking
whether they are possibly targets of non-local gotos or have their
address taken.  The following rectifies this and refuses to if-convert
such loops.

PR tree-optimization/108076
* tree-if-conv.cc (if_convertible_loop_p_1): Reject blocks
with non-local or forced labels that we later remove
labels from.

* gcc.dg/torture/pr108076.c: New testcase.

17 months agolibsanitizer: Fix up libbacktrace build after r13-4547 [PR108072]
Jakub Jelinek [Tue, 13 Dec 2022 09:30:36 +0000 (10:30 +0100)] 
libsanitizer: Fix up libbacktrace build after r13-4547 [PR108072]

The r13-4547 commit added new non-static function to libbacktrace:
backtrace_uncompress_zstd but for the libsanitizer use we need to
rename it, so that it is in __asan_* namespace and doesn't clash
with other copies of libbacktrace.

2022-12-13  Jakub Jelinek  <jakub@redhat.com>

libsanitizer/
PR sanitizer/108072
* libbacktrace/backtrace-rename.h (backtrace_uncompress_zstd): Define.

17 months agors6000: enable cbranchcc4
Haochen Gui [Tue, 13 Dec 2022 08:45:10 +0000 (16:45 +0800)] 
rs6000: enable cbranchcc4

This patch enables "have_cbranchcc4" on rs6000 by defining a
"cbranchcc4" expander. "have_cbrnachcc4" is a flag in ifcvt.cc to
indicate if branching by CC bits is valid or not. With this flag
enabled, some branches can be optimized to conditional moves.

2022-12-07  Haochen Gui <guihaoc@linux.ibm.com>

gcc/
* config/rs6000/rs6000.md (cbranchcc4): New expander.

gcc/testsuite
* gcc.target/powerpc/cbranchcc4-1.c: New.
* gcc.target/powerpc/cbranchcc4-2.c: New.

17 months agooptabs: make prepare_cmp_insn goto fail when cbranchcc4 checks unsatisfied
Haochen Gui [Thu, 8 Dec 2022 05:22:29 +0000 (13:22 +0800)] 
optabs: make prepare_cmp_insn goto fail when cbranchcc4 checks unsatisfied

prepare_cmp_insn is a help function to generate comparison rtx.
It should not assume that cbranchcc4 exists and all sub-CC modes
are supported on a target.  When the check fails, it could go to
fail and return a NULL rtx as its callers check the return value
for CCmode.

The test case (gcc.target/powerpc/cbranchcc4-1.c) which covers
failure path will be committed with an rs6000 specific patch.

2022-12-05  Haochen Gui <guihaoc@linux.ibm.com>

gcc/
* optabs.cc (prepare_cmp_insn): Return a NULL rtx other than
assertion failure when targets don't have cbranch optab or
predicate check fails.

17 months agoDaily bump.
GCC Administrator [Tue, 13 Dec 2022 00:18:07 +0000 (00:18 +0000)] 
Daily bump.

17 months agoRevert "c++: build initializer_list<string> in a loop [PR105838]"
Jason Merrill [Mon, 12 Dec 2022 22:41:39 +0000 (17:41 -0500)] 
Revert "c++: build initializer_list<string> in a loop [PR105838]"

This patch broke a couple of different patterns; reverting while I work on a
fix.

PR c++/108701

This reverts commit bd0485f20f4794f9787237706a6308473a8e9415.

17 months agolibgo: bump major version
Ian Lance Taylor [Mon, 12 Dec 2022 20:46:40 +0000 (12:46 -0800)] 
libgo: bump major version

PR go/108057

The current version is the same as for the previous GCC release,
but there have been minor changes like new type descriptors that
make it impossible to run Go programs built with the previous GCC
release with the current libgo.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/456976

17 months agoFortran: improve checking of assumed-size array spec [PR102180]
Harald Anlauf [Sun, 11 Dec 2022 22:24:03 +0000 (23:24 +0100)] 
Fortran: improve checking of assumed-size array spec [PR102180]

gcc/fortran/ChangeLog:

PR fortran/102180
* array.cc (match_array_element_spec): Add check for bad
assumed-implied-spec.
(gfc_match_array_spec): Reorder logic so that the first bad array
element spec may trigger an error.

gcc/testsuite/ChangeLog:

PR fortran/102180
* gfortran.dg/pr102180.f90: New test.

17 months agod: Fix undefined reference to nested lambda in template (PR108055)
Iain Buclaw [Sat, 10 Dec 2022 21:11:41 +0000 (22:11 +0100)] 
d: Fix undefined reference to nested lambda in template (PR108055)

Sometimes, nested lambdas of templated functions get no code generation
due to them being marked as instantianted outside of all modules being
compiled in the current compilation unit.  This despite enclosing
template instances being marked as instantiated inside the current
compilation unit.  To fix, all enclosing templates are now checked in
`function_defined_in_root_p'.

Because of this change, `function_needs_inline_definition_p' has also
been fixed up to only check whether the regular function definition
itself is to be emitted in the current compilation unit.

PR d/108055

gcc/d/ChangeLog:

* decl.cc (function_defined_in_root_p): Check all enclosing template
instances for definition in a root module.
(function_needs_inline_definition_p): Replace call to
function_defined_in_root_p with test for outer module `isRoot'.

gcc/testsuite/ChangeLog:

* gdc.dg/torture/imports/pr108055conv.d: New.
* gdc.dg/torture/imports/pr108055spec.d: New.
* gdc.dg/torture/imports/pr108055write.d: New.
* gdc.dg/torture/pr108055.d: New test.

17 months agoAArch64: Enable TARGET_CONST_ANCHOR
Wilco Dijkstra [Mon, 12 Dec 2022 15:44:03 +0000 (15:44 +0000)] 
AArch64: Enable TARGET_CONST_ANCHOR

Enable TARGET_CONST_ANCHOR to allow complex constants to be created via
immediate add/sub.  Use a 24-bit range as that enables a 3 or 4-instruction
immediate to be replaced by 2 add/sub instructions.  Fix the costing of
add/sub to support 24-bit and 12-bit shifted immediates.
The generated code for the testcase is now the same or better than LLVM.
It also results in a small codesize reduction on SPEC.

gcc/
* config/aarch64/aarch64.cc (aarch64_rtx_costs): Add correct costs
for 24-bit and 12-bit shifted immediate add/sub.
(TARGET_CONST_ANCHOR): Define.
* config/aarch64/predicates.md (aarch64_pluslong_immediate):
Fix range check.

gcc/testsuite/
* gcc.target/aarch64/movk_3.c: New test.

17 months agomiddle-end: simplify complex if expressions where comparisons are inverse of one...
Tamar Christina [Mon, 12 Dec 2022 15:21:39 +0000 (15:21 +0000)] 
middle-end: simplify complex if expressions where comparisons are inverse of one another.

This optimizes the following sequence

  ((a < b) & c) | ((a >= b) & d)

into

  (a < b ? c : d) & 1

for scalar and on vector we can omit the & 1.

Also recognizes

  (-(a < b) & c) | (-(a >= b) & d)

into

  a < b ? c : d

This changes the code generation from

zoo2:
cmp     w0, w1
cset    w0, lt
cset    w1, ge
and     w0, w0, w2
and     w1, w1, w3
orr     w0, w0, w1
ret

into

cmp w0, w1
csel w0, w2, w3, lt
and w0, w0, 1
ret

and significantly reduces the number of selects we have to do in the vector
code.

gcc/ChangeLog:

* match.pd: Add new rule.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/if-compare_1.c: New test.
* gcc.target/aarch64/if-compare_2.c: New test.

17 months agoAArch64: Fix vector re-interpretation between partial SIMD modes
Tamar Christina [Mon, 12 Dec 2022 15:20:30 +0000 (15:20 +0000)] 
AArch64: Fix vector re-interpretation between partial SIMD modes

While writing a patch series I started getting incorrect codegen out from
VEC_PERM on partial struct types.

It turns out that this was happening because the TARGET_CAN_CHANGE_MODE_CLASS
implementation has a slight bug in it.  The hook only checked for SIMD to
Partial but never Partial to SIMD.   This resulted in incorrect subregs to be
generated from the fallback code in VEC_PERM_EXPR expansions.

I have unfortunately not been able to trigger it using a standalone testcase as
the mid-end optimizes away the permute every time I try to describe a permute
that would result in the bug.

The patch now rejects any conversion of partial SIMD struct types, unless they
are both partial structures of the same number of registers or one is a SIMD
type who's size is less than 8 bytes.

gcc/ChangeLog:

* config/aarch64/aarch64.cc (aarch64_can_change_mode_class): Restrict
conversions between partial struct types properly.

17 months agoAArch64: Support new tbranch optab.
Tamar Christina [Mon, 12 Dec 2022 15:18:56 +0000 (15:18 +0000)] 
AArch64: Support new tbranch optab.

This implements the new tbranch optab for AArch64.

we cannot emit one big RTL for the final instruction immediately.
The reason that all comparisons in the AArch64 backend expand to separate CC
compares, and separate testing of the operands is for ifcvt.

The separate CC compare is needed so ifcvt can produce csel, cset etc from the
compares.  Unlike say combine, ifcvt can not do recog on a parallel with a
clobber.  Should we emit the instruction directly then ifcvt will not be able
to say, make a csel, because we have no patterns which handle zero_extract and
compare. (unlike combine ifcvt cannot transform the extract into an AND).

While you could provide various patterns for this (and I did try) you end up
with broken patterns because you can't add the clobber to the CC register.  If
you do, ifcvt recog fails.

i.e.

int
f1 (int x)
{
  if (x & 1)
    return 1;
  return x;
}

We lose csel here.

Secondly the reason the compare with an explicit CC mode is needed is so that
ifcvt can transform the operation into a version that doesn't require the flags
to be set.  But it only does so if it know the explicit usage of the CC reg.

For instance

int
foo (int a, int b)
{
  return ((a & (1 << 25)) ? 5 : 4);
}

Doesn't require a comparison, the optimal form is:

foo(int, int):
        ubfx    x0, x0, 25, 1
        add     w0, w0, 4
        ret

and no compare is actually needed.  If you represent the instruction using an
ANDS instead of a zero_extract then you get close, but you end up with an ands
followed by an add, which is a slower operation.

gcc/ChangeLog:

* config/aarch64/aarch64.md (*tb<optab><mode>1): Rename to...
(*tb<optab><ALLI:mode><GPI:mode>1): ... this.
(tbranch_<code><mode>4): New.
* config/aarch64/iterators.md(ZEROM, zerom): New.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/tbz_1.c: New test.

17 months agomiddle-end: Add new tbranch optab to add support for bit-test-and-branch operations
Tamar Christina [Mon, 12 Dec 2022 15:16:50 +0000 (15:16 +0000)] 
middle-end: Add new tbranch optab to add support for bit-test-and-branch operations

This adds a new test-and-branch optab that can be used to do a conditional test
of a bit and branch.   This is similar to the cbranch optab but instead can
test any arbitrary bit inside the register.

This patch recognizes boolean comparisons and single bit mask tests.

gcc/ChangeLog:

* dojump.cc (do_jump): Pass along value.
(do_jump_by_parts_greater_rtx): Likewise.
(do_jump_by_parts_zero_rtx): Likewise.
(do_jump_by_parts_equality_rtx): Likewise.
(do_compare_rtx_and_jump): Likewise.
(do_compare_and_jump): Likewise.
* dojump.h (do_compare_rtx_and_jump): New.
* optabs.cc (emit_cmp_and_jump_insn_1): Refactor to take optab to check.
(validate_test_and_branch): New.
(emit_cmp_and_jump_insns): Optiobally take a value, and when value is
supplied then check if it's suitable for tbranch.
* optabs.def (tbranch_eq$a4, tbranch_ne$a4): New.
* doc/md.texi (tbranch_@var{op}@var{mode}4): Document it.
* optabs.h (emit_cmp_and_jump_insns): New.
* tree.h (tree_zero_one_valued_p): New.

17 months agoaarch64: Make existing V2HF be usable.
Tamar Christina [Mon, 12 Dec 2022 15:15:07 +0000 (15:15 +0000)] 
aarch64: Make existing V2HF be usable.

The backend has an existing V2HFmode that is used by pairwise operations.
This mode was however never made fully functional.  Amongst other things it was
never declared as a vector type which made it unusable from the mid-end.

It's also lacking an implementation for load/stores so reload ICEs if this mode
is every used.  This finishes the implementation by providing the above.

Note that I have created a new iterator VHSDF_P instead of extending VHSDF
because the previous iterator is used in far more things than just load/stores.

It's also used for instance in intrinsics and extending this would force me to
provide support for mangling the type while we never expose it through
intrinsics.

gcc/ChangeLog:

* config/aarch64/aarch64-simd.md (*aarch64_simd_movv2hf): New.
(mov<mode>, movmisalign<mode>, aarch64_dup_lane<mode>,
aarch64_store_lane0<mode>, aarch64_simd_vec_set<mode>,
@aarch64_simd_vec_copy_lane<mode>, vec_set<mode>,
reduc_<optab>_scal_<mode>, reduc_<fmaxmin>_scal_<mode>,
aarch64_reduc_<optab>_internal<mode>, aarch64_get_lane<mode>,
vec_init<mode><Vel>, vec_extract<mode><Vel>): Support V2HF.
(aarch64_simd_dupv2hf): New.
* config/aarch64/aarch64.cc (aarch64_classify_vector_mode):
Add E_V2HFmode.
* config/aarch64/iterators.md (VHSDF_P): New.
(V2F, VMOVE, nunits, Vtype, Vmtype, Vetype, stype, VEL,
Vel, q, vp): Add V2HF.
* config/arm/types.md (neon_fp_reduc_add_h): New.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/sve/slp_1.c: Update testcase.

17 months agolibstdc++: Add a test checking for chrono::duration overflows
Jonathan Wakely [Mon, 12 Dec 2022 12:51:49 +0000 (12:51 +0000)] 
libstdc++: Add a test checking for chrono::duration overflows

This test fails if chrono::days::rep or chrono::years::rep is a 32-bit
type, because a large days or years value silently overflows a 32-bit
integer when converted to seconds. It would be conforming to implement
chrono::days as chrono::duration<int32_t, ratio<86400>>, but would make
this overflow case more likely. Similarly for chrono::years,
chrono::months and chrono::weeks. This test is here to remind us not to
make that change lightly.

libstdc++-v3/ChangeLog:

* testsuite/20_util/duration/arithmetic/overflow_c++20.cc: New
test.

17 months agolibstdc++: Fix constraint on std::basic_format_string [PR108024]
Jonathan Wakely [Mon, 12 Dec 2022 11:40:07 +0000 (11:40 +0000)] 
libstdc++: Fix constraint on std::basic_format_string [PR108024]

Also remove some redundant std::move calls for return statements.

libstdc++-v3/ChangeLog:

PR libstdc++/108024
* include/std/format (basic_format_string): Fix constraint.
* testsuite/std/format/format_string.cc: New test.

17 months agolibstdc++: Change names that clash with Win32 or Clang
Jonathan Wakely [Mon, 12 Dec 2022 11:22:45 +0000 (11:22 +0000)] 
libstdc++: Change names that clash with Win32 or Clang

Clang now defines an __is_unsigned built-in, and Windows defines an
_Out_ macro. Replace uses of those as identifiers.

There might also be a problem with __is_signed, which we use in several
places.

libstdc++-v3/ChangeLog:

* include/std/chrono (hh_mm_ss): Rename __is_unsigned member to
_S_is_unsigned.
* include/std/format (basic_format_context): Rename _Out_
template parameter to _Out2.
* testsuite/17_intro/names.cc: Add Windows SAL annotation
macros.

17 months agolibstdc++: Define atomic lock-free type aliases for C++20 [PR98034]
Jonathan Wakely [Mon, 12 Dec 2022 12:49:40 +0000 (12:49 +0000)] 
libstdc++: Define atomic lock-free type aliases for C++20 [PR98034]

libstdc++-v3/ChangeLog:

PR libstdc++/98034
* include/std/atomic (__cpp_lib_atomic_lock_free_type_aliases):
Define macro.
(atomic_signed_lock_free, atomic_unsigned_lock_free): Define
aliases.
* include/std/version (__cpp_lib_atomic_lock_free_type_aliases):
Define macro.
* testsuite/29_atomics/atomic/lock_free_aliases.cc: New test.

17 months agolibstdc++: Make operator<< for stacktraces less templated (LWG 3515)
Jonathan Wakely [Fri, 9 Dec 2022 14:59:01 +0000 (14:59 +0000)] 
libstdc++: Make operator<< for stacktraces less templated (LWG 3515)

This change was approved for C++23 last month.

libstdc++-v3/ChangeLog:

* include/std/stacktrace (operator<<): Only output to narrow
ostreams (LWG 3515).
* testsuite/19_diagnostics/stacktrace/synopsis.cc:

17 months agomklog: do not parse binary file for PR entry
Martin Liska [Mon, 12 Dec 2022 12:24:25 +0000 (13:24 +0100)] 
mklog: do not parse binary file for PR entry

contrib/ChangeLog:

* mklog.py: Do not search PR entry in a file that is binary.

17 months agoaarch64: Add __ARM_FEATURE_PAUTH and __ARM_FEATURE_BTI ACLE defines
Kyrylo Tkachov [Mon, 12 Dec 2022 11:07:45 +0000 (11:07 +0000)] 
aarch64: Add __ARM_FEATURE_PAUTH and __ARM_FEATURE_BTI ACLE defines

Recent ACLE additions specified the __ARM_FEATURE_PAUTH and __ARM_FEATURE_BTI macros [1] that the compiler
should define when the pointer authentication and BTI instructions are available (and don't act as NOPs).
We've received requests to enable them in GCC for aarch64, similar to clang [2].
It's a fairly simple patch and should be non-intrusive at this stage.
Pointer authentication has its own "pauth" feature flag, whereas BTI depends on an architecture level
of Armv8.5-a or later.

Bootstrapped and tested on aarch64-none-linux-gnu.

[1] https://github.com/ARM-software/acle/blob/main/main/acle.md#pointer-authentication
[2] https://reviews.llvm.org/rG7d40baa82b1f272f68de63f3c4f68d970bdcd6ed

gcc/ChangeLog:

* config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Define
__ARM_FEATURE_PAUTH and __ARM_FEATURE_BTI when appropriate.
* config/aarch64/aarch64.h (TARGET_BTI): Define.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/acle/bti_def.c: New test.
* gcc.target/aarch64/acle/pauth_def.c: New test.

17 months agoRevert parts of ADDR_EXPR/CONSTRUCTOR treatment change in match.pd
Richard Biener [Mon, 12 Dec 2022 07:56:41 +0000 (08:56 +0100)] 
Revert parts of ADDR_EXPR/CONSTRUCTOR treatment change in match.pd

This reverts the part that substitutes from the definition of an
SSA name to the capture, thus ADDR_EXPR@0 eventually yielding
&y_1->a[i_2] instead of _3.  That's because I didn't think of
how to deal with substituting @0 in the result pattern.  So
the following re-instantiates the SSA def CONSTRUCTOR handling
and in the ADDR_EXPR helpers used by match.pd handles SSA names
defined to ADDR_EXPRs transparently.

* genmatch.cc (dt_simplify::gen): Revert last change.
* match.pd: Revert simplification of CONSTUCTOR leaf handling.
(&x cmp SSA_NAME): Handle ADDR_EXPR in SSA defs.
* fold-const.cc (split_address_to_core_and_offset): Handle
ADDR_EXPRs in SSA defs.
(address_compare): Likewise.

17 months agotree-optimization/89317 - another pattern for &p->x != p + 4
Richard Biener [Mon, 12 Dec 2022 07:13:33 +0000 (08:13 +0100)] 
tree-optimization/89317 - another pattern for &p->x != p + 4

As seen in the original testcase for PR89317 we are missing
comparison simplification patterns for &p->x != p + 4.  Fixed
by making an existing one apply.  To make the pattern apply
during CCP we need to simplify ccp_fold to not use GENERIC
folding of conditions but also use GIMPLE folding.

PR tree-optimization/89317
* tree-ssa-ccp.cc (ccp_fold): Handle GIMPLE_COND via
gimple_fold_stmt_to_constant_1.
* match.pd (&a != &a + c): Apply to pointer_plus with non-ADDR_EXPR
base as well.

* gcc.dg/tree-ssa/pr89317.c: Amend.

17 months agoDaily bump.
GCC Administrator [Mon, 12 Dec 2022 00:22:21 +0000 (00:22 +0000)] 
Daily bump.

17 months agoFortran: fix ICE on bad use of statement function [PR107995]
Steve Kargl [Sat, 10 Dec 2022 21:17:15 +0000 (22:17 +0100)] 
Fortran: fix ICE on bad use of statement function [PR107995]

gcc/fortran/ChangeLog:

PR fortran/107995
* interface.cc (gfc_check_dummy_characteristics): Reject statement
function dummy arguments.

gcc/testsuite/ChangeLog:

PR fortran/107995
* gfortran.dg/pr107995.f90: New test.

17 months agod: Fix internal compiler error: in visit, at d/imports.cc:72 (PR108050)
Iain Buclaw [Sat, 10 Dec 2022 18:12:43 +0000 (19:12 +0100)] 
d: Fix internal compiler error: in visit, at d/imports.cc:72 (PR108050)

The visitor for lowering IMPORTED_DECLs did not have an override for
dealing with importing OverloadSet symbols.  This has now been
implemented in the code generator.

PR d/108050

gcc/d/ChangeLog:

* decl.cc (DeclVisitor::visit (Import *)): Handle build_import_decl
returning a TREE_LIST.
* imports.cc (ImportVisitor::visit (OverloadSet *)): New override.

gcc/testsuite/ChangeLog:

* gdc.dg/imports/pr108050/mod1.d: New.
* gdc.dg/imports/pr108050/mod2.d: New.
* gdc.dg/imports/pr108050/package.d: New.
* gdc.dg/pr108050.d: New test.

17 months agounidiff: use newline='\n' argument
Martin Liska [Sun, 11 Dec 2022 16:18:12 +0000 (17:18 +0100)] 
unidiff: use newline='\n' argument

In order to support CR on a line, we need to open files
with newline='\n' as our line endings supposed to be of UNIX style.

contrib/ChangeLog:

* check_GNU_style.py: Use newline=\n.
* check_GNU_style_lib.py: Simplify.
* gcc-changelog/git_commit.py: Fix issues seen
Rust patchset.
* gcc-changelog/git_email.py: Use newline argument.
* gcc-changelog/test_email.py: New test.
* gcc-changelog/test_patches.txt: New test.
* mklog.py: Use newline argument.

17 months agod: Merge upstream dmd, druntime c8ae4adb2e, phobos 792c8b7c1.
Iain Buclaw [Fri, 9 Dec 2022 17:59:38 +0000 (18:59 +0100)] 
d: Merge upstream dmd, druntime c8ae4adb2e, phobos 792c8b7c1.

D front-end changes:

- Import dmd v2.101.0.
- Deprecate the ability to call `__traits(getAttributes)' on
  overload sets.
- Deprecate non-empty `for' statement increment clause with no
  effect.
- Array literals assigned to `scope' array variables can now be
  allocated on the stack.

D runtime changes:

- Import druntime v2.101.0.

Phobos changes:

- Import phobos v2.101.0.

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd c8ae4adb2e.
* typeinfo.cc (check_typeinfo_type): Update for new front-end
interface.
(TypeInfoVisitor::visit (TypeInfoStructDeclaration *)): Remove warning
that toHash() must be declared 'nothrow @safe`.

libphobos/ChangeLog:

* libdruntime/MERGE: Merge upstream druntime c8ae4adb2e.
* src/MERGE: Merge upstream phobos 792c8b7c1.

17 months agod: Expand bsr intrinsic as `clz(arg) ^ (argsize - 1)'
Iain Buclaw [Sat, 10 Dec 2022 16:17:35 +0000 (17:17 +0100)] 
d: Expand bsr intrinsic as `clz(arg) ^ (argsize - 1)'

As well as removing unnecessary casts, this results in less temporaries
being generated during the initial gimple lowering pass.  Otherwise the
code generated is identical to the former intrinsic expansion.

gcc/d/ChangeLog:

* intrinsics.cc (expand_intrinsic_bsf): Fix comment.
(expand_intrinsic_bsr): Use BIT_XOR_EXPR instead of MINUS_EXPR.

17 months agotree-optimization/89317 - missed folding of (p + 4) - &p->d
Richard Biener [Sun, 11 Dec 2022 13:07:34 +0000 (14:07 +0100)] 
tree-optimization/89317 - missed folding of (p + 4) - &p->d

The PR notices we fail to simplify

  a_4 = &x_3(D)->data;
  b_5 = x_3(D) + 16;
  _1 = b_5 - a_4;

together with the enabler handling ADDR_EXPR leafs in separate
stmts in match.pd the suggested patterns work.

PR tree-optimization/89317
* match.pd ((p + b) - &p->c -> b - offsetof(c)): New patterns.

* gcc.dg/tree-ssa/pr89317.c: New testcase.

17 months agoTreat ADDR_EXPR and CONSTRUCTOR as GIMPLE/GENERIC magically
Richard Biener [Sun, 11 Dec 2022 11:32:49 +0000 (12:32 +0100)] 
Treat ADDR_EXPR and CONSTRUCTOR as GIMPLE/GENERIC magically

The following allows to match ADDR_EXPR for both the invariant
&a.b case as well as the &p->d case in a separate definition
transparently.  This also allows to remove the hack we employ
for CONSTRUCTOR which we handle for example with

 (match vec_same_elem_p
  CONSTRUCTOR@0
  (if (TREE_CODE (@0) == SSA_NAME
       && uniform_vector_p (gimple_assign_rhs1 (SSA_NAME_DEF_STMT (@0))))))

Note CONSTUCTORs always appear as separate definition in GIMPLE,
but I continue to play safe and ADDR_EXPRs are now matched in
both places where previously ADDR_EXPR@0 would have missed
the &p->x case.

This is a prerequesite for the PR89317 fix.

* genmatch.cc (dt_node::gen_kids): Handle ADDR_EXPR in both
the GENERIC and GIMPLE op position.
(dt_simplify::gen): Capture both GENERIC and GIMPLE op
position for ADDR_EXPR and CONSTRUCTOR.
* match.pd: Simplify CONSTRUCTOR leaf handling.

* gcc.dg/tree-ssa/forwprop-3.c: Adjust.
* g++.dg/tree-ssa/pr31146-2.C: Likewise.

17 months agotree-optimization/106904 - bogus -Wstringopt-overflow with vectors
Richard Biener [Wed, 7 Dec 2022 13:42:24 +0000 (14:42 +0100)] 
tree-optimization/106904 - bogus -Wstringopt-overflow with vectors

The following avoids CSE of &ps->wp to &ps->wp.hwnd confusing
-Wstringopt-overflow by making sure to produce addresses to the
biggest container from vectorization.  For this I introduce
strip_zero_offset_components which turns &ps->wp.hwnd into
&(*ps) and use that to base the vector data references on.
That will also work for addresses with variable components,
alternatively emitting pointer arithmetic via calling
get_inner_reference and gimplifying that would be possible
but likely more intrusive.

This is by no means a complete fix for all of those issues
(avoiding ADDR_EXPRs in favor of pointer arithmetic might be).
Other passes will have similar issues.

In theory that might now cause false negatives.

PR tree-optimization/106904
* tree.h (strip_zero_offset_components): Declare.
* tree.cc (strip_zero_offset_components): Define.
* tree-vect-data-refs.cc (vect_create_addr_base_for_vector_ref):
Strip zero offset components before building the address.

* gcc.dg/Wstringop-overflow-pr106904.c: New testcase.

17 months agofortran/openmp.cc: Remove 's' that slipped in during %<..%> replacement
Tobias Burnus [Sun, 11 Dec 2022 10:47:55 +0000 (11:47 +0100)] 
fortran/openmp.cc: Remove 's' that slipped in during %<..%> replacement

Seemingly, 's' (in VI that's the 's'ubstitute command) appeared verbatim in
a gfc_error message when to doing the '...' to %<...%> replacements in commit
r13-4590-g84f6f8a2a97f88be01e223c9c9dbab801a4f501f

gcc/fortran/
* openmp.cc (gfc_match_omp_context_selector_specification):
Remove spurious 's' in an error message.

17 months agoDaily bump.
GCC Administrator [Sun, 11 Dec 2022 00:17:43 +0000 (00:17 +0000)] 
Daily bump.

17 months agoFortran: reject bad SIZE argument while simplifying ISHFTC [PR106911]
Harald Anlauf [Sat, 10 Dec 2022 21:05:15 +0000 (22:05 +0100)] 
Fortran: reject bad SIZE argument while simplifying ISHFTC [PR106911]

gcc/fortran/ChangeLog:

PR fortran/106911
* simplify.cc (gfc_simplify_ishftc): If the SIZE argument is known
to be outside the allowed range, terminate simplification.

gcc/testsuite/ChangeLog:

PR fortran/106911
* gfortran.dg/pr106911.f90: New test.

17 months agoivopts: Fix IP_END handling for asm goto [PR107997]
Jakub Jelinek [Sat, 10 Dec 2022 15:50:39 +0000 (16:50 +0100)] 
ivopts: Fix IP_END handling for asm goto [PR107997]

The following testcase ICEs, because the latch bb ends with
asm goto which has both fallthrough to the header and one or more labels
in the header too.  In that case there is just a single edge out of the
latch block, but still the asm goto is stmt_ends_bb_p statement, yet
ivopts decides to emit an IV bump at the IP_END position and inserts
it into the same bb as the asm goto after it, which then fails verification
(control flow in the middle of bb).

The following patch fixes it by splitting the latch -> header edge in that
case and inserting into the newly created bb, where split_edge ->
redirect_edge_and_branch is able to deal with this case correctly.

2022-12-10  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/107997
* tree-ssa-loop-ivopts.cc: Include cfganal.h.
(create_new_iv) <case IP_END>: If ip_end_pos bb is non-empty and ends
with a stmt which ends bb, instead of adding iv update after it split
the latch edge and insert iterator into the new latch bb.

* gcc.c-torture/compile/pr107997.c: New test.

17 months agolibgomp: Handle OpenMP's reverse offloads
Tobias Burnus [Sat, 10 Dec 2022 12:42:08 +0000 (13:42 +0100)] 
libgomp: Handle OpenMP's reverse offloads

This commit enabled reverse offload for nvptx such that gomp_target_rev
actually gets called.  And it fills the latter function to do all of
the following: finding the host function to the device func ptr and
copying the arguments to the host, processing the mapping/firstprivate,
calling the host function, copying back the data and freeing as needed.

The data handling is made easier by assuming that all host variables
either existed before (and are in the mapping) or that those are
devices variables not yet available on the host. Thus, the reverse
mapping can do without refcounts etc. Note that the spec disallows
inside a target region device-affecting constructs other than target
plus ancestor device-modifier and it also limits the clauses permitted
on this construct.

For the function addresses, an additional splay tree is used; for
the lookup of mapped variables, the existing splay-tree is used.
Unfortunately, its data structure requires a full walk of the tree;
Additionally, the just mapped variables are recorded in a separate
data structure an extra lookup. While the lookup is slow, assuming
that only few variables get mapped in each reverse offload construct
and that reverse offload is the exception and not performance critical,
this seems to be acceptable.

libgomp/ChangeLog:

* libgomp.h (struct target_mem_desc): Predeclare; move
below after 'reverse_splay_tree_node' and add rev_array
member.
(struct reverse_splay_tree_key_s, reverse_splay_compare): New.
(reverse_splay_tree_node, reverse_splay_tree,
reverse_splay_tree_key): New typedef.
(struct gomp_device_descr): Add mem_map_rev member.
* oacc-host.c (host_dispatch): NULL init .mem_map_rev.
* plugin/plugin-nvptx.c (GOMP_OFFLOAD_get_num_devices): Claim
support for GOMP_REQUIRES_REVERSE_OFFLOAD.
* splay-tree.h (splay_tree_callback_stop): New typedef; like
splay_tree_callback but returning int not void.
(splay_tree_foreach_lazy): Define; like splay_tree_foreach but
taking splay_tree_callback_stop as argument.
* splay-tree.c (splay_tree_foreach_internal_lazy,
splay_tree_foreach_lazy): New; but early exit if callback returns
nonzero.
* target.c: Instatiate splay_tree_c with splay_tree_prefix 'reverse'.
(gomp_map_lookup_rev): New.
(gomp_load_image_to_device): Handle reverse-offload function
lookup table.
(gomp_unload_image_from_device): Free devicep->mem_map_rev.
(struct gomp_splay_tree_rev_lookup_data, gomp_splay_tree_rev_lookup,
gomp_map_rev_lookup, struct cpy_data, gomp_map_cdata_lookup_int,
gomp_map_cdata_lookup): New auxiliary structs and functions for
gomp_target_rev.
(gomp_target_rev): Implement reverse offloading and its mapping.
(gomp_target_init): Init current_device.mem_map_rev.root.
* testsuite/libgomp.fortran/reverse-offload-2.f90: New test.
* testsuite/libgomp.fortran/reverse-offload-3.f90: New test.
* testsuite/libgomp.fortran/reverse-offload-4.f90: New test.
* testsuite/libgomp.fortran/reverse-offload-5.f90: New test.
* testsuite/libgomp.fortran/reverse-offload-5a.f90: New test without
mapping of on-device allocated variables.

17 months agoAdd initial ChangeLogs for modula2.
Gaius Mulley [Sat, 10 Dec 2022 09:10:29 +0000 (09:10 +0000)] 
Add initial ChangeLogs for modula2.

Add initial ChangeLog file in libgm2 and gcc/m2.

ChangeLog:

* libgm2: (New directory).
* libgm2/ChangeLog: (New file).

gcc/ChangeLog:

* m2: (New directory).
* m2/ChangeLog: (New file).

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
17 months agoAdd stub 'gcc/rust/ChangeLog'
Thomas Schwinge [Sat, 10 Dec 2022 07:33:22 +0000 (08:33 +0100)] 
Add stub 'gcc/rust/ChangeLog'

17 months agoFortran: Replace simple '.' quotes by %<.%>
Tobias Burnus [Sat, 10 Dec 2022 07:34:04 +0000 (08:34 +0100)] 
Fortran: Replace simple '.' quotes by %<.%>

When using %qs instead of '%s' or %<=%> instead of '=' looks nicer
by having nicer quotes and bold text, if the terminal supports it;
otherwise, plain quotes are used.

gcc/fortran/ChangeLog:

* match.cc (gfc_match_member_sep): Use %<...%> in gfc_error.
* openmp.cc (gfc_match_oacc_routine, gfc_match_omp_context_selector,
gfc_match_omp_context_selector_specification,
gfc_match_omp_declare_variant, resolve_omp_clauses): Likewise;
use %qs instead of '%s'.
* primary.cc (match_real_constant, gfc_match_varspec): Likewise.
* resolve.cc (gfc_resolve_formal_arglist, resolve_operator,
resolve_ordinary_assign): Likewise.

17 months agoPrepare 'contrib/gcc-changelog/git_commit.py' for GCC/Rust
Thomas Schwinge [Sat, 10 Dec 2022 06:27:55 +0000 (07:27 +0100)] 
Prepare 'contrib/gcc-changelog/git_commit.py' for GCC/Rust

contrib/
* gcc-changelog/git_commit.py (default_changelog_locations): Add
'gcc/rust'.
(bug_components): Add 'rust'.

17 months agoAdd ChangeLog directories for modula2 into git_commit.py.
Gaius Mulley [Sat, 10 Dec 2022 02:21:53 +0000 (02:21 +0000)] 
Add ChangeLog directories for modula2 into git_commit.py.

Prepare to add changelogs for the Modula2 front end by changing
the contrib git_commit.py script.

contrib/ChangeLog:

* gcc-changelog/git_commit.py (default_changelog_locations):
New entry for gcc/m2.  New entry for libgm2.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
17 months agolibbacktrace: rewrite and simplify main zstd loop
Ian Lance Taylor [Sat, 10 Dec 2022 01:44:52 +0000 (17:44 -0800)] 
libbacktrace: rewrite and simplify main zstd loop

* elf.c (ZSTD_TABLE_*): Use elf_zstd_fse_baseline_entry.
(ZSTD_ENCODE_BASELINE_BITS): Define.
(ZSTD_DECODE_BASELINE, ZSTD_DECODE_BASEBITS): Define.
(elf_zstd_literal_length_base): New static const array.
(elf_zstd_match_length_base): Likewise.
(struct elf_zstd_fse_baseline_entry): Define.
(elf_zstd_make_literal_baseline_fse): New static function.
(elf_zstd_make_offset_baseline_fse): Likewise.
(elf_zstd_make_match_baseline_fse): Likewise.
(print_table, main): Use elf_zstd_fse_baseline_entry.
(elf_zstd_lit_table, elf_zstd_match_table): Likewise.
(elf_zstd_offset_table): Likewise.
(struct elf_zstd_seq_decode): Likewise.  Remove use_rle and rle
fields.
(elf_zstd_unpack_seq_decode): Use elf_zstd_fse_baseline_entry,
taking a conversion function.  Convert RLE to FSE.
(elf_zstd_literal_length_baseline): Remove.
(elf_zstd_literal_length_bits): Remove.
(elf_zstd_match_length_baseline): Remove.
(elf_zstd_match_length_bits): Remove.
(elf_zstd_decompress): Use elf_zstd_fse_baseline_entry.  Rewrite
and simplify main loop.

17 months agoDaily bump.
GCC Administrator [Sat, 10 Dec 2022 00:17:39 +0000 (00:17 +0000)] 
Daily bump.

17 months agoFortran: ICE on recursive derived types with allocatable components [PR107872]
Paul Thomas [Fri, 9 Dec 2022 21:13:45 +0000 (22:13 +0100)] 
Fortran: ICE on recursive derived types with allocatable components [PR107872]

gcc/fortran/ChangeLog:

PR fortran/107872
* resolve.cc (derived_inaccessible): Skip over allocatable components
to prevent an infinite loop.

gcc/testsuite/ChangeLog:

PR fortran/107872
* gfortran.dg/pr107872.f90: New test.

17 months agoFortran/OpenMP: align/allocator modifiers to the allocate clause
Tobias Burnus [Fri, 9 Dec 2022 20:45:37 +0000 (21:45 +0100)] 
Fortran/OpenMP: align/allocator modifiers to the allocate clause

gcc/fortran/ChangeLog:

* dump-parse-tree.cc (show_omp_namelist): Improve OMP_LIST_ALLOCATE
output.
* gfortran.h (struct gfc_omp_namelist): Add 'align' to 'u'.
(gfc_free_omp_namelist): Add bool arg.
* match.cc (gfc_free_omp_namelist): Likewise; free 'u.align'.
* openmp.cc (gfc_free_omp_clauses, gfc_match_omp_clause_reduction,
gfc_match_omp_flush): Update call.
(gfc_match_omp_clauses): Match 'align/allocate modifers in
'allocate' clause.
(resolve_omp_clauses): Resolve align.
* st.cc (gfc_free_statement): Update call
* trans-openmp.cc (gfc_trans_omp_clauses): Handle 'align'.

libgomp/ChangeLog:

* libgomp.texi (5.1 Impl. Status): Split allocate clause/directive
item about 'align'; mark clause as 'Y' and directive as 'N'.
* testsuite/libgomp.fortran/allocate-2.f90: New test.
* testsuite/libgomp.fortran/allocate-3.f90: New test.

17 months agors6000: Remove useless copy_rtx in rs6000_emit_set_{,long}_const
Jiufu Guo [Fri, 9 Dec 2022 05:50:37 +0000 (13:50 +0800)] 
rs6000: Remove useless copy_rtx in rs6000_emit_set_{,long}_const

Function rs6000_emit_set_const/rs6000_emit_set_long_const are only invoked from
two "define_split"s where the target operand is limited to gpc_reg_operand or
int_reg_operand, then the operand must be REG_P.
And in rs6000_emit_set_const/rs6000_emit_set_long_const, to create temp rtx,
it is using code like "gen_reg_rtx({S|D}Imode)", it must also be REG_P.
So, copy_rtx is not needed for temp and dest.

This patch removes those "copy_rtx" for rs6000_emit_set_const and
rs6000_emit_set_long_const.

gcc/ChangeLog:

* config/rs6000/rs6000.cc (rs6000_emit_set_const): Remove copy_rtx.
(rs6000_emit_set_long_const): Likewise.

17 months agoMAINTAINERS: fix spacing
Martin Liska [Fri, 9 Dec 2022 10:08:55 +0000 (11:08 +0100)] 
MAINTAINERS: fix spacing

ChangeLog:

* MAINTAINERS: Fix spacing.

17 months agoi386: fix assert (__builtin_cpu_supports ("x86-64") >= 0)
Martin Liska [Fri, 25 Nov 2022 12:05:56 +0000 (13:05 +0100)] 
i386: fix assert (__builtin_cpu_supports ("x86-64") >= 0)

Similar story as PR103661, we again return a negative number
for __builtin_cpu_supports:

Documentation says:

int __builtin_cpu_supports(const char *feature)
This function returns a positive integer if the run-time CPU supports feature and returns 0 otherwise.
while we return -2147483648.

Moreover, I noticed "x86-64" is not a valid option for __builtin_cpu_is,
but for __builtin_cpu_supports.

PR target/107551

gcc/ChangeLog:

* config/i386/i386-builtins.cc (fold_builtin_cpu): Use same path
as for PR103661.
* doc/extend.texi: Fix "x86-64" use.

gcc/testsuite/ChangeLog:

* gcc.target/i386/builtin_target.c: Add more checks.

17 months agoRename SUBTARGET_CC1_SPEC to OS_CC1_SPEC
Sebastian Huber [Fri, 9 Dec 2022 06:55:52 +0000 (07:55 +0100)] 
Rename SUBTARGET_CC1_SPEC to OS_CC1_SPEC

This change resolves a naming conflict introduced by the recently added
SUBTARGET_CC1_SPEC to gcc.cc.  Some targets (mips and loongarch) aready used
a SUBTARGET_CC1_SPEC define.  Rename the define used by gcc.cc to OS_CC1_SPEC.

gcc/ChangeLog:

* config/rtems.h (SUBTARGET_CC1_SPEC): Rename to...
(OS_CC1_SPEC): ...this.
* gcc.cc (SUBTARGET_CC1_SPEC): Rename to...
(OS_CC1_SPEC): ...this.

17 months agoanalyzer: rename region-model-impl-calls.cc to kf.cc
David Malcolm [Fri, 9 Dec 2022 02:19:24 +0000 (21:19 -0500)] 
analyzer: rename region-model-impl-calls.cc to kf.cc

gcc/ChangeLog:
* Makefile.in (ANALYZER_OBJS): Update for renaming of
analyzer/region-model-impl-calls.cc to analyzer/kf.cc.

gcc/analyzer/ChangeLog:
* analyzer.h (class known_function): Expand comment.
* region-model-impl-calls.cc: Rename to...
* kf.cc: ...this.
* known-function-manager.h (class known_function_manager): Add
leading comment.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
17 months agoanalyzer: fix ICE on region creation during get_referenced_base_regions [PR108003]
David Malcolm [Fri, 9 Dec 2022 02:19:23 +0000 (21:19 -0500)] 
analyzer: fix ICE on region creation during get_referenced_base_regions [PR108003]

gcc/analyzer/ChangeLog:
PR analyzer/108003
* call-summary.cc
(call_summary_replay::convert_region_from_summary_1): Convert
heap_regs_in_use from auto_sbitmap to auto_bitmap.
* region-model-manager.cc
(region_model_manager::get_or_create_region_for_heap_alloc):
Convert from sbitmap to bitmap.
* region-model-manager.h: Likewise.
* region-model.cc
(region_model::get_or_create_region_for_heap_alloc): Convert from
auto_sbitmap to auto_bitmap.
(region_model::get_referenced_base_regions): Likewise.
* region-model.h: Include "bitmap.h" rather than "sbitmap.h".
(region_model::get_referenced_base_regions): Convert from
auto_sbitmap to auto_bitmap.

gcc/testsuite/ChangeLog:
PR analyzer/108003
* g++.dg/analyzer/pr108003.C: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
17 months agoanalyzer: handle memmove like memcpy
David Malcolm [Fri, 9 Dec 2022 02:19:23 +0000 (21:19 -0500)] 
analyzer: handle memmove like memcpy

gcc/analyzer/ChangeLog:
* region-model-impl-calls.cc (class kf_memcpy): Rename to...
(class kf_memcpy_memmove): ...this.
(kf_memcpy::impl_call_pre): Rename to...
(kf_memcpy_memmove::impl_call_pre): ...this, and check the src for
poison.
(register_known_functions): Update for above renaming, and
register BUILT_IN_MEMMOVE and BUILT_IN_MEMMOVE_CHK.

gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/memcpy-1.c (test_8a, test_8b): New tests.
* gcc.dg/analyzer/memmove-1.c: New test, based on memcpy-1.c
* gcc.dg/analyzer/out-of-bounds-1.c (test7): Update expected
result for uninit srcBuf.
* gcc.dg/analyzer/out-of-bounds-5.c (test8, test9): Add
dg-warnings for memcpy from uninit src vla.
* gcc.dg/analyzer/pr104308.c (test_memmove_within_uninit):
Expect creation point note to be missing on riscv*-*-*.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
17 months agoEnable hwasan for x86-64.
liuhongt [Wed, 21 Apr 2021 21:23:48 +0000 (14:23 -0700)] 
Enable hwasan for x86-64.

libsanitizer
* configure.tgt: Enable hwasan for x86-64.

17 months agoImplement hwasan target_hook.
liuhongt [Wed, 21 Apr 2021 21:15:04 +0000 (14:15 -0700)] 
Implement hwasan target_hook.

gcc/ChangeLog:

* doc/invoke.texi (x86 options): Document
-mlam={none,u48,u57}.
* config/i386/i386-opts.h (enum lam_type): New enum.
* config/i386/i386.cc (ix86_memtag_can_tag_addresses): New.
(ix86_memtag_set_tag): Ditto.
(ix86_memtag_extract_tag): Ditto.
(ix86_memtag_add_tag): Ditto.
(ix86_memtag_tag_size): Ditto.
(ix86_memtag_untagged_pointer): Ditto.
(TARGET_MEMTAG_CAN_TAG_ADDRESSES): New.
(TARGET_MEMTAG_ADD_TAG): Ditto.
(TARGET_MEMTAG_SET_TAG): Ditto.
(TARGET_MEMTAG_EXTRACT_TAG): Ditto.
(TARGET_MEMTAG_UNTAGGED_POINTER): Ditto.
(TARGET_MEMTAG_TAG_SIZE): Ditto.
(IX86_HWASAN_SHIFT): Ditto.
(IX86_HWASAN_TAG_SIZE): Ditto.
* config/i386/i386-expand.cc (ix86_expand_call): Untag code
pointer.
* config/i386/i386-options.cc (ix86_option_override_internal):
Error when enable -mlam=[u48|u57] for 32-bit code.
* config/i386/i386.opt: Add -mlam=[none|u48|u57].
* config/i386/i386-protos.h (ix86_memtag_untagged_pointer):
Declare.
(ix86_memtag_can_tag_addresses): Ditto.

17 months agolibstdc++: Remove digit separators [PR108015]
Jonathan Wakely [Thu, 8 Dec 2022 11:55:31 +0000 (11:55 +0000)] 
libstdc++: Remove digit separators [PR108015]

These are not valid in C++11 and cause a warning when preprocessing,
even though they're inside a skipped group.

chrono:2436: warning: missing terminating ' character

libstdc++-v3/ChangeLog:

PR libstdc++/108015
* include/std/chrono (hh_mm_ss): Remove digit separators.

17 months agolibstdc++: Fix some -Wunused warnings in tests
Jonathan Wakely [Thu, 8 Dec 2022 11:39:20 +0000 (11:39 +0000)] 
libstdc++: Fix some -Wunused warnings in tests

libstdc++-v3/ChangeLog:

* include/ext/pb_ds/detail/type_utils.hpp (PB_DS_STATIC_ASSERT):
Add unused attribute to avoid -Wunused-local-typedef warnings.
* testsuite/17_intro/tag_type_explicit_ctor.cc: Add pragma to
ignore -Wunused-variable warnings

17 months agolibstdc++: Add [[nodiscard]] to chrono conversion functions
Jonathan Wakely [Mon, 28 Nov 2022 11:22:24 +0000 (11:22 +0000)] 
libstdc++: Add [[nodiscard]] to chrono conversion functions

Also add doxygen comments.

libstdc++-v3/ChangeLog:

* include/bits/chrono.h (duration_cast, floor, round, abs, ceil)
(time_point_cast): Add [[nodiscard]] attribute and doxygen
comments.
(treat_as_floating_point): Add doxygen commen.

17 months agolibstdc++: Change class-key for duration and time_point to class
Jonathan Wakely [Fri, 2 Dec 2022 16:18:43 +0000 (16:18 +0000)] 
libstdc++: Change class-key for duration and time_point to class

We define these with the 'struct' keyword, but the standard uses
'class'. This results in warnings if users try to refer to them using
elaborated type specifiers.

libstdc++-v3/ChangeLog:

* include/bits/chrono.h (duration, time_point): Change 'struct'
to 'class'.

17 months agoDaily bump.
GCC Administrator [Fri, 9 Dec 2022 00:18:54 +0000 (00:18 +0000)] 
Daily bump.

17 months agodocs: Suggest options to improve ASAN stack traces
Marek Polacek [Wed, 7 Dec 2022 20:27:27 +0000 (15:27 -0500)] 
docs: Suggest options to improve ASAN stack traces

I got a complaint that while Clang docs suggest options that improve
the quality of the backtraces ASAN prints (cf.
<https://clang.llvm.org/docs/AddressSanitizer.html#usage>), our docs
don't say anything to that effect.  This patch amends that with a new
paragraph.  (It deliberately doesn't mention -fno-omit-frame-pointer.)

gcc/ChangeLog:

* doc/invoke.texi (-fsanitize=address): Suggest options to improve
stack traces.

17 months agoFortran: diagnose and reject duplicate CONTIGUOUS attribute [PR108025]
Harald Anlauf [Thu, 8 Dec 2022 21:50:45 +0000 (22:50 +0100)] 
Fortran: diagnose and reject duplicate CONTIGUOUS attribute [PR108025]

gcc/fortran/ChangeLog:

PR fortran/108025
* symbol.cc (gfc_add_contiguous): Diagnose and reject duplicate
CONTIGUOUS attribute.

gcc/testsuite/ChangeLog:

PR fortran/108025
* gfortran.dg/contiguous_12.f90: New test.

17 months agoFix count comparison in ipa-cp
Eugene Rozenfeld [Wed, 7 Dec 2022 01:05:18 +0000 (17:05 -0800)] 
Fix count comparison in ipa-cp

The existing comparison was incorrect for non-PRECISE counts
(e.g., AFDO): we could end up with a 0 base_count, which could
lead to asserts, e.g., in good_cloning_opportunity_p.

Tested on x86_64-pc-linux-gnu.

gcc/ChangeLog:
PR ipa/108000
* ipa-cp.cc (ipcp_propagate_stage): Fix profile count comparison

gcc/testsuite
* gcc.dg/tree-prof/pr108000.c: Regression test

17 months agobpf: add define_insn for bswap
David Faust [Thu, 8 Dec 2022 18:08:22 +0000 (10:08 -0800)] 
bpf: add define_insn for bswap

The eBPF architecture provides 'end[be,le]' instructions for endianness
swapping. Add a define_insn for bswap<mode>2 to use them instaed of
falling back on a libcall.

gcc/

* config/bpf/bpf.md (bswap<mode>2): New define_insn.

gcc/testsuite/

* gcc.target/bpf/bswap-1.c: New test.

17 months agoc++: build initializer_list<string> in a loop [PR105838]
Jason Merrill [Tue, 6 Dec 2022 23:10:48 +0000 (18:10 -0500)] 
c++: build initializer_list<string> in a loop [PR105838]

The previous patch avoided building an initializer_list<string> at all when
building a vector<string>, but in situations where that isn't possible, we
could still build the initializer_list with a loop over a constant array.

This is represented using a VEC_INIT_EXPR, which required adjusting a couple
of places that expected the initializer array to have the same type as the
target array and fixing build_vec_init not to undo our efforts.

PR c++/105838

gcc/cp/ChangeLog:

* call.cc (convert_like_internal) [ck_list]: Use
maybe_init_list_as_array.
* constexpr.cc (cxx_eval_vec_init_1): Init might have
a different type.
* tree.cc (build_vec_init_elt): Likewise.
* init.cc (build_vec_init): Handle from_array from a
TARGET_EXPR.  Retain TARGET_EXPR of a different type.

gcc/testsuite/ChangeLog:

* g++.dg/tree-ssa/initlist-opt2.C: New test.

17 months agoc++: avoid initializer_list<string> [PR105838]
Jason Merrill [Tue, 6 Dec 2022 14:51:51 +0000 (09:51 -0500)] 
c++: avoid initializer_list<string> [PR105838]

When constructing a vector<string> from { "strings" }, first is built an
initializer_list<string>, which is then copied into the strings in the
vector.  But this is inefficient: better would be treat the { "strings" }
as a range and construct the strings in the vector directly from the
string-literals.  We can do this transformation for standard library
classes because we know the design patterns they follow.

PR c++/105838

gcc/cp/ChangeLog:

* call.cc (list_ctor_element_type): New.
(braced_init_element_type): New.
(has_non_trivial_temporaries): New.
(maybe_init_list_as_array): New.
(maybe_init_list_as_range): New.
(build_user_type_conversion_1): Use maybe_init_list_as_range.
* parser.cc (cp_parser_braced_list): Call
recompute_constructor_flags.
* cp-tree.h (find_temps_r): Declare.

gcc/testsuite/ChangeLog:

* g++.dg/tree-ssa/initlist-opt1.C: New test.

17 months agoc++: fewer allocator temps [PR105838]
Jason Merrill [Mon, 5 Dec 2022 20:19:27 +0000 (15:19 -0500)] 
c++: fewer allocator temps [PR105838]

In this PR, initializing the array of std::string to pass to the vector
initializer_list constructor gets very confusing to the optimizers as the
number of elements increases, primarily because of all the std::allocator
temporaries passed to all the string constructors.  Instead of creating one
for each string, let's share an allocator between all the strings; we can do
this safely because we know that std::allocator is stateless and that string
doesn't care about the object identity of its allocator parameter.

PR c++/105838

gcc/cp/ChangeLog:

* cp-tree.h (is_std_allocator): Declare.
* constexpr.cc (is_std_allocator): Split out  from...
(is_std_allocator_allocate): ...here.
* init.cc (find_temps_r): New.
(find_allocator_temp): New.
(build_vec_init): Use it.

gcc/testsuite/ChangeLog:

* g++.dg/tree-ssa/allocator-opt1.C: New test.

17 months agoc++: comment
Jason Merrill [Tue, 6 Dec 2022 14:51:33 +0000 (09:51 -0500)] 
c++: comment

gcc/cp/ChangeLog:

* constexpr.cc (maybe_constant_value): Add default arg comments.

17 months agoAArch64: Add UNSPECV_PATCHABLE_AREA [PR98776]
Sebastian Pop [Wed, 30 Nov 2022 19:45:24 +0000 (19:45 +0000)] 
AArch64: Add UNSPECV_PATCHABLE_AREA [PR98776]

Currently patchable area is at the wrong place on AArch64.  It is placed
immediately after function label, before .cfi_startproc.  This patch
adds UNSPECV_PATCHABLE_AREA for pseudo patchable area instruction and
modifies aarch64_print_patchable_function_entry to avoid placing
patchable area before .cfi_startproc.

gcc/
PR target/98776
* config/aarch64/aarch64-protos.h (aarch64_output_patchable_area):
Declared.
* config/aarch64/aarch64.cc (aarch64_print_patchable_function_entry):
Emit an UNSPECV_PATCHABLE_AREA pseudo instruction.
(aarch64_output_patchable_area): New.
* config/aarch64/aarch64.md (UNSPECV_PATCHABLE_AREA): New.
(patchable_area): Define.

gcc/testsuite/
PR target/98776
* gcc.target/aarch64/pr98776.c: New.
* gcc.target/aarch64/pr92424-2.c: Adjust pattern.
* gcc.target/aarch64/pr92424-3.c: Adjust pattern.

17 months agotestsuite: Fix leaks in tree-dynamic-object-size-0.c
Siddhesh Poyarekar [Thu, 8 Dec 2022 15:21:17 +0000 (10:21 -0500)] 
testsuite: Fix leaks in tree-dynamic-object-size-0.c

In commit e5cfb9cac1d7aba9a8ea73bfe7922cfaff9d61f3 I introduced tests
for strdup and strndup with leaks.  Fix those leaks.

gcc/testsuite/ChangeLog:

* gcc.dg/builtin-dynamic-object-size-0.c (test_strdup,
test_strndup, test_strdup_min, test_strndup_min): Free RES
before returning from function.

Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
17 months agocfgbuild: Fix DEBUG_INSN handling in find_bb_boundaries [PR106719]
Jakub Jelinek [Thu, 8 Dec 2022 13:57:22 +0000 (14:57 +0100)] 
cfgbuild: Fix DEBUG_INSN handling in find_bb_boundaries [PR106719]

The following testcase FAILs on aarch64-linux.  We have some atomic
instruction followed by 2 DEBUG_INSNs (if -g only of course) followed
by NOTE_INSN_EPILOGUE_BEG followed by some USE insn.
Now, split3 pass replaces the atomic instruction with a code sequence
which ends with a conditional jump and the split3 pass calls
find_many_sub_basic_blocks.
For -g0, find_bb_boundaries sees the flow_transfer_insn (the new conditional
jump), then NOTE_INSN_EPILOGUE_BEG which can live in between basic blocks
and then the USE insn, so splits block after the NOTE_INSN_EPILOGUE_BEG
and puts the NOTE in between the blocks.
For -g, if sees a DEBUG_INSN after the flow_transfer_insn, so sets
debug_insn to it, then walks over another DEBUG_INSN, NOTE_INSN_EPILOGUE_BEG
until it finally sees the USE insn, and triggers the:
          rtx_insn *prev = PREV_INSN (insn);

          /* If the first non-debug inside_basic_block_p insn after a control
             flow transfer is not a label, split the block before the debug
             insn instead of before the non-debug insn, so that the debug
             insns are not lost.  */
          if (debug_insn && code != CODE_LABEL && code != BARRIER)
            prev = PREV_INSN (debug_insn);
code I've added for PR81325.  If there are only DEBUG_INSNs, that is
the right thing to do, but if in between debug_insn and insn there are
notes which can stay in between basic blocks or simnilarly JUMP_TABLE_DATA
or their associated CODE_LABELs, it causes -fcompare-debug differences.

The following patch fixes it by clearing debug_insn if JUMP_TABLE_DATA
or associated CODE_LABEL is seen (I'm afraid there is no good answer
what to do with DEBUG_INSNs before those; the code then removes them:
              /* Clean up the bb field for the insns between the blocks.  */
              for (x = NEXT_INSN (flow_transfer_insn);
                   x != BB_HEAD (fallthru->dest);
                   x = next)
                {
                  next = NEXT_INSN (x);
                  /* Debug insns should not be in between basic blocks,
                     drop them on the floor.  */
                  if (DEBUG_INSN_P (x))
                    delete_insn (x);
                  else if (!BARRIER_P (x))
                    set_block_for_insn (x, NULL);
                }
but if there are NOTEs, the patch just reorders the NOTEs and DEBUG_INSNs,
such that the NOTEs come first (so that they stay in between basic blocks
like with -g0) and DEBUG_INSNs after those (so that bb is split before
them, so they will be in the basic block after NOTE_INSN_BASIC_BLOCK).

2022-12-08  Jakub Jelinek  <jakub@redhat.com>

PR debug/106719
* cfgbuild.cc (find_bb_boundaries): If there are NOTEs in between
debug_insn (seen after flow_transfer_insn) and insn, move NOTEs
before all the DEBUG_INSNs and split after NOTEs.  If there are
other insns like jump table data, clear debug_insn.

* gcc.dg/pr106719.c: New test.

17 months agoi386: Add *concat<mode><dwi>3_{5,6,7} patterns [PR107627]
Jakub Jelinek [Thu, 8 Dec 2022 13:55:46 +0000 (14:55 +0100)] 
i386: Add *concat<mode><dwi>3_{5,6,7} patterns [PR107627]

On Thu, Dec 01, 2022 at 09:09:51AM +0100, Jakub Jelinek via Gcc-patches wrote:
> BTW, I wonder if we couldn't add additional patterns which would catch
> the case where one of the operands is constant.

The following patch does add those.
The difference with the patch on the 2 testcases is:
 baz:
-       movq    8(%rsi), %rax
+       movq    8(%rsi), %rsi
+       movq    %rdi, %r8
        movl    %edx, %ecx
-       xorl    %r8d, %r8d
-       xorl    %edx, %edx
-       movabsq $-2401053089206453570, %r9
-       orq     %r8, %rax
-       orq     %r9, %rdx
-       shrdq   %rdx, %rax
-       movq    %rax, (%rdi)
+       movabsq $-2401053089206453570, %rdi
+       movq    %rsi, %rax
+       shrdq   %rdi, %rax
+       movq    %rax, (%r8)
 qux:
-       movq    (%rsi), %rax
+       movq    %rdi, %r8
+       movq    (%rsi), %rdi
        movl    %edx, %ecx
-       xorl    %r9d, %r9d
-       movabsq $-2401053089206453570, %r8
-       movq    %rax, %rdx
-       xorl    %eax, %eax
-       orq     %r8, %rax
-       orq     %r9, %rdx
-       shrdq   %rdx, %rax
-       movq    %rax, (%rdi)
+       movabsq $-2401053089206453570, %rsi
+       movq    %rsi, %rax
+       shrdq   %rdi, %rax
+       movq    %rax, (%r8)
and
 garply:
        pushl   %esi
-       xorl    %edx, %edx
+       movl    $-559038737, %esi
        pushl   %ebx
        movl    16(%esp), %eax
-       orl     $-559038737, %edx
        movl    20(%esp), %ecx
-       movl    4(%eax), %eax
-       shrdl   %edx, %eax
        movl    12(%esp), %edx
+       movl    4(%eax), %ebx
+       movl    %ebx, %eax
+       shrdl   %esi, %eax
 fred:
...
        movl    16(%esp), %eax
+       movl    $-889275714, %ebx
        movl    20(%esp), %ecx
-       movl    (%eax), %eax
-       movl    %eax, %edx
-       movl    $0, %eax
-       orl     $-889275714, %eax
-       shrdl   %edx, %eax
        movl    12(%esp), %edx
+       movl    (%eax), %esi
+       movl    %ebx, %eax
+       shrdl   %esi, %eax

2022-12-08  Jakub Jelinek  <jakub@redhat.com>

PR target/107627
* config/i386/i386.md (HALF, half): New mode attributes.
(*concat<half><mode>3_5, *concat<mode><dwi>3_6,
*concat<mode><dwi>3_7): New define_insn_and_split patterns.

* gcc.target/i386/pr107627-3.c: New test.
* gcc.target/i386/pr107627-4.c: New test.

17 months agoEnsure arguments to range-op handler are supported.
Andrew MacLeod [Tue, 6 Dec 2022 15:41:29 +0000 (10:41 -0500)] 
Ensure arguments to range-op handler are supported.

PR tree-optimization/107985
gcc/
* gimple-range-op.cc
(gimple_range_op_handler::gimple_range_op_handler): Check if type
of the operands is supported.
* gimple-range.cc (gimple_ranger::prefill_stmt_dependencies): Do
not assert if here is no range-op handler.

gcc/testsuite/
* g++.dg/pr107985.C: New.

17 months agors6000: Update sign extension computation with sext_hwi
Jiufu Guo [Wed, 30 Nov 2022 05:13:37 +0000 (13:13 +0800)] 
rs6000: Update sign extension computation with sext_hwi

This patch just replaces the expression like:
((value & 0xf..f) ^ 0x80..0) - 0x80..0 to better code(e.g. sext_hwi) for
rs6000.cc, rs6000.md and predicates.md (files under rs6000/).

gcc/ChangeLog:

* config/rs6000/predicates.md: Use sext_hwi.
* config/rs6000/rs6000.cc (num_insns_constant_gpr): Likewise.
(darwin_rs6000_legitimate_lo_sum_const_p): Likewise.
(mem_operand_gpr): Likewise.
(mem_operand_ds_form): Likewise.
(rs6000_legitimize_address): Likewise.
(rs6000_emit_set_const): Likewise.
(rs6000_emit_set_long_const): Likewise.
(print_operand): Likewise.
(constant_generates_xxspltiw): Remove unnecessary expressions.
* config/rs6000/rs6000.md: Use sext_hwi.

17 months agotree-optimization/107699 - missed &data._M_elems + _1 != &data._M_elems folding
Richard Biener [Thu, 8 Dec 2022 08:07:36 +0000 (09:07 +0100)] 
tree-optimization/107699 - missed &data._M_elems + _1 != &data._M_elems folding

The following addresses a missed folding noticed in PR107699 that can
be fixed amending the existing &x + a != &x + b pattern to also handle
the case of only one side having a pointer plus.  I'm moving the
patterns next to related simpifications showing there'd be an existing
pattern matching this if it were not gated with an explicit single_use
constraint.  Note the new pattern also handles &x.a + a != &x.b, but
this hints at some unification / generalization opportunities here.

PR tree-optimization/107699
* match.pd (&a !=/== &a.b + c -> (&a - &a.b) !=/== c): New
pattern variant.

* gcc.dg/tree-ssa/pr107699.c: New testcase.

17 months ago[PR102706] [testsuite] -Wno-stringop-overflow vs Warray-bounds
Alexandre Oliva [Thu, 8 Dec 2022 10:50:33 +0000 (07:50 -0300)] 
[PR102706] [testsuite] -Wno-stringop-overflow vs Warray-bounds

The bogus Wstringop-overflow warnings conditionally issued for
Warray-bounds-48.c and -Wzero-length-array-bounds-2.c are expected
under conditions that depend on the availability of certain vector
patterns, but that don't seem to model the conditions under which the
warnings are expected.

On riscv64-elf and arm-eabi/-mcpu=cortex-r5, for example, though the
Warray-bounds-48.c condition passes, we don't issue warnings.  On
riscv64-elf, we decide not to vectorize the assignments; on cortex-r5,
we do vectorize pairs of assignments, but that doesn't yield the
expected warning, even though assignments that should trigger the
bogus warning are vectorized and associated with the earlier line
where the bogus warning would be expected.

On riscv64, for Wzero-length-array-bounds-2.c, we issue the expected
warning in test_C_global_buf, but we also issue a warning for
test_C_local_buf under the same conditions, that would be expected on
other platforms but that is not issued on them.  On
arm-eabi/-mcpu=cortex-r5, the condition passes so we'd expect the
warning in both functions, but we don't warn on either.

Instead of further extending the effective target tests, introduced to
temporarily tolerate these expected bogus warnings, so as to capture
the vectorizer analyses that lead to the mismatched decisions, I'm
disabling the undesired warnings for these two tests.

for  gcc/testsuite/ChangeLog

PR tree-optimization/102706
* gcc.dg/Warray-bounds-48.c: Disable -Wstringop-overflow.
* gcc.dg/Wzero-length-array-bounds-2.c: Likewise.

17 months ago[arm] xfail fp-uint64-convert-double tests
Alexandre Oliva [Thu, 8 Dec 2022 10:50:32 +0000 (07:50 -0300)] 
[arm] xfail fp-uint64-convert-double tests

The FP emulation on ARM doesn't take rounding modes into account.  The
tests require hard_float, but that only tests for calls when adding
doubles.  There are arm targets that support hardware adds, but that
emulate conversions.

for  gcc/testsuite/ChangeLog

* gcc.dg/torture/fp-uint64-convert-double-1.c: Expect fail on
arm-*-eabi*.
* gcc.dg/torture/fp-uint64-convert-double-2.c: Likewise.

17 months ago[testsuite] [arm/aarch64] -fno-short-enums for auto-init-[12].c
Alexandre Oliva [Thu, 8 Dec 2022 10:50:30 +0000 (07:50 -0300)] 
[testsuite] [arm/aarch64] -fno-short-enums for auto-init-[12].c

On arm-eabi, and possibly on other platforms, -fshort-enums is enabled
by default, which breaks some tests' expectations as to enum sizes
with DEFERRED_INIT.  Disable short enums so that the expectations are
met.

for  gcc/testsuite/ChangeLog

* c-c++-common/auto-init-1.c: Add -fno-short-enums.
* c-c++-common/auto-init-2.c: Likewise.
* gcc.dg/debug/btf/btf-enum-1.c: Likewise.

17 months agorange-op-float: frange_arithmetic tweaks for MODE_COMPOSITE_P
Jakub Jelinek [Thu, 8 Dec 2022 09:41:49 +0000 (10:41 +0100)] 
range-op-float: frange_arithmetic tweaks for MODE_COMPOSITE_P

As mentioned in PR107967, ibm-ldouble-format documents that
+- has 1ulp accuracy, * 2ulps and / 3ulps.
So, even if the result is exact, we need to widen the range a little bit.

The following patch does that.  I just wonder what it means for reverse
division (the op1_range case), which we implement through multiplication,
when division has 3ulps error and multiplication just 2ulps.  In any case,
this format is a mess and for non-default rounding modes can't be trusted
at all, instead of +inf or something close to it it happily computes -inf.

2022-12-08  Jakub Jelinek  <jakub@redhat.com>

* range-op-float.cc (frange_nextafter): For MODE_COMPOSITE_P from
denormal or zero, use real_nextafter on DFmode with conversions
around it.
(frange_arithmetic): For mode_composite, on top of rounding in the
right direction accept extra 1ulp error for PLUS/MINUS_EXPR, extra
2ulps error for MULT_EXPR and extra 3ulps error for RDIV_EXPR.

17 months agoarm: fix mve intrinsics scan body tests for C++
Andrea Corallo [Thu, 1 Dec 2022 14:42:52 +0000 (15:42 +0100)] 
arm: fix mve intrinsics scan body tests for C++

Hi all,

this patch is to export the functions defined in these MVE tests as C
so the body scan assembler works as expected also for our C++ tests.

Best Regards and sorry for the regression!

  Andrea

gcc/testsuite/ChangeLog:

* gcc.target/arm/mve/intrinsics/vabavq_p_s16.c: Extern functions
as "C".
* gcc.target/arm/mve/intrinsics/vabavq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabavq_p_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabavq_p_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabavq_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabavq_p_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabavq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabavq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabavq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabavq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabavq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabavq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_x_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_x_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_x_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_x_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_x_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_x_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_x_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabdq_x_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_x_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_x_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_x_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_x_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vabsq_x_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddlvaq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddlvaq_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddlvaq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddlvaq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddlvq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddlvq_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddlvq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddlvq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddq_x_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_p_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_p_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_p_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_p_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvaq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_p_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_p_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_p_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_p_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vaddvq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpcsq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpeqq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgeq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpgtq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmphiq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpleq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpltq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcmpneq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcreateq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcreateq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcreateq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcreateq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcreateq_s64.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcreateq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcreateq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcreateq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcreateq_u64.c: Likewise.
* gcc.target/arm/mve/intrinsics/vcreateq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_m_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_m_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_m_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_x_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_x_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_x_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_x_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_x_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vddupq_x_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_x_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_x_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_x_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_x_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_x_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_x_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_x_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdupq_x_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_m_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_x_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vdwdupq_x_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vfmasq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vfmasq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhaddq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vhsubq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_m_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_m_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_m_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_x_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_x_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_x_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_x_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_x_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vidupq_x_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_m_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_m_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_m_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_x_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_x_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_x_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_x_wb_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_x_wb_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/viwdupq_x_wb_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxaq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxaq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxaq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxaq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxaq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxaq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxavq_p_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxavq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxavq_p_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxavq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxavq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxavq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmaq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmaq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmaq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmaq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmavq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmavq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmavq_p_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmavq_p_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmq_x_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmq_x_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmvq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmvq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmvq_p_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxnmvq_p_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_x_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_x_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_x_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_x_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_x_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxq_x_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_p_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_p_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_p_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_p_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmaxvq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminaq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminaq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminaq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminaq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminaq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminaq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminavq_p_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminavq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminavq_p_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminavq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminavq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminavq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmaq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmaq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmaq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmaq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmavq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmavq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmavq_p_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmavq_p_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmq_x_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmq_x_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmvq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmvq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmvq_p_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminnmvq_p_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_x_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_x_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_x_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_x_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_x_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminq_x_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_p_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_p_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_p_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_p_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vminvq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_p_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_p_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_p_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_p_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmladavaq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlaldavaxq_p_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlaldavaxq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlaldavaxq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlaldavaxq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmlasq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vmulq_x_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqaddq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmlahq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmlahq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmlahq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulhq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmullbq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmullbq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmullbq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmullbq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmullbq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmullbq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmullbq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmullbq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulltq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulltq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulltq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulltq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulltq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulltq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulltq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqdmulltq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqrdmlahq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqrdmlahq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqrdmlahq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqrdmlahq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqrdmlahq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqrdmlahq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqrdmlashq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqrdmlashq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqrdmlashq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vqsubq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrmlaldavhaq_p_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrmlaldavhaq_p_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrmlaldavhaq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrmlaldavhaq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_x_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_x_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_x_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_x_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_x_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vrshlq_x_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_m_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_n_f16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_n_f32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_n_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_n_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_n_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_n_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_n_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_n_u8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_s16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_s32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_s8.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_u16.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_u32.c: Likewise.
* gcc.target/arm/mve/intrinsics/vsubq_x_u8.c: Likewise.

17 months agorange-op-float: Fix up frange_arithmetic [PR107967]
Jakub Jelinek [Thu, 8 Dec 2022 09:34:26 +0000 (10:34 +0100)] 
range-op-float: Fix up frange_arithmetic [PR107967]

The addition of PLUS/MINUS/MULT/RDIV_EXPR frange handlers causes
miscompilation of some of the libm routines, resulting in lots of
glibc test failures.  A part of them is purely PR107608 fold-overflow-1.c
etc. issues, say when the code does
  return -0.5 / 0.0;
and expects division by zero to be emitted, but we propagate -Inf
and avoid the operation.
But there are also various tests where we end up with different computed
value from the expected ones.  All those cases are like:
 is:          inf   inf
 should be:   1.18973149535723176502e+4932   0xf.fffffffffffffff0p+16380
 is:          inf   inf
 should be:   1.18973149535723176508575932662800701e+4932   0x1.ffffffffffffffffffffffffffffp+16383
 is:          inf   inf
 should be:   1.7976931348623157e+308   0x1.fffffffffffffp+1023
 is:          inf   inf
 should be:   3.40282346e+38   0x1.fffffep+127
and the corresponding source looks like:
static const double huge = 1.0e+300;
double whatever (...) {
...
  return huge * huge;
...
}
which for rounding to nearest or +inf should and does return +inf, but
for rounding to -inf or 0 should instead return nextafter (inf, -inf);
The rules IEEE754 has are that operations on +-Inf operands are exact
and produce +-Inf (except for the invalid ones that produce NaN) regardless
of rounding mode, while overflows:
"a) roundTiesToEven and roundTiesToAway carry all overflows to ∞ with the
sign of the intermediate result.
b) roundTowardZero carries all overflows to the format’s largest finite
number with the sign of the intermediate result.
c) roundTowardNegative carries positive overflows to the format’s largest
finite number, and carries negative overflows to −∞.
d) roundTowardPositive carries negative overflows to the format’s most
negative finite number, and carries positive overflows to +∞."

The behavior around overflows to -Inf or nextafter (-inf, inf) was actually
handled correctly, we'd construct [-INF, -MAX] ranges in those cases
because !real_less (&value, &result) in that case - value is finite
but larger in magnitude than what the format can represent (but GCC
internal's format can), while result is -INF in that case.
But for the overflows to +Inf or nextafter (inf, -inf) was handled
incorrectly, it tested real_less (&result, &value) rather than
!real_less (&result, &value), the former test is true when already the
rounding value -> result rounded down and in that case we shouldn't
round again, we should round down when it didn't.

So, in theory this could be fixed just by adding one ! character,
-  if ((mode_composite || (real_isneg (&inf) ? real_less (&result, &value)
+  if ((mode_composite || (real_isneg (&inf) ? !real_less (&result, &value)
                          : !real_less (&value, &result)))
but the following patch goes further.  The distance between
nextafter (inf, -inf) and inf is large (infinite) and expressions like
1.0e+300 * 1.0e+300 always produce +inf in round to nearest mode by far,
so I think having low bound of nextafter (inf, -inf) in that case is
unnecessary.  But if it isn't multiplication but say addition and we are
inexact and very close to the boundary between rounding to nearest
maximum representable vs. rounding to nearest +inf, still using [MAX, +INF]
etc. ranges seems safer because we don't know exactly what we lost in the
inexact computation.

The following patch implements that.

2022-12-08  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/107967
* range-op-float.cc (frange_arithmetic): Fix a thinko - if
inf is negative, use nextafter if !real_less (&result, &value)
rather than if real_less (&result, &value).  If result is +-INF
while value is finite and -fno-rounding-math, don't do rounding
if !inexact or if result is significantly above max representable
value or below min representable value.

* gcc.dg/pr107967-1.c: New test.
* gcc.dg/pr107967-2.c: New test.
* gcc.dg/pr107967-3.c: New test.

17 months agolibgcc: xtensa: remove stray symbols from X*HAL macro definitions
Max Filippov [Thu, 8 Dec 2022 09:11:40 +0000 (01:11 -0800)] 
libgcc: xtensa: remove stray symbols from X*HAL macro definitions

libgcc/
* config/xtensa/xtensa-config-builtin.h (XCHAL_NUM_AREGS)
(XCHAL_ICACHE_SIZE, XCHAL_DCACHE_SIZE, XCHAL_ICACHE_LINESIZE)
(XCHAL_DCACHE_LINESIZE, XCHAL_MMU_MIN_PTE_PAGE_SIZE)
(XSHAL_ABI): Remove stray symbols from macro definitions.

17 months agolibbacktrace: support zstd decompression
Ian Lance Taylor [Thu, 8 Dec 2022 00:21:26 +0000 (16:21 -0800)] 
libbacktrace: support zstd decompression

Support decompressing --compress-debug-sections=zstd.
* configure.ac: Check for zstd library and
--compress-debug-sections=zstd linker option.
* Makefile.am (zstdtest_*): New targets.
(zstdtest_alloc_*, ctestzstd_*): New targets.
(BUILDTESTS): Add zstdtest, zstdtest_alloc, ctestzstd as
appropriate.
* elf.c (ELFCOMPRESS_ZSTD): Define.
(elf_fetch_bits): Rename from elf_zlib_fetch.  Update uses.
(elf_fetch_bits_backward): New static function.
(ZLIB_HUFFMAN_*): Rename from HUFFMAN_*.  Update uses.
(ZLIB_TABLE_*): Rename from ZDEBUG_TABLE_*.  Update uses.
(ZSTD_TABLE_*): Define.
(struct elf_zstd_fse_entry): Define.
(elf_zstd_read_fse): New static function.
(elf_zstd_build_fse): Likewise.
(lit): Define if BACKTRACE_GENERATE_ZSTD_FSE_TABLES.
(match, offset, next, print_table, main): Likewise.
(elf_zstd_lit_table): New static const array.
(elf_zstd_match_table, elf_zstd_offset_table): Likewise.
(elf_zstd_read_huff): New static function.
(struct elf_zstd_seq_decode): Define.
(elf_zstd_unpack_seq_decode): New static function.
(ZSTD_LIT_*): Define.
(struct elf_zstd_literals): Define.
(elf_zstd_literal_output): New static function.
(ZSTD_LITERAL_LENGTH_BASELINE_OFFSET): Define.
(elf_zstd_literal_length_baseline): New static const array.
(elf_zstd_literal_length_bits): Likewise.
(ZSTD_MATCH_LENGTH_BASELINE_OFFSET): Define.
(elf_zstd_match_length_baseline): New static const array.
(elf_zstd_match_length_bits): Likewise.
(elf_zstd_decompress): New static function.
(ZDEBUG_TABLE_SIZE): New definition.
(elf_uncompress_chdr): Support ELF_COMPRESS_ZSTD.
(backtrace_uncompress_zstd): New function.
(elf_add): Use ZLIB_TABLE_SIZE for zlib-gnu sections.
* internal.h (backtrace_uncompress_zstd): Declare.
* zstdtest.c: New file.
* configure, config.h.in, Makefile.in: Regenerate.

17 months agoDaily bump.
GCC Administrator [Thu, 8 Dec 2022 00:17:45 +0000 (00:17 +0000)] 
Daily bump.

17 months agoFortran: handle zero-sized arrays in ctors with typespec [PR108010]
Harald Anlauf [Wed, 7 Dec 2022 20:50:23 +0000 (21:50 +0100)] 
Fortran: handle zero-sized arrays in ctors with typespec [PR108010]

gcc/fortran/ChangeLog:

PR fortran/108010
* arith.cc (reduce_unary): Handle zero-sized arrays.
(reduce_binary_aa): Likewise.

gcc/testsuite/ChangeLog:

PR fortran/108010
* gfortran.dg/pr108010.f90: New test.

17 months agoc: Diagnose auto constexpr used with a type
Joseph Myers [Wed, 7 Dec 2022 22:08:18 +0000 (22:08 +0000)] 
c: Diagnose auto constexpr used with a type

The constraints on auto in C2x disallow use with other storage-class
specifiers unless the type is inferred from an initializer.  That
includes constexpr; add the missing checks for this case (the
combination of auto, constexpr and a type specifier).

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c/
* c-decl.cc (declspecs_add_type, declspecs_add_scspec): Check for
auto, constexpr and a type used together.

gcc/testsuite/
* gcc.dg/c2x-constexpr-1.c: Do not use auto, constexpr and a type
together.
* gcc.dg/c2x-constexpr-3.c: Add tests of auto, constexpr and type
used together.

17 months agolibstdc++: Pass error handler to libbacktrace functions
Jonathan Wakely [Wed, 30 Nov 2022 12:32:53 +0000 (12:32 +0000)] 
libstdc++: Pass error handler to libbacktrace functions

Also pass threaded=1 to __glibcxx_backtrace_create_state and remove some
of the namespace scope declarations in the header.

Co-authored-by: François Dumont <frs.dumont@gmail.com>
libstdc++-v3/ChangeLog:

* include/debug/formatter.h [_GLIBCXX_DEBUG_BACKTRACE]
(_Error_formatter::_Error_formatter): Pass error handler to
__glibcxx_backtrace_create_state. Pass 1 for threaded argument.
(_Error_formatter::_S_err): Define empty function.
* src/c++11/debug.cc (_Error_formatter::_M_error): Pass error
handler to __glibcxx_backtrace_full.