diff options
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r-- | gcc/gimple-fold.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 45840af..fc095eb 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -782,13 +782,14 @@ gimple_fold_builtin_memory_op (gimple_stmt_iterator *gsi, HOST_WIDE_INT src_offset = 0, dest_offset = 0; HOST_WIDE_INT size = -1; HOST_WIDE_INT maxsize = -1; + bool reverse; srcvar = TREE_OPERAND (src, 0); src_base = get_ref_base_and_extent (srcvar, &src_offset, - &size, &maxsize); + &size, &maxsize, &reverse); destvar = TREE_OPERAND (dest, 0); dest_base = get_ref_base_and_extent (destvar, &dest_offset, - &size, &maxsize); + &size, &maxsize, &reverse); if (tree_fits_uhwi_p (len)) maxsize = tree_to_uhwi (len); else @@ -5264,6 +5265,8 @@ get_base_constructor (tree base, HOST_WIDE_INT *bit_offset, tree (*valueize)(tree)) { HOST_WIDE_INT bit_offset2, size, max_size; + bool reverse; + if (TREE_CODE (base) == MEM_REF) { if (!integer_zerop (TREE_OPERAND (base, 1))) @@ -5304,7 +5307,8 @@ get_base_constructor (tree base, HOST_WIDE_INT *bit_offset, case ARRAY_REF: case COMPONENT_REF: - base = get_ref_base_and_extent (base, &bit_offset2, &size, &max_size); + base = get_ref_base_and_extent (base, &bit_offset2, &size, &max_size, + &reverse); if (max_size == -1 || size != max_size) return NULL_TREE; *bit_offset += bit_offset2; @@ -5507,6 +5511,7 @@ fold_const_aggregate_ref_1 (tree t, tree (*valueize) (tree)) tree ctor, idx, base; HOST_WIDE_INT offset, size, max_size; tree tem; + bool reverse; if (TREE_THIS_VOLATILE (t)) return NULL_TREE; @@ -5577,7 +5582,7 @@ fold_const_aggregate_ref_1 (tree t, tree (*valueize) (tree)) case BIT_FIELD_REF: case TARGET_MEM_REF: case MEM_REF: - base = get_ref_base_and_extent (t, &offset, &size, &max_size); + base = get_ref_base_and_extent (t, &offset, &size, &max_size, &reverse); ctor = get_base_constructor (base, &offset, valueize); /* Empty constructor. Always fold to 0. */ |