X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fipa-ref.c;h=8520bca33acf3d5e6c8fb2fef42d48ee7d42bf97;hb=f067febae43e30ee23cfe3af802f97ed6b415b5c;hp=27c32dcd3d6f8bb36b5695cc65b066e49c4335e0;hpb=023a28e120c57f54f969da8f49b2f30df4a6ec2d;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/ipa-ref.c b/gcc/ipa-ref.c index 27c32dcd3d6..8520bca33ac 100644 --- a/gcc/ipa-ref.c +++ b/gcc/ipa-ref.c @@ -27,7 +27,7 @@ along with GCC; see the file COPYING3. If not see #include "target.h" #include "cgraph.h" -static const char *ipa_ref_use_name[] = {"read","write","addr"}; +static const char *ipa_ref_use_name[] = {"read","write","addr","alias"}; /* Return ipa reference from REFERING_NODE or REFERING_VARPOOL_NODE to REFERED_NODE or REFERED_VARPOOL_NODE. USE_TYPE specify type @@ -46,6 +46,7 @@ ipa_record_reference (struct cgraph_node *refering_node, gcc_assert ((!refering_node) ^ (!refering_varpool_node)); gcc_assert ((!refered_node) ^ (!refered_varpool_node)); gcc_assert (!stmt || refering_node); + gcc_assert (use_type != IPA_REF_ALIAS || !stmt); list = (refering_node ? &refering_node->ref_list : &refering_varpool_node->ref_list); @@ -67,13 +68,13 @@ ipa_record_reference (struct cgraph_node *refering_node, { ref->refering.varpool_node = refering_varpool_node; ref->refering_type = IPA_REF_VARPOOL; - gcc_assert (use_type == IPA_REF_ADDR); + gcc_assert (use_type == IPA_REF_ADDR || use_type == IPA_REF_ALIAS); } if (refered_node) { ref->refered.cgraph_node = refered_node; ref->refered_type = IPA_REF_CGRAPH; - gcc_assert (use_type == IPA_REF_ADDR); + gcc_assert (use_type == IPA_REF_ADDR || use_type == IPA_REF_ALIAS); } else { @@ -197,7 +198,7 @@ ipa_dump_refering (FILE * file, struct ipa_ref_list *list) fprintf (file, "\n"); } -/* Clone all references from SRC to DEST_NODE or DEST_VARPOL_NODE. */ +/* Clone all references from SRC to DEST_NODE or DEST_VARPOOL_NODE. */ void ipa_clone_references (struct cgraph_node *dest_node, @@ -215,7 +216,7 @@ ipa_clone_references (struct cgraph_node *dest_node, ref->use, ref->stmt); } -/* Clone all refering from SRC to DEST_NODE or DEST_VARPOL_NODE. */ +/* Clone all refering from SRC to DEST_NODE or DEST_VARPOOL_NODE. */ void ipa_clone_refering (struct cgraph_node *dest_node, @@ -241,3 +242,15 @@ ipa_ref_cannot_lead_to_return (struct ipa_ref *ref) { return cgraph_node_cannot_return (ipa_ref_refering_node (ref)); } + +/* Return true if list contains an alias. */ +bool +ipa_ref_has_aliases_p (struct ipa_ref_list *ref_list) +{ + struct ipa_ref *ref; + int i; + for (i = 0; ipa_ref_list_refering_iterate (ref_list, i, ref); i++) + if (ref->use == IPA_REF_ALIAS) + return true; + return false; +}