On 12/12/19 3:35 PM, Jan Hubicka wrote:
Hi,
this rather nasty bug makes value and mask to be exchanged during
streaming. This makes us to sometimes set bogus pointer alignments
and causes misoptimization of Firefox when built with GCC 9.
Hi.
I've just prepare and tested backport for both GCC 8 and 9 branches.
I'm going to install the patches.
@Honza: Can you please next time create a PR? It's the best tracker
for release branches we have.
Thanks,
Martin
Comitted as obvious. I will backport it to release branches soon - it
is quite dangerous bug.
Honza
* ipa-prop.c (read_ipcp_transformation_info): Fix undefined ordering
of execution of function call parameters.
Index: ipa-prop.c
===================================================================
--- ipa-prop.c (revision 278815)
+++ ipa-prop.c (working copy)
@@ -4715,9 +4715,10 @@ read_ipcp_transformation_info (lto_input
bool known = bp_unpack_value (&bp, 1);
if (known)
{
+ const widest_int value = streamer_read_widest_int (ib);
+ const widest_int mask = streamer_read_widest_int (ib);
ipa_bits *bits
- = ipa_get_ipa_bits_for_value (streamer_read_widest_int (ib),
- streamer_read_widest_int (ib));
+ = ipa_get_ipa_bits_for_value (value, mask);
(*ts->bits)[i] = bits;
}
}
>From cf37f46be9ef7cebf3a4a277adba5d0ab641ff86 Mon Sep 17 00:00:00 2001
From: hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 12 Dec 2019 14:32:48 +0000
Subject: [PATCH] Backport r279306
gcc/ChangeLog:
2019-12-12 Jan Hubicka <[email protected]>
* ipa-prop.c (read_ipcp_transformation_info): Fix undefined ordering
of execution of function call parameters.
---
gcc/ipa-prop.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index 848180aa441..40edee7951c 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -4715,9 +4715,10 @@ read_ipcp_transformation_info (lto_input_block *ib, cgraph_node *node,
bool known = bp_unpack_value (&bp, 1);
if (known)
{
+ const widest_int value = streamer_read_widest_int (ib);
+ const widest_int mask = streamer_read_widest_int (ib);
ipa_bits *bits
- = ipa_get_ipa_bits_for_value (streamer_read_widest_int (ib),
- streamer_read_widest_int (ib));
+ = ipa_get_ipa_bits_for_value (value, mask);
(*ts->bits)[i] = bits;
}
}
--
2.24.1