Commit 7083621f by Jan Hubicka Committed by Jan Hubicka

re PR rtl-optimization/66351 (r223883 miscompiles stage2 compiler on ia64)


	PR ipa/66351
	* ipa-polymorphic-call.c
	(ipa_polymorphic_call_context::get_dynamic_type): Fix thinko when
	initializing alias oracle; fix formating; set base_alias_set if it
	is known.

From-SVN: r224719
parent 6b4db501
2015-06-22 Jan Hubicka <hubicka@ucw.cz>
PR ipa/66351
* ipa-polymorphic-call.c
(ipa_polymorphic_call_context::get_dynamic_type): Fix thinko when
initializing alias oracle; fix formating; set base_alias_set if it
is known.
2015-06-22 Mikhail Maltsev <maltsevm@gmail.com> 2015-06-22 Mikhail Maltsev <maltsevm@gmail.com>
* auto-inc-dec.c (reverse_mem, reverse_inc): Remove. * auto-inc-dec.c (reverse_mem, reverse_inc): Remove.
......
...@@ -1574,13 +1574,15 @@ ipa_polymorphic_call_context::get_dynamic_type (tree instance, ...@@ -1574,13 +1574,15 @@ ipa_polymorphic_call_context::get_dynamic_type (tree instance,
tree base_ref = get_ref_base_and_extent tree base_ref = get_ref_base_and_extent
(ref_exp, &offset2, &size, &max_size); (ref_exp, &offset2, &size, &max_size);
/* Finally verify that what we found looks like read from OTR_OBJECT /* Finally verify that what we found looks like read from
or from INSTANCE with offset OFFSET. */ OTR_OBJECT or from INSTANCE with offset OFFSET. */
if (base_ref if (base_ref
&& ((TREE_CODE (base_ref) == MEM_REF && ((TREE_CODE (base_ref) == MEM_REF
&& ((offset2 == instance_offset && ((offset2 == instance_offset
&& TREE_OPERAND (base_ref, 0) == instance) && TREE_OPERAND (base_ref, 0) == instance)
|| (!offset2 && TREE_OPERAND (base_ref, 0) == otr_object))) || (!offset2
&& TREE_OPERAND (base_ref, 0)
== otr_object)))
|| (DECL_P (instance) && base_ref == instance || (DECL_P (instance) && base_ref == instance
&& offset2 == instance_offset))) && offset2 == instance_offset)))
{ {
...@@ -1608,9 +1610,17 @@ ipa_polymorphic_call_context::get_dynamic_type (tree instance, ...@@ -1608,9 +1610,17 @@ ipa_polymorphic_call_context::get_dynamic_type (tree instance,
/* We look for vtbl pointer read. */ /* We look for vtbl pointer read. */
ao.size = POINTER_SIZE; ao.size = POINTER_SIZE;
ao.max_size = ao.size; ao.max_size = ao.size;
/* We are looking for stores to vptr pointer within the instance of
outer type.
TODO: The vptr pointer type is globally known, we probably should
keep it and do that even when otr_type is unknown. */
if (otr_type) if (otr_type)
ao.ref_alias_set {
= get_deref_alias_set (TREE_TYPE (BINFO_VTABLE (TYPE_BINFO (otr_type)))); ao.base_alias_set
= get_alias_set (outer_type ? outer_type : otr_type);
ao.ref_alias_set
= get_alias_set (TREE_TYPE (BINFO_VTABLE (TYPE_BINFO (otr_type))));
}
if (dump_file) if (dump_file)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment