Commit e4a57350 by Thomas Preud'homme Committed by Thomas Preud'homme

re PR tree-optimization/63259 (Detecting byteswap sequence)

2015-01-06  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    PR tree-optimization/63259
    * tree-ssa-math-opts.c (pass_optimize_bswap::execute): Stop checking
    if optab exists for 16bit byteswap.

From-SVN: r219256
parent 02169d78
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> 2015-01-06 Jakub Jelinek <jakub@redhat.com>
* opts.c (common_handle_option): Add support for * opts.c (common_handle_option): Add support for
......
...@@ -2350,15 +2350,13 @@ unsigned int ...@@ -2350,15 +2350,13 @@ unsigned int
pass_optimize_bswap::execute (function *fun) pass_optimize_bswap::execute (function *fun)
{ {
basic_block bb; basic_block bb;
bool bswap16_p, bswap32_p, bswap64_p; bool bswap32_p, bswap64_p;
bool changed = false; 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) if (BITS_PER_UNIT != 8)
return 0; 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) bswap32_p = (builtin_decl_explicit_p (BUILT_IN_BSWAP32)
&& optab_handler (bswap_optab, SImode) != CODE_FOR_nothing); && optab_handler (bswap_optab, SImode) != CODE_FOR_nothing);
bswap64_p = (builtin_decl_explicit_p (BUILT_IN_BSWAP64) bswap64_p = (builtin_decl_explicit_p (BUILT_IN_BSWAP64)
...@@ -2367,12 +2365,6 @@ pass_optimize_bswap::execute (function *fun) ...@@ -2367,12 +2365,6 @@ pass_optimize_bswap::execute (function *fun)
/* Determine the argument type of the builtins. The code later on /* Determine the argument type of the builtins. The code later on
assumes that the return and argument type are the same. */ 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) if (bswap32_p)
{ {
tree fndecl = builtin_decl_explicit (BUILT_IN_BSWAP32); tree fndecl = builtin_decl_explicit (BUILT_IN_BSWAP32);
...@@ -2443,11 +2435,6 @@ pass_optimize_bswap::execute (function *fun) ...@@ -2443,11 +2435,6 @@ pass_optimize_bswap::execute (function *fun)
if (code == LROTATE_EXPR || code == RROTATE_EXPR) if (code == LROTATE_EXPR || code == RROTATE_EXPR)
continue; continue;
load_type = uint16_type_node; load_type = uint16_type_node;
if (bswap16_p)
{
fndecl = builtin_decl_explicit (BUILT_IN_BSWAP16);
bswap_type = bswap16_type;
}
break; break;
case 32: case 32:
load_type = uint32_type_node; load_type = uint32_type_node;
...@@ -2469,7 +2456,7 @@ pass_optimize_bswap::execute (function *fun) ...@@ -2469,7 +2456,7 @@ pass_optimize_bswap::execute (function *fun)
continue; continue;
} }
if (bswap && !fndecl) if (bswap && !fndecl && n.range != 16)
continue; continue;
if (bswap_replace (cur_stmt, src_stmt, fndecl, bswap_type, load_type, if (bswap_replace (cur_stmt, src_stmt, fndecl, bswap_type, load_type,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment