This is the rest of the implementation. * asan.c (instrument_derefs): Adjust call to get_inner_reference. * builtins.c (get_object_alignment_2): Likewise. * cfgexpand.c (expand_debug_expr): Adjust call to get_inner_reference and get_ref_base_and_extent. * dbxout.c (dbxout_expand_expr): Likewise. * dwarf2out.c (add_var_loc_to_decl): Likewise. (loc_list_for_address_of_addr_expr_of_indirect_ref): Likewise. (loc_list_from_tree): Likewise. (fortran_common): Likewise. * gimple-fold.c (gimple_fold_builtin_memory_op): Adjust calls to get_ref_base_and_extent. (get_base_constructor): Likewise. (fold_const_aggregate_ref_1): Likewise. * gimple-laddress.c (pass_laddress::execute): Adjust call to get_inner_reference. * gimple-ssa-strength-reduction.c (slsr_process_ref): Adjust call to get_inner_reference and bail out on reverse storage order. * ifcvt.c (noce_emit_move_insn): Adjust calls to store_bit_field. * ipa-cp.c (ipa_get_jf_ancestor_result): Adjust call to build_ref_for_offset. * ipa-polymorphic-call.c (set_by_invariant): Adjust call to get_ref_base_and_extent. (ipa_polymorphic_call_context): Likewise. (extr_type_from_vtbl_ptr_store): Likewise. (check_stmt_for_type_change): Likewise. (get_dynamic_type): Likewise. * ipa-prop.c (ipa_load_from_parm_agg_1): Adjust call to get_ref_base_and_extent. (compute_complex_assign_jump_func): Likewise. (get_ancestor_addr_info): Likewise. (compute_known_type_jump_func): Likewise. (determine_known_aggregate_parts): Likewise. (ipa_get_adjustment_candidate): Likewise. (ipa_modify_call_arguments): Set REF_REVERSE_STORAGE_ORDER on MEM_REF. * ipa-prop.h (ipa_parm_adjustment): Add REVERSE field. (build_ref_for_offset): Adjust prototype. * simplify-rtx.c (delegitimize_mem_from_attrs): Adjust call to get_inner_reference. * tree-affine.c (tree_to_aff_combination): Adjust call to get_inner_reference. (get_inner_reference_aff): Likewise. * tree-data-ref.c (split_constant_offset_1): Likewise. (dr_analyze_innermost): Likewise. Bail out if reverse storage order. * tree-scalar-evolution.c (interpret_rhs_expr): Adjust call to get_inner_reference. * tree-sra.c (struct access): Add REVERSE and move WRITE around. (dump_access): Print new fields. (create_access): Adjust call to get_ref_base_and_extent and set the REVERSE flag according to the result. (completely_scalarize_record): Set the REVERSE flag. (scalarize_elem): Add REVERSE parameter. (build_access_from_expr_1): Preserve storage order barriers. (build_accesses_from_assign): Likewise. (build_ref_for_offset): Add REVERSE parameter and set the REF_REVERSE_STORAGE_ORDER flag accordingly. (build_ref_for_model): Adjust call to build_ref_for_offset and clear the REF_REVERSE_STORAGE_ORDER flag if there are components. (analyze_access_subtree): Likewise. (create_artificial_child_access): Set the REVERSE flag. (get_access_for_expr): Adjust call to get_ref_base_and_extent. (turn_representatives_into_adjustments): Propagate REVERSE flag. (ipa_sra_check_caller): Adjust call to get_inner_reference. * tree-ssa-alias.c (ao_ref_base): Adjust call to get_ref_base_and_extent. (aliasing_component_refs_p): Likewise. (stmt_kills_ref_p_1): Likewise. * tree-ssa-dce.c (mark_aliased_reaching_defs_necessary_1): Likewise. * tree-ssa-loop-ivopts.c (may_be_nonaddressable_p) <MEM_REF>: New. Return true if reverse storage order. <BIT_FIELD_REF>: Likewise. <COMPONENT_REF>: Likewise. <ARRAY_REF>: Likewise. <ARRAY_RANGE_REF>: Likewise. (split_address_cost): Likewise. Bail out if reverse storage order. * tree-ssa-math-opts.c (find_bswap_or_nop_load): Adjust call to get_inner_reference. Bail out if reverse storage order. (bswap_replace): Adjust call to get_inner_reference. * tree-ssa-pre.c (create_component_ref_by_pieces_1) <MEM_REF>: Set the REF_REVERSE_STORAGE_ORDER flag. <BIT_FIELD_REF>: Likewise. * tree-ssa-sccvn.c (vn_reference_eq): Return false on storage order barriers. (copy_reference_ops_from_ref) <MEM_REF>: Set REVERSE field according to the REF_REVERSE_STORAGE_ORDER flag. <BIT_FIELD_REF>: Likewise. <VIEW_CONVERT_EXPR>: Set it for storage order barriers. (contains_storage_order_barrier_p): New predicate. (vn_reference_lookup_3): Adjust calls to get_ref_base_and_extent. Punt on storage order barriers if necessary. * tree-ssa-sccvn.h (struct vn_reference_op_struct): Add REVERSE. * tree-ssa-structalias.c (get_constraint_for_component_ref): Adjust call to get_ref_base_and_extent. (do_structure_copy): Likewise. * tree-vect-data-refs.c (vect_check_gather): Adjust call to get_inner_reference. (vect_analyze_data_refs): Likewise. Bail out if reverse storage order. * tsan.c (instrument_expr): Adjust call to get_inner_reference. * ubsan.c (instrument_bool_enum_load): Likewise. (instrument_object_size): Likewise. * var-tracking.c (track_expr_p): Adjust call to get_ref_base_and_extent * config/arm/arm.c (arm_assemble_integer): Adjust call to assemble_real * config/arm/arm.md (consttable_4): Likewise. (consttable_8): Likewise. (consttable_16): Likewise. * config/mips/mips.md (consttable_float): Likewise. * config/s390/s390.c (s390_output_pool_entry): Likewise. * config/sh/sh.md (consttable_sf): Likewise. (consttable_df): Likewise.
asan.c | 6 +- builtins.c | 6 +- cfgexpand.c | 12 +++-- dbxout.c | 6 +- dwarf2out.c | 21 +++++----- gimple-fold.c | 13 ++++-- gimple-laddress.c | 4 - gimple-ssa-strength-reduction.c | 6 +- ifcvt.c | 4 - ipa-cp.c | 2 ipa-polymorphic-call.c | 23 +++++++---- ipa-prop.c | 30 ++++++++++---- ipa-prop.h | 6 ++ simplify-rtx.c | 7 +-- tree-affine.c | 10 ++-- tree-data-ref.c | 20 ++++++--- tree-scalar-evolution.c | 7 +-- tree-sra.c | 83 +++++++++++++++++++++++--------------- tree-ssa-alias.c | 18 +++++--- tree-ssa-dce.c | 4 + tree-ssa-loop-ivopts.c | 27 +++++++++---- tree-ssa-math-opts.c | 10 ++-- tree-ssa-pre.c | 5 +- tree-ssa-sccvn.c | 61 +++++++++++++++++++++++++---- tree-ssa-sccvn.h | 1 tree-ssa-structalias.c | 10 +++- tree-vect-data-refs.c | 21 +++++++--- tsan.c | 6 +- ubsan.c | 8 +-- var-tracking.c | 3 - config/arm/arm.c | 2 config/arm/arm.md | 6 +- config/mips/mips.md | 2 config/s390/s390.c | 2 config/sh/sh.md | 4 - 35 files changed, 304 insertions(+), 152 deletions(-) -- Eric Botcazou