Add support for __builtin_bswap128
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 27 May 2020 22:31:15 +0000 (00:31 +0200)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 27 May 2020 22:33:04 +0000 (00:33 +0200)
commitfe7ebef7fe4f9acb79658ed9db0749b07efc3105
tree073db78f4f756d2542b1bd961c0eb9030a016d22
parentbbaec68c86f8e89a3460cc022c75d4c4179bfb0a
Add support for __builtin_bswap128

This patch introduces a new builtin named __builtin_bswap128 on targets
where TImode is supported, i.e. 64-bit targets only in practice.  The
implementation simply reuses the existing double word path in optab, so
no routine is added to libgcc (which means that you get two calls to
_bswapdi2 in the worst case).

gcc/ChangeLog:

* builtin-types.def (BT_UINT128): New primitive type.
(BT_FN_UINT128_UINT128): New function type.
* builtins.def (BUILT_IN_BSWAP128): New GCC builtin.
* doc/extend.texi (__builtin_bswap128): Document it.
* builtins.c (expand_builtin): Deal with BUILT_IN_BSWAP128.
(is_inexpensive_builtin): Likewise.
* fold-const-call.c (fold_const_call_ss): Likewise.
* fold-const.c (tree_call_nonnegative_warnv_p): Likewise.
* tree-ssa-ccp.c (evaluate_stmt): Likewise.
* tree-vect-stmts.c (vect_get_data_ptr_increment): Likewise.
(vectorizable_call): Likewise.
* optabs.c (expand_unop): Always use the double word path for it.
* tree-core.h (enum tree_index): Add TI_UINT128_TYPE.
* tree.h (uint128_type_node): New global type.
* tree.c (build_common_tree_nodes): Build it if TImode is supported.

gcc/testsuite/ChangeLog:

* gcc.dg/builtin-bswap-10.c: New test.
* gcc.dg/builtin-bswap-11.c: Likewise.
* gcc.dg/builtin-bswap-12.c: Likewise.
* gcc.target/i386/builtin-bswap-5.c: Likewise.
16 files changed:
gcc/builtin-types.def
gcc/builtins.c
gcc/builtins.def
gcc/doc/extend.texi
gcc/fold-const-call.c
gcc/fold-const.c
gcc/optabs.c
gcc/testsuite/gcc.dg/builtin-bswap-10.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/builtin-bswap-11.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/builtin-bswap-12.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/builtin-bswap-5.c [new file with mode: 0644]
gcc/tree-core.h
gcc/tree-ssa-ccp.c
gcc/tree-vect-stmts.c
gcc/tree.c
gcc/tree.h