aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@gcc.gnu.org>2017-08-30 11:11:23 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2017-08-30 11:11:23 +0000
commit64ab8765d7e45ed19d4a571b2aaba0abf7f834c3 (patch)
treeb05715fb0b8144f639b5f3e330714a2b5031ac3d
parent673bf5a6b65e51d177d2cf9fc4002171b1f467ab (diff)
downloadgcc-64ab8765d7e45ed19d4a571b2aaba0abf7f834c3.zip
gcc-64ab8765d7e45ed19d4a571b2aaba0abf7f834c3.tar.gz
gcc-64ab8765d7e45ed19d4a571b2aaba0abf7f834c3.tar.bz2
[24/77] Replace a != BLKmode check with is_a <scalar_int_mode>
This patch replaces a check against BLKmode with a check of is_a <scalar_int_mode>, in a case where scalar integer modes were the only useful alternatives left. gcc/ 2017-08-30 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> * gimple-fold.c (gimple_fold_builtin_memory_op): Use is_a <scalar_int_mode> instead of != BLKmode. From-SVN: r251476
-rw-r--r--gcc/gimple-fold.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index bf39f28..5886b3d 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -748,31 +748,29 @@ gimple_fold_builtin_memory_op (gimple_stmt_iterator *gsi,
unsigned ilen = tree_to_uhwi (len);
if (pow2p_hwi (ilen))
{
+ scalar_int_mode mode;
tree type = lang_hooks.types.type_for_size (ilen * 8, 1);
if (type
- && TYPE_MODE (type) != BLKmode
- && (GET_MODE_SIZE (TYPE_MODE (type)) * BITS_PER_UNIT
- == ilen * 8)
+ && is_a <scalar_int_mode> (TYPE_MODE (type), &mode)
+ && GET_MODE_SIZE (mode) * BITS_PER_UNIT == ilen * 8
/* If the destination pointer is not aligned we must be able
to emit an unaligned store. */
- && (dest_align >= GET_MODE_ALIGNMENT (TYPE_MODE (type))
- || !SLOW_UNALIGNED_ACCESS (TYPE_MODE (type), dest_align)
- || (optab_handler (movmisalign_optab, TYPE_MODE (type))
+ && (dest_align >= GET_MODE_ALIGNMENT (mode)
+ || !SLOW_UNALIGNED_ACCESS (mode, dest_align)
+ || (optab_handler (movmisalign_optab, mode)
!= CODE_FOR_nothing)))
{
tree srctype = type;
tree desttype = type;
- if (src_align < GET_MODE_ALIGNMENT (TYPE_MODE (type)))
+ if (src_align < GET_MODE_ALIGNMENT (mode))
srctype = build_aligned_type (type, src_align);
tree srcmem = fold_build2 (MEM_REF, srctype, src, off0);
tree tem = fold_const_aggregate_ref (srcmem);
if (tem)
srcmem = tem;
- else if (src_align < GET_MODE_ALIGNMENT (TYPE_MODE (type))
- && SLOW_UNALIGNED_ACCESS (TYPE_MODE (type),
- src_align)
- && (optab_handler (movmisalign_optab,
- TYPE_MODE (type))
+ else if (src_align < GET_MODE_ALIGNMENT (mode)
+ && SLOW_UNALIGNED_ACCESS (mode, src_align)
+ && (optab_handler (movmisalign_optab, mode)
== CODE_FOR_nothing))
srcmem = NULL_TREE;
if (srcmem)
@@ -788,7 +786,7 @@ gimple_fold_builtin_memory_op (gimple_stmt_iterator *gsi,
gimple_set_vuse (new_stmt, gimple_vuse (stmt));
gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
}
- if (dest_align < GET_MODE_ALIGNMENT (TYPE_MODE (type)))
+ if (dest_align < GET_MODE_ALIGNMENT (mode))
desttype = build_aligned_type (type, dest_align);
new_stmt
= gimple_build_assign (fold_build2 (MEM_REF, desttype,