diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 7ad3a76..4e378d3 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -2101,7 +2101,7 @@ UNSPEC_ADDV))] "TARGET_SIMD" "add\\t%0, %1." - [(set_attr "type" "neon_reduc_add")] + [(set_attr "type" "neon__add")] ) (define_insn "aarch64_reduc_plus_internalv2si" @@ -2110,7 +2110,7 @@ UNSPEC_ADDV))] "TARGET_SIMD" "addp\\t%0.2s, %1.2s, %1.2s" - [(set_attr "type" "neon_reduc_add")] + [(set_attr "type" "neon_pairwise_add")] ) (define_insn "reduc_plus_scal_" @@ -4405,7 +4405,7 @@ UNSPEC_ADDP))] "TARGET_SIMD" "addp\t%0, %1, %2" - [(set_attr "type" "neon_reduc_add")] + [(set_attr "type" "neon_pairwise_add")] ) (define_insn "aarch64_addpdi" @@ -4415,7 +4415,7 @@ UNSPEC_ADDP))] "TARGET_SIMD" "addp\t%d0, %1.2d" - [(set_attr "type" "neon_reduc_add")] + [(set_attr "type" "neon_pairwise_add")] ) ;; sqrt diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index 1ddf6ad..41f2f4c 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -793,6 +793,12 @@ (V2SF "p") (V4SF "v") (V4HF "v") (V8HF "v")]) +(define_mode_attr reduc_pairwise [(V8QI "reduc") (V16QI "reduc") + (V4HI "reduc") (V8HI "reduc") + (V2SI "pairwise") (V4SI "reduc") + (V2DI "pairwise") (V2DF "pairwise") + (V2SF "pairwise") (V4SF "reduc")]) + (define_mode_attr vsi2qi [(V2SI "v8qi") (V4SI "v16qi")]) (define_mode_attr VSI2QI [(V2SI "V8QI") (V4SI "V16QI")]) diff --git a/gcc/config/aarch64/thunderx.md b/gcc/config/aarch64/thunderx.md index b67671d..95bfad4 100644 --- a/gcc/config/aarch64/thunderx.md +++ b/gcc/config/aarch64/thunderx.md @@ -266,7 +266,8 @@ (define_insn_reservation "thunderx_neon_add" 4 (and (eq_attr "tune" "thunderx") - (eq_attr "type" "neon_reduc_add, neon_reduc_minmax, neon_fp_reduc_add_s, \ + (eq_attr "type" "neon_reduc_add, neon_pairwise_add, neon_reduc_minmax,\ + neon_fp_reduc_add_s, \ neon_fp_reduc_add_d, neon_fp_to_int_s, neon_fp_to_int_d, \ neon_add_halve, neon_sub_halve, neon_qadd, neon_compare, \ neon_compare_zero, neon_minmax, neon_abd, neon_add, neon_sub, \ @@ -280,7 +281,8 @@ (define_insn_reservation "thunderx_neon_add_q" 5 (and (eq_attr "tune" "thunderx") - (eq_attr "type" "neon_reduc_add_q, neon_reduc_minmax_q, neon_fp_reduc_add_s_q, \ + (eq_attr "type" "neon_reduc_add_q, neon_pairwise_add_q,\ + neon_reduc_minmax_q, neon_fp_reduc_add_s_q, \ neon_fp_reduc_add_d_q, neon_fp_to_int_s_q, neon_fp_to_int_d_q, \ neon_add_halve_q, neon_sub_halve_q, neon_qadd_q, neon_compare_q, \ neon_compare_zero_q, neon_minmax_q, neon_abd_q, neon_add_q, neon_sub_q, \ diff --git a/gcc/config/aarch64/thunderx2t99.md b/gcc/config/aarch64/thunderx2t99.md index 0dd7199..eb5e02a 100644 --- a/gcc/config/aarch64/thunderx2t99.md +++ b/gcc/config/aarch64/thunderx2t99.md @@ -231,6 +231,7 @@ neon_abs,neon_abs_q,\ neon_add,neon_add_q,\ neon_neg,neon_neg_q,\ + neon_pairwise_add,neon_pairwise_add_q,\ neon_add_long,neon_add_widen,\ neon_add_halve,neon_add_halve_q,\ neon_sub_long,neon_sub_widen,\ diff --git a/gcc/config/arm/cortex-a15-neon.md b/gcc/config/arm/cortex-a15-neon.md index 73ee84c..e3731ea 100644 --- a/gcc/config/arm/cortex-a15-neon.md +++ b/gcc/config/arm/cortex-a15-neon.md @@ -48,6 +48,7 @@ (eq_attr "type" "neon_add, neon_add_q, neon_add_long,\ neon_add_widen, neon_neg, neon_neg_q,\ neon_reduc_add, neon_reduc_add_q,\ + neon_pairwise_add, neon_pairwise_add_q,\ neon_reduc_add_long, neon_sub, neon_sub_q,\ neon_sub_long, neon_sub_widen, neon_logic,\ neon_logic_q, neon_tst, neon_tst_q") diff --git a/gcc/config/arm/cortex-a17-neon.md b/gcc/config/arm/cortex-a17-neon.md index 29d08de..0eaf6fc 100644 --- a/gcc/config/arm/cortex-a17-neon.md +++ b/gcc/config/arm/cortex-a17-neon.md @@ -47,6 +47,7 @@ (eq_attr "type" "neon_add, neon_add_q, neon_add_long,\ neon_add_widen, neon_neg, neon_neg_q,\ neon_reduc_add, neon_reduc_add_q,\ + neon_pairwise_add, neon_pairwise_add_q,\ neon_reduc_add_long, neon_sub, neon_sub_q,\ neon_sub_long, neon_sub_widen, neon_logic,\ neon_logic_q, neon_tst, neon_tst_q") diff --git a/gcc/config/arm/cortex-a53.md b/gcc/config/arm/cortex-a53.md index 7cf5fc5..0b6ea6b 100644 --- a/gcc/config/arm/cortex-a53.md +++ b/gcc/config/arm/cortex-a53.md @@ -301,7 +301,7 @@ neon_sub_halve, neon_abs, neon_neg, neon_qneg,\ neon_qabs, neon_abd, neon_minmax, neon_compare,\ neon_compare_zero, neon_arith_acc, neon_reduc_add,\ - neon_reduc_add_acc, neon_reduc_minmax,\ + neon_pairwise_add, neon_reduc_add_acc, neon_reduc_minmax,\ neon_logic, neon_tst, neon_shift_imm,\ neon_shift_reg, neon_shift_acc, neon_sat_shift_imm,\ neon_sat_shift_reg, neon_ins, neon_move,\ @@ -330,7 +330,7 @@ neon_abs_q, neon_neg_q, neon_qneg_q, neon_qabs_q,\ neon_abd_q, neon_abd_long, neon_minmax_q,\ neon_compare_q, neon_compare_zero_q,\ - neon_arith_acc_q, neon_reduc_add_q,\ + neon_arith_acc_q, neon_reduc_add_q, neon_pairwise_add_q,\ neon_reduc_add_long, neon_reduc_add_acc_q,\ neon_reduc_minmax_q, neon_logic_q, neon_tst_q,\ neon_shift_imm_q, neon_shift_imm_narrow_q,\ diff --git a/gcc/config/arm/cortex-a57.md b/gcc/config/arm/cortex-a57.md index fd30758..9709725 100644 --- a/gcc/config/arm/cortex-a57.md +++ b/gcc/config/arm/cortex-a57.md @@ -50,6 +50,7 @@ (eq_attr "type" "neon_add, neon_add_q, neon_add_long,\ neon_add_widen, neon_neg, neon_neg_q,\ neon_reduc_add, neon_reduc_add_q,\ + neon_pairwise_add, neon_pairwise_add_q,\ neon_reduc_add_long, neon_sub, neon_sub_q,\ neon_sub_long, neon_sub_widen, neon_logic,\ neon_logic_q, neon_tst, neon_tst_q") diff --git a/gcc/config/arm/cortex-a8-neon.md b/gcc/config/arm/cortex-a8-neon.md index baa9180..5046370 100644 --- a/gcc/config/arm/cortex-a8-neon.md +++ b/gcc/config/arm/cortex-a8-neon.md @@ -51,6 +51,7 @@ (const_string "neon_int_2") (eq_attr "type" "neon_neg, neon_neg_q,\ neon_reduc_add, neon_reduc_add_q,\ + neon_pairwise_add, neon_pairwise_add_q,\ neon_reduc_add_long,\ neon_add_long, neon_sub_long") (const_string "neon_int_3") diff --git a/gcc/config/arm/cortex-a9-neon.md b/gcc/config/arm/cortex-a9-neon.md index 9e9827f..022b7f6 100644 --- a/gcc/config/arm/cortex-a9-neon.md +++ b/gcc/config/arm/cortex-a9-neon.md @@ -52,6 +52,7 @@ (const_string "neon_int_2") (eq_attr "type" "neon_neg, neon_neg_q,\ neon_reduc_add, neon_reduc_add_q,\ + neon_pairwise_add, neon_pairwise_add_q,\ neon_reduc_add_long,\ neon_add_long, neon_sub_long") (const_string "neon_int_3") diff --git a/gcc/config/arm/exynos-m1.md b/gcc/config/arm/exynos-m1.md index 5d397cc..1bb14c9 100644 --- a/gcc/config/arm/exynos-m1.md +++ b/gcc/config/arm/exynos-m1.md @@ -55,6 +55,7 @@ (eq_attr "type" "neon_add_widen, neon_arith_acc, neon_arith_acc_q,\ neon_reduc_add, neon_reduc_add_q,\ + neon_pairwise_add, neon_pairwise_add_q,\ neon_reduc_add_acc, neon_reduc_add_acc_q,\ neon_reduc_add_long, neon_add_halve_narrow_q,\ neon_add_halve, neon_add_halve_q,\ diff --git a/gcc/config/arm/types.md b/gcc/config/arm/types.md index b0b375c..193f926 100644 --- a/gcc/config/arm/types.md +++ b/gcc/config/arm/types.md @@ -274,6 +274,8 @@ ; neon_reduc_add_long ; neon_reduc_add_acc ; neon_reduc_add_acc_q +; neon_pairwise_add +; neon_pairwise_add_q ; neon_reduc_minmax ; neon_reduc_minmax_q ; neon_logic @@ -787,6 +789,8 @@ neon_reduc_add_long,\ neon_reduc_add_acc,\ neon_reduc_add_acc_q,\ + neon_pairwise_add,\ + neon_pairwise_add_q,\ neon_reduc_minmax,\ neon_reduc_minmax_q,\ neon_logic,\ @@ -1114,6 +1118,7 @@ neon_compare_q, neon_compare_zero, neon_compare_zero_q,\ neon_arith_acc, neon_arith_acc_q, neon_reduc_add,\ neon_reduc_add_q, neon_reduc_add_long, neon_reduc_add_acc,\ + neon_pairwise_add, neon_pairwise_add_q,\ neon_reduc_add_acc_q, neon_reduc_minmax, neon_reduc_minmax_q,\ neon_logic, neon_logic_q, neon_tst, neon_tst_q,\ neon_shift_imm, neon_shift_imm_q, neon_shift_imm_narrow_q,\ diff --git a/gcc/config/arm/xgene1.md b/gcc/config/arm/xgene1.md index 62a0732..1569dc6 100644 --- a/gcc/config/arm/xgene1.md +++ b/gcc/config/arm/xgene1.md @@ -288,6 +288,8 @@ neon_arith_acc_q,\ neon_reduc_add,\ neon_reduc_add_q,\ + neon_pairwise_add,\ + neon_pairwise_add_q,\ neon_add_halve,\ neon_add_halve_q,\ neon_sub_halve,\