[gcc(refs/users/wschmidt/heads/builtins8)] rs6000: **split me and squash me**
William Schmidt
wschmidt@gcc.gnu.org
Wed Mar 24 15:40:36 GMT 2021
https://gcc.gnu.org/g:1c997f93dde8800ebf06862dcc8b2ebf574e035e
commit 1c997f93dde8800ebf06862dcc8b2ebf574e035e
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date: Tue Mar 9 13:37:28 2021 -0600
rs6000: **split me and squash me**
2021-03-09 Bill Schmidt <wschmidt@linux.ibm.com>
gcc/
* config/rs6000/rs6000-builtin-new.def (BCDSUB_GE_V1TI): New.
(BCDSUB_GE_V16QI): New.
(BCDSUB_LE_V1TI): New.
(BCDSUB_LE_V16QI): New.
(DENB2DFP_V16QI): Fix arguments.
(ASSEMBLE_PAIR_V): New.
(ASSEMBLE_PAIR_V_INTERNAL): New.
(DISASSEMBLE_PAIR_V): New.
(DISASSEMBLE_PAIR_V_INTERNAL): New.
* config/rs6000/rs6000-call.c
(rs6000_gimple_fold_new_mma_builtin): Handle compatibility
builtins.
* config/rs6000/rs6000-overload.def (BCDSUB_GE): New stanza.
(BCDSUB_LE): Likewise.
gcc/testsuite/
* gcc.target/powerpc/fold-vec-splat-misc-invalid.c: Remove
duplicated line.
Diff:
---
gcc/config/rs6000/rs6000-builtin-new.def | 26 +++++++++++++++++++++-
gcc/config/rs6000/rs6000-call.c | 14 +++++++++---
gcc/config/rs6000/rs6000-overload.def | 12 ++++++++++
.../powerpc/fold-vec-splat-misc-invalid.c | 1 -
4 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def
index 4fa1e80ea54..2398d84f3d7 100644
--- a/gcc/config/rs6000/rs6000-builtin-new.def
+++ b/gcc/config/rs6000/rs6000-builtin-new.def
@@ -2389,12 +2389,24 @@
const signed int __builtin_bcdsub_eq_v16qi (vuc, vuc, const int<1>);
BCDSUB_EQ_V16QI bcdsub_eq_v16qi {}
+ const signed int __builtin_bcdsub_ge_v1ti (vsq, vsq, const int<1>);
+ BCDSUB_GE_V1TI bcdsub_ge_v1ti {}
+
+ const signed int __builtin_bcdsub_ge_v16qi (vuc, vuc, const int<1>);
+ BCDSUB_GE_V16QI bcdsub_ge_v16qi {}
+
const signed int __builtin_bcdsub_gt_v1ti (vsq, vsq, const int<1>);
BCDSUB_GT_V1TI bcdsub_gt_v1ti {}
const signed int __builtin_bcdsub_gt_v16qi (vuc, vuc, const int<1>);
BCDSUB_GT_V16QI bcdsub_gt_v16qi {}
+ const signed int __builtin_bcdsub_le_v1ti (vsq, vsq, const int<1>);
+ BCDSUB_LE_V1TI bcdsub_le_v1ti {}
+
+ const signed int __builtin_bcdsub_le_v16qi (vuc, vuc, const int<1>);
+ BCDSUB_LE_V16QI bcdsub_le_v16qi {}
+
const signed int __builtin_bcdsub_lt_v1ti (vsq, vsq, const int<1>);
BCDSUB_LT_V1TI bcdsub_lt_v1ti {}
@@ -2903,7 +2915,7 @@
const _Decimal128 __builtin_denbcdq (const int<1>, _Decimal128);
DENBCDQ dfp_denbcd_td {}
- const _Decimal128 __builtin_denb2dfp_v16qi (const int<1>, vuc);
+ const _Decimal128 __builtin_denb2dfp_v16qi (vuc);
DENB2DFP_V16QI dfp_denbcd_v16qi {}
const _Decimal64 __builtin_diex (signed long long, _Decimal64);
@@ -3866,3 +3878,15 @@
v512 __builtin_mma_xxsetaccz_internal ();
XXSETACCZ_INTERNAL mma_xxsetaccz {mma}
+
+ void __builtin_vsx_assemble_pair (v256 *, vuc, vuc);
+ ASSEMBLE_PAIR_V nothing {mma}
+
+ v256 __builtin_vsx_assemble_pair_internal (vuc, vuc);
+ ASSEMBLE_PAIR_V_INTERNAL vsx_assemble_pair {mma}
+
+ void __builtin_vsx_disassemble_pair (void *, v256 *);
+ DISASSEMBLE_PAIR_V nothing {mma,pair}
+
+ vuc __builtin_vsx_disassemble_pair_internal (v256, const int<2>);
+ DISASSEMBLE_PAIR_V_INTERNAL vsx_disassemble_pair {mma}
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index 8afcd1e9429..7e058bc5aad 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -13160,8 +13160,16 @@ rs6000_gimple_fold_new_mma_builtin (gimple_stmt_iterator *gsi,
gimple *new_call;
tree new_decl;
+ /* Compatibility built-ins; we used to call these
+ __builtin_mma_{dis,}assemble_pair, but now we call them
+ __builtin_vsx_{dis,}assemble_pair. Handle the old verions. */
+ if (fncode == RS6000_BIF_ASSEMBLE_PAIR)
+ fncode = RS6000_BIF_ASSEMBLE_PAIR_V;
+ else if (fncode == RS6000_BIF_DISASSEMBLE_PAIR)
+ fncode = RS6000_BIF_DISASSEMBLE_PAIR_V;
+
if (fncode == RS6000_BIF_DISASSEMBLE_ACC
- || fncode == RS6000_BIF_DISASSEMBLE_PAIR)
+ || fncode == RS6000_BIF_DISASSEMBLE_PAIR_V)
{
/* This is an MMA disassemble built-in function. */
push_gimplify_context (true);
@@ -13176,7 +13184,7 @@ rs6000_gimple_fold_new_mma_builtin (gimple_stmt_iterator *gsi,
another accumulator/pair, then just copy the entire thing as is. */
if ((fncode == RS6000_BIF_DISASSEMBLE_ACC
&& TREE_TYPE (TREE_TYPE (dst_ptr)) == vector_quad_type_node)
- || (fncode == RS6000_BIF_DISASSEMBLE_PAIR
+ || (fncode == RS6000_BIF_DISASSEMBLE_PAIR_V
&& TREE_TYPE (TREE_TYPE (dst_ptr)) == vector_pair_type_node))
{
tree dst = build_simple_mem_ref (build1 (VIEW_CONVERT_EXPR,
@@ -13279,7 +13287,7 @@ rs6000_gimple_fold_new_mma_builtin (gimple_stmt_iterator *gsi,
gcc_unreachable ();
}
- if (fncode == RS6000_BIF_ASSEMBLE_PAIR)
+ if (fncode == RS6000_BIF_ASSEMBLE_PAIR_V)
lhs = make_ssa_name (vector_pair_type_node);
else
lhs = make_ssa_name (vector_quad_type_node);
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index ec7211ed7ab..4740d4fd155 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -130,12 +130,24 @@
signed int __builtin_vec_bcdsub_eq (vuc, vuc, const int);
BCDSUB_EQ_V16QI
+[BCDSUB_GE, __builtin_bcdsub_ge, __builtin_vec_bcdsub_ge]
+ signed int __builtin_vec_bcdsub_ge (vsq, vsq, const int);
+ BCDSUB_GE_V1TI
+ signed int __builtin_vec_bcdsub_ge (vuc, vuc, const int);
+ BCDSUB_GE_V16QI
+
[BCDSUB_GT, __builtin_bcdsub_gt, __builtin_vec_bcdsub_gt]
signed int __builtin_vec_bcdsub_gt (vsq, vsq, const int);
BCDSUB_GT_V1TI
signed int __builtin_vec_bcdsub_gt (vuc, vuc, const int);
BCDSUB_GT_V16QI
+[BCDSUB_LE, __builtin_bcdsub_le, __builtin_vec_bcdsub_le]
+ signed int __builtin_vec_bcdsub_le (vsq, vsq, const int);
+ BCDSUB_LE_V1TI
+ signed int __builtin_vec_bcdsub_le (vuc, vuc, const int);
+ BCDSUB_LE_V16QI
+
[BCDSUB_LT, __builtin_bcdsub_lt, __builtin_vec_bcdsub_lt]
signed int __builtin_vec_bcdsub_lt (vsq, vsq, const int);
BCDSUB_LT_V1TI
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
index ed64ddac977..263a1723d31 100644
--- a/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
@@ -17,7 +17,6 @@ vector unsigned short
testss_2 (signed int si)
{
return vec_splat_u16 (si);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
- return vec_splat_u16 (si);/* { dg-error "argument 1 must be a literal between -16 and 15, inclusive" } */
}
vector signed char
More information about the Gcc-cvs
mailing list