From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5126 invoked by alias); 10 Aug 2007 00:31:23 -0000 Received: (qmail 4989 invoked by uid 22791); 10 Aug 2007 00:31:21 -0000 X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 10 Aug 2007 00:31:16 +0000 Received: from zps38.corp.google.com (zps38.corp.google.com [172.25.146.38]) by smtp-out.google.com with ESMTP id l7A0VB4f003448 for ; Thu, 9 Aug 2007 17:31:11 -0700 Received: from smtp.corp.google.com (spacemonkey1.corp.google.com [192.168.120.115]) by zps38.corp.google.com with ESMTP id l7A0V1RM002126 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Thu, 9 Aug 2007 17:31:01 -0700 Received: from localhost.localdomain.google.com (adsl-71-133-8-30.dsl.pltn13.pacbell.net [71.133.8.30]) (authenticated bits=0) by smtp.corp.google.com (8.13.8/8.13.8) with ESMTP id l7A0V0V4018590 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Thu, 9 Aug 2007 17:31:00 -0700 To: gcc-patches@gcc.gnu.org Subject: PATCH RFC: Use type alias_set_type to hold alias sets From: Ian Lance Taylor Date: Fri, 10 Aug 2007 00:31:00 -0000 Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2007-08/txt/msg00625.txt.bz2 --=-=-= Content-length: 5280 In this patch: http://gcc.gnu.org/ml/gcc-patches/2000-05/msg01680.html Richard Kenner changed the type of alias sets from int to HOST_WIDE_INT. However, the change was not made consistently. There are a number of places in the compiler which store alias sets in a simple int; e.g., the static variable alpha_sr_alias_set in alpha.c. According to his e-mail message, the change was made to permit frontends to use a sparse definition of alias sets. However, no frontend takes advantage of that facility, and I am doubtful that any frontend ever would. Since alias sets are allocated directly by the middle-end, as well as by the frontend via LANG_HOOKS_GET_ALIAS_SET, it is hard to see how a frontend could be sure to avoid alias sets allocated by the middle-end. The code in dse.c stores alias set numbers in bitmaps, which is only supported for int, not for HOST_WIDE_INT. This code is admittedly rather new. So there is no reason to use HOST_WIDE_INT for alias sets, it never fully worked, and it works even less well now. I think it is time to change alias sets back to have type int, which should save a bit of space in DECLs and MEM_ATTRs. To avoid the kind of error made in the original patch, in which some variables did not change type, this is a purely mechanical patch to change all alias set representations to have type alias_set_type. This does not change the compiler, except for correcting the cases where a variable had type int when it should have been HOST_WIDE_INT. If this patch seems OK, I'll change alias_set_type in a simple follow-on patch. Bootstrapped and tested on i686-pc-linux-gnu. I plan to commit this in a couple of days unless I get comments. Ian gcc/ChangeLog: 2007-08-09 Ian Lance Taylor * alias.h (alias_set_type): Define new type. (ALIAS_SET_MEMORY_BARRIER): Use it. * rtl.h: Include alias.h. (struct mem_attrs): Use alias_set_type. * tree.h: Include alias.h (struct tree_type): Use alias_set_type. (struct tree_struct_field_tag): Likewise. (struct tree_decl_common): Likewise. * alias.c (struct alias_set_entry): Use alias_set_type. (get_alias_set_entry, alias_set_subset_of): Likewise. (alias_sets_conflict_p): Likewise. (alias_sets_must_conflict_p): Likewise. (objects_must_conflict_p): Likewise. (get_alias_set, new_alias_set): Likewise. (record_alias_subset, record_component_aliases): Likewise. (varargs_set, frame_set): Change to alias_set_type. (get_varargs_alias_set): Use alias_set_type. (get_frame_alias_set): Likewise. * builtins.c (setjmp_alias_set): Change to alias_set_type. * dse.c (struct store_info): Use alias_set_type. (struct read_info, struct clear_alias_mode_holder): Likewise. (clear_alias_set_lookup, canon_address): Likewise. (record_store, check_mem_read_rtx): Likewise. (dse_record_singleton_alias_set): Likewise. (dse_invalidate_singleton_alias_set): Likewise. * emit-rtl.c (get_mem_attrs): Likewise. (set_mem_attributes_minus_bitpos): Likewise. (set_mem_alias_set): Likewise. * expr.c (store_constructor_field, store_field): Likewise. * gimplify.c (struct gimplify_init_ctor_preeval_data): Likewise. * langhooks.c (lhd_get_alias_set): Likewise. * langhooks-def.h (lhd_get_alias_set): Likewise. * reload1.c (alter_reg): Likewise. * tree-flow.h (struct fieldoff): Likewise. * tree-ssa-alias.c (struct alias_map_d): Likewise. (may_alias_p, get_smt_for, create_sft): Likewise. * tree-ssa-alias-warnings.c (nonstandard_alias_types_p): Likewise. * tree-ssa-structalias.c (set_uids_in_ptset): Likewise. (merge_smts_into): Likewise. * varasm.c (const_alias_set): Likewise. * c-common.c (strict_aliasing_warning): Likewise. (c_common_get_alias_set): Likewise. * dse.h (dse_record_singleton_alias_set): Update declaration. (dse_invalidate_singleton_alias_set): Likewise. * emit-rtl.h (set_mem_alias_set): Likewise. * c-common.h (c_common_get_alias_set): Likewise. * print-rtl.c (print_rtx): Cast MEM_ALIAS_SET when printing it. * print-tree.c (print_node): Likewise. * config/alpha/alpha.c (alpha_sr_alias_set): Change to alias_set_type. (alpha_setup_incoming_varargs): Use alias_set_type. * config/i386/i386.c (setup_incoming_varargs_64): Use alias_set_type. (setup_incoming_varargs_ms_64): Likewise. (ix86_GOT_alias_set): Likewise. * config/mn10300/mn10300.c (mn10300_builtin_saveregs): Likewise. * config/rs6000/rs6000.c (setup_incoming_varargs): Likewise. (set): Change to alias_set_type. (get_TOC_alias_set): Use alias_set_type. * config/rs6000/rs6000-protos.h (get_TOC_alias_set): Update declaration. * config/sh/sh.c (sh_builtin_saveregs): Use alias_set_type. * config/sparc/sparc.c (sparc_sr_alias_set): Change to alias_set_type. (struct_value_alias_set): Likewise. * Makefile.in (GTFILES): Add $(srcdir)/alias.h. gcc/ada/ChangeLog: 2007-08-09 Ian Lance Taylor * misc.c (gnat_get_alias_set): Change return type to alias_set_type. gcc/cp/ChangeLog: 2007-08-09 Ian Lance Taylor * cp-objcp-common.c (cxx_get_alias_set): Change return type to alias_set_type. * cp/cp-tree.h (cxx_get_alias_set): Update declaration. gcc/fortran/ChangeLog: 2007-08-09 Ian Lance Taylor * f95-lang.c (gfc_get_alias_set): Change return type to alias_set_type. --=-=-= Content-Type: application/x-gzip Content-Disposition: attachment; filename=foo.patch.gz Content-Transfer-Encoding: base64 Content-Description: alias_set_type patch Content-length: 13355 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 --=-=-=--