r200293 - in /branches/scalar-storage-order/gcc...

ebotcazou@gcc.gnu.org ebotcazou@gcc.gnu.org
Fri Jun 21 11:17:00 GMT 2013


Author: ebotcazou
Date: Fri Jun 21 11:17:01 2013
New Revision: 200293

URL: http://gcc.gnu.org/viewcvs?rev=200293&root=gcc&view=rev
Log:
	* asan.c (instrument_derefs): Adjust call to get_inner_reference.
	* builtins.c (get_object_alignment_2): Likewise.
	(fold_builtin_memory_op): Adjust calls to get_ref_base_and_extent.
	* calls.c (store_unaligned_arguments_into_pseudos): Adjust calls to
	extract_bit_field.
	(initialize_argument_information): Adjust call to store_expr.
	* cfgexpand.c (expand_debug_expr): Adjust call to get_inner_reference
	and get_ref_base_and_extent.
	* dbxout.c (dbxout_expand_expr): Likewise.
	* dojump.c (do_jump): 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.
	(native_encode_initializer): Adjust call to native_encode_expr.
	* expmed.c (flip_storage_order): New function.
	(store_bit_field_1): Add REVERSE parameter.  Flip the storage order
	of the value if it is true.  Pass REVERSE to recursive call after
	adjusting the target offset.
	Do not use extraction instruction if REVERSE is true.
	Pass REVERSE to store_fixed_bit_field.
	(store_bit_field): Add REVERSE parameter and pass to it to above.
	(store_fixed_bit_field): Add REVERSE parameter and pass to it to
	store_split_bit_field.  Flip the storage order of the value if it
	is true and adjust the target offset.
	(store_split_bit_field): Add REVERSE parameter and pass it to
	store_fixed_bit_field.  Adjust the target offset if it is true.
	(extract_bit_field_1): Add REVERSE parameter.  Flip the storage order
	of the value if it is true.  Pass REVERSE to recursive call after
	adjusting the target offset.
	Do not use extraction instruction if REVERSE is true.
	Pass REVERSE to extract_fixed_bit_field.
	(extract_bit_field): Add REVERSE parameter and pass to it to above.
	(extract_fixed_bit_field): Add REVERSE parameter and pass to it to
	extract_split_bit_field.  Flip the storage order of the value if it
	is true and adjust the target offset.
	(extract_split_bit_field): Add REVERSE parameter and pass it to
	extract_fixed_bit_field.  Adjust the target offset if it is true.
	* expr.c (emit_group_load_1): Adjust calls to extract_bit_field.
	(emit_group_store): Adjust call to store_bit_field.
	(copy_blkmode_from_reg): Likewise.
	(copy_blkmode_to_reg): Likewise.
	(write_complex_part): Likewise.
	(read_complex_part): Likewise.
	(optimize_bitfield_assignment_op): Add REVERSE parameter.  Assert
	that it isn't true if the target is a register.
	<PLUS_EXPR>: If it is, do not optimize unless bitsize is equal to 1,
	and flip the storage order of the mask.
	<BIT_IOR_EXPR>: Use str_mode/str_bitsize instead of more convoluted
	expressions and flip the storage order of the mask.
	(get_bit_range): Adjust call to get_inner_reference.
	(expand_assignment): Adjust calls to get_inner_reference, store_expr,
	optimize_bitfield_assignment_op and store_field.  Handle MEM_EXPRs
	with reverse storage order.
	(store_expr): Add REVERSE parameter and pass it to recursive calls
	and call to store_bit_field.  Flip the storage order of the value if
	it is true.
	(store_constructor_field): Add REVERSE parameter and pass it to
	recursive calls and call to store_field.
	(store_constructor): Add REVERSE parameter and pass it to calls to
	store_constructor_field and store_expr.  Set it to true for an
	aggregate type with TYPE_REVERSE_STORAGE_ORDER.
	(store_field): Add REVERSE parameter and pass it to recursive calls
	and calls to store_expr and store_bit_field.  Flip the storage order
	of the value with record type and integral mode and adjust the shift
	if it is true.
	(get_inner_reference): Add PREVERSEP parameter and set it to true
	upon encoutering a reference with reverse storage order.
	(expand_expr_addr_expr_1): Adjust call to get_inner_reference.
	(expand_constructor): Adjust call to store_constructor.
	(expand_expr_real_2) <CASE_CONVERT>: Pass TYPE_REVERSE_STORAGE_ORDER
	of the union type to store_expr in the MEM case and assert that it
	isn't set in the REG case.  Adjust call to store_field.
	(expand_expr_real_1) <MEM_REF>: Handle reverse storage order.
	<normal_inner_ref>: Add REVERSEP variable and adjust calls to
	get_inner_reference and extract_bit_field.  Flip the storage order
	of the value with record type and integral mode and adjust the shift
	if it is true.  Flip the storage order of the value if it is true.
	<VIEW_CONVERT_EXPR>: Add REVERSEP variable and adjust call to
	get_inner_reference.  Do not fetch an inner reference if it is true.
	* expr.h (flip_storage_order): Declare.
	(store_expr): Ajust prototype.
	(store_bit_field): Likewise.
	(extract_bit_field): Likewise.
	* fold-const.c (make_bit_field_ref): Add REVERSEP parameter and set
	REF_REVERSE_STORAGE_ORDER on the reference according to it.
	(optimize_bit_field_compare): Deal with reverse storage order.  Adjust
	calls to get_inner_reference and make_bit_field_ref.
	(decode_field_reference): Add PREVERSEP parameter and adjust call to
	get_inner_reference.
	(fold_truth_andor_1): Deal with reverse storage order.  Adjust calls to
	decode_field_reference and make_bit_field_ref.
	(native_encode_int): Add REVERSE parameter and flip the endianness
	according to it.
	(native_encode_real): Likewise.
	(native_encode_fixed): Add REVERSE parameter and pass it to
	native_encode_int.
	(native_encode_complex): Add REVERSE parameter and pass it to
	native_encode_expr.
	(native_encode_vector): Likewise.
	(native_encode_expr): Add REVERSE parameter and pass it to above
	functions.
	(fold_flip_storage_order): New function.
	(fold_view_convert_expr): Adjust call to native_encode_expr.
	(fold_unary_loc) <CASE_CONVERT>: Adjust call to get_inner_reference.
	<VIEW_CONVERT_EXPR>: Propagate the REF_REVERSE_STORAGE_ORDER flag.
	(fold_comparison): Adjust call to get_inner_reference.
	(fold_ternary_loc): Adjust call to native_encode_expr.
	(split_address_to_core_and_offset): Adjust call to get_inner_reference.
	* gimple-fold.c (maybe_fold_reference): Propagate the
	REF_REVERSE_STORAGE_ORDER flag.
	(gimple_extract_devirt_binfo_from_cst): Adjust call to
	get_ref_base_and_extent.
	(get_base_constructor): Likewise.
	(fold_const_aggregate_ref_1): Likewise.
	* gimple-ssa-strength-reduction.c (slsr_process_ref): Adjust call to
	get_inner_reference and bail out on reverse storage order.
	* gimple.c ( gimple_canonical_types_compatible_p) <ARRAY_TYPE>: Take
	into account the TYPE_REVERSE_STORAGE_ORDER flag.
	<RECORD_TYPE>: Likewise.
	* gimplify.c (gimplify_expr) <MEM_REF>: Propagate the
	REF_REVERSE_STORAGE_ORDER flag.
	* 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-prop.c (extr_type_from_vtbl_ptr_store): Adjust call to
	get_ref_base_and_extent.
	(ipa_load_from_parm_agg_1): Likewise.
	(compute_complex_assign_jump_func): Likewise.
	(get_ancestor_addr_info): Likewise.
	(compute_known_type_jump_func): Likewise.
	(determine_known_aggregate_parts): 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.
	* stor-layout.c (compute_record_mode): Force BLKmode if the type has
	TYPE_REVERSE_STORAGE_ORDER set.
	(layout_type) <ARRAY_TYPE>: Likewise.
	* 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-dfa.c (get_ref_base_and_extent): Add PREVERSE parameter and set
	it to true upon encoutering a reference with reverse storage order.
	* tree-flow-inline.h (storage_order_barrier_p): New inline predicate.
	* tree-inline.c (remap_gimple_op_r): Propagate the
	REF_REVERSE_STORAGE_ORDER flag.
	(copy_tree_body_r): Likewise.
	* tree-loop-distribution.c (const_with_all_bytes_same): Adjust call to
	native_encode_exp.
	* tree-outof-ssa.c (insert_value_copy_on_edge): Adjust call to
	store_expr.
	* tree-scalar-evolution.c (interpret_rhs_expr): Adjust call to
	get_inner_reference.
	* tree-sra.c (struct access): Add REVERSE field.
	(create_access): Adjust call to get_ref_base_and_extent and set the
	REVERSE according to the result.
	(build_access_from_expr_1): Preserve storage order barriers.
	(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.
	(get_access_for_expr): Adjust call to get_ref_base_and_extent.
	(turn_representatives_into_adjustments): Propagate REVERSE flag.
	(sra_ipa_modify_expr): Adjust call to get_ref_base_and_extent.
	* tree-ssa-alias.c (ao_ref_base): Likewise.
	(ao_ref_init_from_ptr_and_size): Likewise.
	(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 case.
	Return true if reverse storage order.
	<BIT_FIELD_REF>: Likewise.
	<COMPONENT_REF>: Likewise.
	<ARRAY_REF>: Likewise.
	<ARRAY_RANGE_REF>: Likewise.
	(may_be_unaligned_p): Adjust call to get_inner_reference.
	(split_address_cost): Likewise.  Bail out if reverse storage order.
	* 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.
	(vn_reference_lookup_3): Adjust calls to get_ref_base_and_extent and to
	native_encode_expr.
	* tree-ssa-sccvn.h (struct vn_reference_op_struct): Add REVERSE field.
	* tree-ssa-structalias.c (get_constraint_for_component_ref): Likewise.
	(do_structure_copy): Likewise.
	* tree-streamer-in.c (unpack_ts_base_value_fields): Deal with
	TYPE_REVERSE_STORAGE_ORDER and REF_REVERSE_STORAGE_ORDER.
	* tree-streamer-out.c (pack_ts_base_value_fields): Likewise.
	* tree-vect-data-refs.c (vect_check_gather): Adjust call to
	get_inner_reference.
	(vect_analyze_data_refs): Likewise.
	* tree.c (stabilize_reference) <BIT_FIELD_REF>: Propagate the
	REF_REVERSE_STORAGE_ORDER flag.
	* tree.h (TYPE_REVERSE_STORAGE_ORDER): New flag.
	(TYPE_SATURATING): Adjust to above.
	(REF_REVERSE_STORAGE_ORDER): New flag.
	(get_inner_reference): Adjust prototype.
	(get_ref_base_and_extent): Likewise.
	(native_encode_expr): Likewise.
	(fold_flip_storage_order): Declare.
	* tsan.c (instrument_expr): Adjust call to get_inner_reference.
	* var-tracking.c (track_expr_p): Adjust call to get_ref_base_and_extent
	* varasm.c (output_constant): Move bulk of processing to...
	(output_constant_1): ... new function.  Add REVERSE parameter.
	<INTEGER_TYPE>: Flip the storage order of the value if REVERSE is true.
	<REAL_TYPE>: Likewise.
	<COMPLEX_TYPE>: Pass it to recursive calls.
	<ARRAY_TYPE>: Likewise.  Adjust call to output_constructor.
	<RECORD_TYPE>: Likewise.  Adjust call to output_constructor.
	(struct oc_local_state): Add REVERSE field.
	(output_constructor_array_range): Adjust calls to output_constant.
	(output_constructor_regular_field): Likewise.
	(output_constructor_bitfield): Adjust call to output_constructor.  Flip
	the storage order of the value if REVERSE is true.
	(output_constructor): Add REVERSE parameter.  Set it to true for an
	aggregate type with TYPE_REVERSE_STORAGE_ORDER.  Adjust call to
	output_constructor_bitfield.
ada/
	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>:  Set
	TYPE_REVERSE_STORAGE_ORDER according to Reverse_Storage_Order.
	<E_Array_Subtype>: Likewise.
	<E_Record_Type>: Likewise.
	<E_Record_Subtype>: Likewise.
	(components_to_record): Copy it onto types for the variant part.
	(elaborate_expression_1): Adjust call to get_inner_reference.
	* gcc-interface/trans.c (Attribute_to_gnu) <Attr_Bit>: Likewise.
	* gcc-interface/utils2.c (build_unary_op) <ATTR_ADDR_EXPR>: Likewise.
	(gnat_stabilize_reference) <BIT_FIELD_REF>: Propagate the
	REF_REVERSE_STORAGE_ORDER flag.
	* gcc-interface/utils.c (make_packable_type): Propagate the
	TYPE_REVERSE_STORAGE_ORDER flag.
	(unchecked_convert): Preserve it through the conversion.
fortran/
	* target-memory.c (encode_integer): Adjust call to native_encode_expr.
	(encode_float): Likewise.
	(encode_logical): Likewise.
	(gfc_encode_character): Likewise.
testsuite/
	* lib/gnat.exp (gnat_test): New procedure.
	* gnat.dg/sso1.adb: New test.
	* gnat.dg/specs/sso_msgs.ads: Likewise.
	* gnat.test: New directory.

Added:
    branches/scalar-storage-order/gcc/testsuite/gnat.dg/specs/sso_msgs.ads
    branches/scalar-storage-order/gcc/testsuite/gnat.dg/sso1.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/
    branches/scalar-storage-order/gcc/testsuite/gnat.test/conv1.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/conv1.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/dump.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/dump.ads
    branches/scalar-storage-order/gcc/testsuite/gnat.test/gnat-test.exp
    branches/scalar-storage-order/gcc/testsuite/gnat.test/init1.ads
    branches/scalar-storage-order/gcc/testsuite/gnat.test/init2.ads
    branches/scalar-storage-order/gcc/testsuite/gnat.test/init3.ads
    branches/scalar-storage-order/gcc/testsuite/gnat.test/init4.ads
    branches/scalar-storage-order/gcc/testsuite/gnat.test/init5.ads
    branches/scalar-storage-order/gcc/testsuite/gnat.test/init6.ads
    branches/scalar-storage-order/gcc/testsuite/gnat.test/init7.ads
    branches/scalar-storage-order/gcc/testsuite/gnat.test/init8.ads
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p1.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p1.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p2.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p2.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p3.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p3.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p4.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p4.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p5.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p5.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p6.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p6.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p7.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p7.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p8.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/p8.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q1.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q1.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q2.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q2.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q3.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q3.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q4.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q4.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q5.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q5.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q6.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q6.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q7.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q7.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q8.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/q8.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/r3.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/r3.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/r5.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/r5.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/r6.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/r6.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/r7.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/r7.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/r8.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/r8.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/s3.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/s3.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/s5.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/s5.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/s6.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/s6.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/s7.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/s7.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/s8.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/s8.out
    branches/scalar-storage-order/gcc/testsuite/gnat.test/t1.adb
    branches/scalar-storage-order/gcc/testsuite/gnat.test/t1.ads
Modified:
    branches/scalar-storage-order/gcc/ada/gcc-interface/decl.c
    branches/scalar-storage-order/gcc/ada/gcc-interface/trans.c
    branches/scalar-storage-order/gcc/ada/gcc-interface/utils.c
    branches/scalar-storage-order/gcc/ada/gcc-interface/utils2.c
    branches/scalar-storage-order/gcc/ada/targparm.ads
    branches/scalar-storage-order/gcc/asan.c
    branches/scalar-storage-order/gcc/builtins.c
    branches/scalar-storage-order/gcc/calls.c
    branches/scalar-storage-order/gcc/cfgexpand.c
    branches/scalar-storage-order/gcc/dbxout.c
    branches/scalar-storage-order/gcc/dwarf2out.c
    branches/scalar-storage-order/gcc/expmed.c
    branches/scalar-storage-order/gcc/expr.c
    branches/scalar-storage-order/gcc/expr.h
    branches/scalar-storage-order/gcc/fold-const.c
    branches/scalar-storage-order/gcc/fortran/target-memory.c
    branches/scalar-storage-order/gcc/gimple-fold.c
    branches/scalar-storage-order/gcc/gimple-ssa-strength-reduction.c
    branches/scalar-storage-order/gcc/gimple.c
    branches/scalar-storage-order/gcc/gimplify.c
    branches/scalar-storage-order/gcc/ifcvt.c
    branches/scalar-storage-order/gcc/ipa-cp.c
    branches/scalar-storage-order/gcc/ipa-prop.c
    branches/scalar-storage-order/gcc/ipa-prop.h
    branches/scalar-storage-order/gcc/simplify-rtx.c
    branches/scalar-storage-order/gcc/stor-layout.c
    branches/scalar-storage-order/gcc/testsuite/lib/gnat.exp
    branches/scalar-storage-order/gcc/tree-affine.c
    branches/scalar-storage-order/gcc/tree-data-ref.c
    branches/scalar-storage-order/gcc/tree-dfa.c
    branches/scalar-storage-order/gcc/tree-flow-inline.h
    branches/scalar-storage-order/gcc/tree-inline.c
    branches/scalar-storage-order/gcc/tree-loop-distribution.c
    branches/scalar-storage-order/gcc/tree-outof-ssa.c
    branches/scalar-storage-order/gcc/tree-scalar-evolution.c
    branches/scalar-storage-order/gcc/tree-sra.c
    branches/scalar-storage-order/gcc/tree-ssa-alias.c
    branches/scalar-storage-order/gcc/tree-ssa-dce.c
    branches/scalar-storage-order/gcc/tree-ssa-loop-ivopts.c
    branches/scalar-storage-order/gcc/tree-ssa-pre.c
    branches/scalar-storage-order/gcc/tree-ssa-sccvn.c
    branches/scalar-storage-order/gcc/tree-ssa-sccvn.h
    branches/scalar-storage-order/gcc/tree-ssa-structalias.c
    branches/scalar-storage-order/gcc/tree-streamer-in.c
    branches/scalar-storage-order/gcc/tree-streamer-out.c
    branches/scalar-storage-order/gcc/tree-vect-data-refs.c
    branches/scalar-storage-order/gcc/tree.c
    branches/scalar-storage-order/gcc/tree.h
    branches/scalar-storage-order/gcc/tsan.c
    branches/scalar-storage-order/gcc/var-tracking.c
    branches/scalar-storage-order/gcc/varasm.c



More information about the Gcc-cvs mailing list