diff options
Diffstat (limited to 'gcc')
24 files changed, 235 insertions, 80 deletions
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 61a53f5..5704bf1 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -630,7 +630,8 @@ package body Sem_Ch4 is begin while Present (Discr) loop - Append (Discriminant_Default_Value (Discr), Constr); + Append_To (Constr, + New_Copy_Tree (Discriminant_Default_Value (Discr))); Next_Discriminant (Discr); end loop; diff --git a/gcc/config/riscv/autovec-opt.md b/gcc/config/riscv/autovec-opt.md index a5eb49c..d5950eb 100644 --- a/gcc/config/riscv/autovec-opt.md +++ b/gcc/config/riscv/autovec-opt.md @@ -1911,6 +1911,26 @@ } [(set_attr "type" "viwalu")]) +(define_insn_and_split "*widen_waddu_wx_<mode>" + [(set (match_operand:VWEXTI_D 0 "register_operand") + (any_widen_binop:VWEXTI_D + (vec_duplicate:VWEXTI_D + (any_extend:<VEL> + (match_operand:<VSUBEL> 2 "register_operand"))) + (match_operand:VWEXTI_D 1 "register_operand")))] + "TARGET_VECTOR && TARGET_64BIT && can_create_pseudo_p ()" + "#" + "&& 1" + [(const_int 0)] + { + insn_code icode = code_for_pred_single_widen_scalar (PLUS, ZERO_EXTEND, + <MODE>mode); + riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP, operands); + + DONE; + } + [(set_attr "type" "viwalu")]) + ;; ============================================================================= ;; Combine vec_duplicate + op.vv to op.vf ;; Include diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index 8d7fc06..09d16db 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -3882,7 +3882,7 @@ check_module_override (tree decl, tree mvec, bool hiding, } } - if (TREE_PUBLIC (scope) && TREE_PUBLIC (STRIP_TEMPLATE (decl)) + if (TREE_PUBLIC (scope) /* Namespaces are dealt with specially in make_namespace_finish. */ && !(TREE_CODE (decl) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (decl))) @@ -8597,6 +8597,12 @@ pushtag (tree name, tree type, TAG_how how) } else { + /* If an import is going to provide a definition for this tag, + load it now so that we don't get confused later when processing + this tag's definition. */ + if (modules_p ()) + lazy_load_pendings (decl); + decl = do_pushdecl_with_scope (decl, b, /*hiding=*/(how == TAG_how::HIDDEN_FRIEND)); if (decl == error_mark_node) diff --git a/gcc/match.pd b/gcc/match.pd index 6f896aa..60bdd33 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -3620,6 +3620,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) /* Saturation mult for unsigned integer. */ (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type)) + (for mult_op (mult widen_mult) (match (unsigned_integer_sat_mul @0 @1) /* SAT_U_MUL (X, Y) = { WT x = (WT)a * (WT)b; @@ -3630,9 +3631,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) return (T)x; } while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t. */ - (convert (min (widen_mult:c@3 (convert@4 @0) - (convert@5 @1)) - INTEGER_CST@2)) + (convert (min (mult_op:c@3 (convert@4 @0) (convert@5 @1)) INTEGER_CST@2)) (if (types_match (type, @0, @1)) (with { @@ -3640,24 +3639,16 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3)); unsigned cvt4_prec = TYPE_PRECISION (TREE_TYPE (@4)); unsigned cvt5_prec = TYPE_PRECISION (TREE_TYPE (@5)); - wide_int c2 = wi::to_wide (@2); - wide_int max = wi::mask (prec, false, widen_prec); - bool c2_is_max_p = wi::eq_p (c2, max); - bool widen_mult_p = cvt4_prec == cvt5_prec && widen_prec == cvt5_prec * 2; - } - (if (widen_prec > prec && c2_is_max_p && widen_mult_p))))) - (match (unsigned_integer_sat_mul @0 @1) - (convert (min (mult:c@3 (convert @0) (convert @1)) INTEGER_CST@2)) - (if (types_match (type, @0, @1)) - (with - { - unsigned prec = TYPE_PRECISION (type); - unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3)); - wide_int c2 = wi::to_wide (@2); + wide_int max = wi::mask (prec, false, widen_prec); - bool c2_is_max_p = wi::eq_p (c2, max); + bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max); + + bool widen_mult_p = mult_op == WIDEN_MULT_EXPR && cvt4_prec == cvt5_prec + && widen_prec == cvt5_prec * 2 && widen_prec > prec; + bool mult_p = mult_op == MULT_EXPR && cvt4_prec == cvt5_prec + && cvt4_prec == widen_prec && widen_prec > prec; } - (if (widen_prec > prec && c2_is_max_p))))) + (if (c2_is_max_p && (widen_mult_p || mult_p))))))) (match (unsigned_integer_sat_mul @0 @1) /* SAT_U_MUL (X, Y) = { T result; diff --git a/gcc/testsuite/g++.dg/modules/namespace-1_c.C b/gcc/testsuite/g++.dg/modules/namespace-1_c.C index 748ef5d..e4f81b6 100644 --- a/gcc/testsuite/g++.dg/modules/namespace-1_c.C +++ b/gcc/testsuite/g++.dg/modules/namespace-1_c.C @@ -1,13 +1,7 @@ // { dg-additional-options "-fmodules-ts" } -// The indirect import of frob, with namespaces impl and ompl doesn't -// affect us. -static int impl; -import Frink; -static int ompl; +static int impl; // IF but no diagnostic required: impl@Frob not reachable from here + +import Frink; -void corge (int x) -{ - impl = x; - ompl = frab (x); -} +static int ompl; // { dg-error "different kind" } diff --git a/gcc/testsuite/g++.dg/modules/namespace-2_b.C b/gcc/testsuite/g++.dg/modules/namespace-2_b.C index 6ab5113..d71c630 100644 --- a/gcc/testsuite/g++.dg/modules/namespace-2_b.C +++ b/gcc/testsuite/g++.dg/modules/namespace-2_b.C @@ -2,16 +2,5 @@ import foo; -static int also_not_exported; // ok - -void X () -{ - implicit_export::bob (); -} - +static int also_not_exported; // { dg-error "different kind" } static int implicit_export; // { dg-error "different kind" } - -void Y () -{ - also_not_exported = 1; -} diff --git a/gcc/testsuite/g++.dg/modules/namespace-3_a.C b/gcc/testsuite/g++.dg/modules/namespace-3_a.C deleted file mode 100644 index 8e9508d..0000000 --- a/gcc/testsuite/g++.dg/modules/namespace-3_a.C +++ /dev/null @@ -1,21 +0,0 @@ -// Check namespace needed only by internal reference is not made visible -// { dg-additional-options "-fmodules-ts" } - -export module frob; -// { dg-module-cmi frob } - -namespace silent -{ - namespace inner - { - static int X () - { - return 1; - } - } -} - -export int f (int y) -{ - return y + silent::inner::X (); -} diff --git a/gcc/testsuite/g++.dg/modules/namespace-3_b.C b/gcc/testsuite/g++.dg/modules/namespace-3_b.C deleted file mode 100644 index f779ffe..0000000 --- a/gcc/testsuite/g++.dg/modules/namespace-3_b.C +++ /dev/null @@ -1,12 +0,0 @@ -// { dg-additional-options "-fmodules-ts" } - -import frob; - -int x = silent; // { dg-error "not declared" } - -static int silent; - -int user () -{ - return f (silent); -} diff --git a/gcc/testsuite/g++.dg/modules/pr122053_a.C b/gcc/testsuite/g++.dg/modules/pr122053_a.C new file mode 100644 index 0000000..2a8748c --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr122053_a.C @@ -0,0 +1,10 @@ +// PR c++/122053 +// { dg-additional-options "-fmodules -Wno-global-module" } +// { dg-module-cmi M } + +module; +struct mytime { + long a, b; +}; +export module M; +export mytime foo(); diff --git a/gcc/testsuite/g++.dg/modules/pr122053_b.C b/gcc/testsuite/g++.dg/modules/pr122053_b.C new file mode 100644 index 0000000..a7084b74 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr122053_b.C @@ -0,0 +1,9 @@ +// PR c++/122053 +// { dg-additional-options "-fmodules" } +// Test we don't ICE when redefining a type coming from an import. + +import M; +struct mytime { // { dg-bogus "conflicting" "PR99000" { xfail *-*-* } } + long a, b; +}; +mytime m = foo(); // { dg-bogus "" "PR99000" { xfail *-*-* } } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c index c86461b..76ef2d3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c @@ -12,7 +12,7 @@ TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) -/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vadd.vx} 2 } } */ /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vand.vx} 1 } } */ @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c index 90de197..55fa57d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c @@ -12,7 +12,7 @@ TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) -/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vadd.vx} 2 } } */ /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vand.vx} 1 } } */ @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c index 522ddd1..d517683 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c @@ -35,3 +35,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-times {vwaddu.vx} 1 } } */ /* { dg-final { scan-assembler-times {vwsubu.vx} 1 } } */ /* { dg-final { scan-assembler-times {vwmulu.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vwaddu.wx} 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c index 6ea17bb..a234505 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c index 8b8fba5..a46c874 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c index 6f66de9..94ce774 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c index cd129f1..a1278ce 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c index 48aeed7..910fa6e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c index b88c350..9ce0211 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c @@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vwaddu.vx} } } */ /* { dg-final { scan-assembler-not {vwsubu.vx} } } */ /* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h index 998c0596..03fba3c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h @@ -28,9 +28,27 @@ test_vx_widen_binary_##NAME##_##WT##_##NT##_case_0 (WT * restrict vd, \ #define RUN_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \ RUN_VX_WIDEN_BINARY_CASE_0(WT, NT, NAME, vd, vs2, rs1, n) +#define DEF_VX_WIDEN_BINARY_CASE_1(WT, NT, OP, NAME) \ +void \ +test_vx_widen_binary_##NAME##_##WT##_##NT##_case_1 (WT * restrict vd, \ + WT * restrict vs2, \ + NT rs1, unsigned n) \ +{ \ + for (unsigned i = 0; i < n; i++) \ + vd[i] = vs2[i] OP (WT)rs1; \ +} + +#define DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, OP, NAME) \ + DEF_VX_WIDEN_BINARY_CASE_1(WT, NT, OP, NAME) +#define RUN_VX_WIDEN_BINARY_CASE_1(WT, NT, NAME, vd, vs2, rs1, n) \ + test_vx_widen_binary_##NAME##_##WT##_##NT##_case_1(vd, vs2, rs1, n) +#define RUN_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \ + RUN_VX_WIDEN_BINARY_CASE_1(WT, NT, NAME, vd, vs2, rs1, n) + #define TEST_WIDEN_BINARY_VX_UNSIGNED(WT, NT) \ DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, +, add) \ DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, -, sub) \ DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, *, mul) \ + DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, +, add) \ #endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h index 5b49083..faf46a8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h @@ -4,7 +4,7 @@ #define N 16 #define DEF_BINARY_WIDEN_STRUCT_0_NAME(WT, NT, NAME) \ - binary_widen_##WT##_##NT##_##NAME##_s + binary_widen_##WT##_##NT##_##NAME##_s_0 #define DEF_BINARY_WIDEN_STRUCT_0_NAME_WRAP(WT, NT, NAME) \ DEF_BINARY_WIDEN_STRUCT_0_NAME(WT, NT, NAME) @@ -14,7 +14,7 @@ DEF_BINARY_WIDEN_STRUCT_0_TYPE(WT, NT, NAME) #define DEF_BINARY_WIDEN_STRUCT_0_VAR(WT, NT, NAME) \ - binary_widen_##WT##_##NT##_##NAME##_data + binary_widen_##WT##_##NT##_##NAME##_data_0 #define DEF_BINARY_WIDEN_STRUCT_0_VAR_WRAP(WT, NT, NAME) \ DEF_BINARY_WIDEN_STRUCT_0_VAR(WT, NT, NAME) @@ -24,6 +24,27 @@ #define DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(WT, NT, NAME) \ DEF_BINARY_WIDEN_STRUCT_0_DECL(WT, NT, NAME) +#define DEF_BINARY_WIDEN_STRUCT_1_NAME(WT, NT, NAME) \ + binary_widen_##WT##_##NT##_##NAME##_s_1 +#define DEF_BINARY_WIDEN_STRUCT_1_NAME_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_NAME(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_1_TYPE(WT, NT, NAME) \ + struct DEF_BINARY_WIDEN_STRUCT_1_NAME_WRAP(WT, NT, NAME) +#define DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_TYPE(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_1_VAR(WT, NT, NAME) \ + binary_widen_##WT##_##NT##_##NAME##_data_1 +#define DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_VAR(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_1_DECL(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME) +#define DEF_BINARY_WIDEN_STRUCT_1_DECL_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_DECL(WT, NT, NAME) + #define DEF_BINARY_WIDEN_STRUCT_0(WT, NT, NAME) \ DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME) \ { \ @@ -39,6 +60,19 @@ DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, add) DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, sub) DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, mul) +#define DEF_BINARY_WIDEN_STRUCT_1(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \ + { \ + WT vs2[N]; \ + NT rs1; \ + WT expect[N]; \ + WT vd[N]; \ + }; +#define DEF_BINARY_WIDEN_STRUCT_1_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1(WT, NT, NAME) + +DEF_BINARY_WIDEN_STRUCT_1_WRAP(uint64_t, uint32_t, add) + DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, add)[] = { { /* vs2 */ @@ -156,4 +190,43 @@ DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, mul)[] = { }, }; +DEF_BINARY_WIDEN_STRUCT_1_DECL_WRAP(uint64_t, uint32_t, add)[] = { + { + /* vs2 */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 2147483647, 2147483647, 2147483647, 2147483647, + 2147483649, 2147483649, 2147483649, 2147483649, + }, + /* rs1 */ + 2147483647, + /* expect */ + { + 2147483648, 2147483648, 2147483648, 2147483648, + 2147483647, 2147483647, 2147483647, 2147483647, + 4294967294, 4294967294, 4294967294, 4294967294, + 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull, + }, + }, + { + /* vs2 */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull, + 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull, + }, + /* rs1 */ + 4294967295, + /* expect */ + { + 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull, + 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull, + 8589934590ull, 8589934590ull, 8589934590ull, 8589934590ull, + 8589934591ull, 8589934591ull, 8589934591ull, 8589934591ull, + }, + }, +}; + #endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h new file mode 100644 index 0000000..6edd486 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h @@ -0,0 +1,27 @@ +#ifndef HAVE_DEFINED_WX_WIDEN_RUN_H +#define HAVE_DEFINED_WX_WIDEN_RUN_H + +int +main () +{ + unsigned i, k; + + for (i = 0; i < sizeof (TEST_DATA) / sizeof (TEST_DATA[0]); i++) + { + DATA_TYPE *data = &TEST_DATA[i]; + WT *vs2 = data->vs2; + NT rs1 = data->rs1; + WT *expect = data->expect; + WT *vd = data->vd; + + TEST_RUN (WT, NT, NAME, vd, vs2, rs1, N); + + for (k = 0; k < N; k++) + if (vd[k] != expect[k]) + __builtin_abort (); + } + + return 0; +} + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c new file mode 100644 index 0000000..fe0ea7c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c @@ -0,0 +1,18 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */ + +#include "vx_widen.h" +#include "vx_widen_data.h" + +#define WT uint64_t +#define NT uint32_t +#define NAME add +#define TEST_DATA DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME) +#define DATA_TYPE DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) + +DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, +, NAME) + +#define TEST_RUN(WT, NT, NAME, vd, vs2, rs1, N) \ + RUN_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, NAME, vd, vs2, rs1, N) + +#include "vx_widen_wx_run.h" diff --git a/gcc/testsuite/gnat.dg/allocator3.adb b/gcc/testsuite/gnat.dg/allocator3.adb new file mode 100644 index 0000000..ac04344 --- /dev/null +++ b/gcc/testsuite/gnat.dg/allocator3.adb @@ -0,0 +1,23 @@ +-- { dg-do compile } + +with Ada.Containers.Synchronized_Queue_Interfaces; +with Ada.Containers.Unbounded_Synchronized_Queues; + +procedure Allocator3 is + + package Queue_Interfaces is + new Ada.Containers.Synchronized_Queue_Interfaces (Integer); + + package Synchronized_Queues is + new Ada.Containers.Unbounded_Synchronized_Queues (Queue_Interfaces); + + subtype Queue is Synchronized_Queues.Queue; + + type Access_Type is access all Queue; + + Q1 : Access_Type := new Queue; + Q2 : Access_Type := new Queue; + +begin + null; +end; |