diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-12-20 12:55:37 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-12-20 12:55:37 +0000 |
commit | a90c88042b29b16ecadc2f0560f4d3581bcf9ad6 (patch) | |
tree | 2e6dcba8a6c3ba6a73ae47044aa1ecc7a042c4ed /gcc/tree-ssa-strlen.c | |
parent | 588db50c8cf2c2ea081b2be7c1c3bc5452cdef20 (diff) | |
download | gcc-a90c88042b29b16ecadc2f0560f4d3581bcf9ad6.zip gcc-a90c88042b29b16ecadc2f0560f4d3581bcf9ad6.tar.gz gcc-a90c88042b29b16ecadc2f0560f4d3581bcf9ad6.tar.bz2 |
poly_int: get_addr_base_and_unit_offset
This patch changes the values returned by
get_addr_base_and_unit_offset from HOST_WIDE_INT to poly_int64.
maxsize in gimple_fold_builtin_memory_op goes from HOST_WIDE_INT
to poly_uint64 (rather than poly_int) to match the previous use
of tree_fits_uhwi_p.
2017-12-20 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* tree-dfa.h (get_addr_base_and_unit_offset_1): Return the offset
as a poly_int64_pod rather than a HOST_WIDE_INT.
(get_addr_base_and_unit_offset): Likewise.
* tree-dfa.c (get_addr_base_and_unit_offset_1): Likewise.
(get_addr_base_and_unit_offset): Likewise.
* doc/match-and-simplify.texi: Change off from HOST_WIDE_INT
to poly_int64 in example.
* fold-const.c (fold_binary_loc): Update call to
get_addr_base_and_unit_offset.
* gimple-fold.c (gimple_fold_builtin_memory_op): Likewise.
(maybe_canonicalize_mem_ref_addr): Likewise.
(gimple_fold_stmt_to_constant_1): Likewise.
* gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref):
Likewise.
* ipa-param-manipulation.c (ipa_modify_call_arguments): Likewise.
* match.pd: Likewise.
* omp-low.c (lower_omp_target): Likewise.
* tree-sra.c (build_ref_for_offset): Likewise.
(build_debug_ref_for_model): Likewise.
* tree-ssa-address.c (maybe_fold_tmr): Likewise.
* tree-ssa-alias.c (ao_ref_init_from_ptr_and_size): Likewise.
* tree-ssa-ccp.c (optimize_memcpy): Likewise.
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Likewise.
(constant_pointer_difference): Likewise.
* tree-ssa-loop-niter.c (expand_simple_operations): Likewise.
* tree-ssa-phiopt.c (jump_function_from_stmt): Likewise.
* tree-ssa-pre.c (create_component_ref_by_pieces_1): Likewise.
* tree-ssa-sccvn.c (vn_reference_fold_indirect): Likewise.
(vn_reference_maybe_forwprop_address, vn_reference_lookup_3): Likewise.
(set_ssa_val_to): Likewise.
* tree-ssa-strlen.c (get_addr_stridx, addr_stridxptr)
(maybe_diag_stxncpy_trunc): Likewise.
* tree-vrp.c (vrp_prop::check_array_ref): Likewise.
* tree.c (build_simple_mem_ref_loc): Likewise.
(array_at_struct_end_p): Likewise.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r255887
Diffstat (limited to 'gcc/tree-ssa-strlen.c')
-rw-r--r-- | gcc/tree-ssa-strlen.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c index 8971c7d..e812bd1 100644 --- a/gcc/tree-ssa-strlen.c +++ b/gcc/tree-ssa-strlen.c @@ -241,8 +241,9 @@ get_addr_stridx (tree exp, tree ptr, unsigned HOST_WIDE_INT *offset_out) if (!decl_to_stridxlist_htab) return 0; - base = get_addr_base_and_unit_offset (exp, &off); - if (base == NULL || !DECL_P (base)) + poly_int64 poff; + base = get_addr_base_and_unit_offset (exp, &poff); + if (base == NULL || !DECL_P (base) || !poff.is_constant (&off)) return 0; list = decl_to_stridxlist_htab->get (base); @@ -382,8 +383,9 @@ addr_stridxptr (tree exp) { HOST_WIDE_INT off; - tree base = get_addr_base_and_unit_offset (exp, &off); - if (base == NULL_TREE || !DECL_P (base)) + poly_int64 poff; + tree base = get_addr_base_and_unit_offset (exp, &poff); + if (base == NULL_TREE || !DECL_P (base) || !poff.is_constant (&off)) return NULL; if (!decl_to_stridxlist_htab) @@ -1869,13 +1871,13 @@ maybe_diag_stxncpy_trunc (gimple_stmt_iterator gsi, tree src, tree cnt) if (TREE_CODE (ref) == ARRAY_REF) ref = TREE_OPERAND (ref, 0); - HOST_WIDE_INT dstoff; + poly_int64 dstoff; tree dstbase = get_addr_base_and_unit_offset (ref, &dstoff); - HOST_WIDE_INT lhsoff; + poly_int64 lhsoff; tree lhsbase = get_addr_base_and_unit_offset (lhs, &lhsoff); if (lhsbase - && dstoff == lhsoff + && known_eq (dstoff, lhsoff) && operand_equal_p (dstbase, lhsbase, 0)) return false; } |