+2015-01-06 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
+ PR tree-optimization/63259
+ * tree-ssa-math-opts.c (pass_optimize_bswap::execute): Stop checking
+ if optab exists for 16bit byteswap.
+
2015-01-06 Jakub Jelinek <jakub@redhat.com>
* opts.c (common_handle_option): Add support for
pass_optimize_bswap::execute (function *fun)
{
basic_block bb;
- bool bswap16_p, bswap32_p, bswap64_p;
+ bool bswap32_p, bswap64_p;
bool changed = false;
- tree bswap16_type = NULL_TREE, bswap32_type = NULL_TREE, bswap64_type = NULL_TREE;
+ tree bswap32_type = NULL_TREE, bswap64_type = NULL_TREE;
if (BITS_PER_UNIT != 8)
return 0;
- bswap16_p = (builtin_decl_explicit_p (BUILT_IN_BSWAP16)
- && optab_handler (bswap_optab, HImode) != CODE_FOR_nothing);
bswap32_p = (builtin_decl_explicit_p (BUILT_IN_BSWAP32)
&& optab_handler (bswap_optab, SImode) != CODE_FOR_nothing);
bswap64_p = (builtin_decl_explicit_p (BUILT_IN_BSWAP64)
/* Determine the argument type of the builtins. The code later on
assumes that the return and argument type are the same. */
- if (bswap16_p)
- {
- tree fndecl = builtin_decl_explicit (BUILT_IN_BSWAP16);
- bswap16_type = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (fndecl)));
- }
-
if (bswap32_p)
{
tree fndecl = builtin_decl_explicit (BUILT_IN_BSWAP32);
if (code == LROTATE_EXPR || code == RROTATE_EXPR)
continue;
load_type = uint16_type_node;
- if (bswap16_p)
- {
- fndecl = builtin_decl_explicit (BUILT_IN_BSWAP16);
- bswap_type = bswap16_type;
- }
break;
case 32:
load_type = uint32_type_node;
continue;
}
- if (bswap && !fndecl)
+ if (bswap && !fndecl && n.range != 16)
continue;
if (bswap_replace (cur_stmt, src_stmt, fndecl, bswap_type, load_type,