This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][store-merging] Use store order as tie-breaker in sort_by_bitpos
- From: Kyrill Tkachov <kyrylo dot tkachov at foss dot arm dot com>
- To: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 13 Sep 2017 14:02:16 +0100
- Subject: [PATCH][store-merging] Use store order as tie-breaker in sort_by_bitpos
- Authentication-results: sourceware.org; auth=none
Hi all,
As Alexander pointed out in the thread starting at [1] the
sort_by_bitpos sorting function
was behaving badly when we had multiple stores at the same position. He
fixed that (thanks!)
but we can do better by not returning zero when the bitpositions are
equal but by falling back
to comparing the order the stores appear in, which is guaranteed to be
unique (barring other
bugs elsewhere).
This patch does that.
Bootstrapped and tested on aarch64-none-linux-gnu.
Ok for trunk?
Thanks,
Kyrill
[1] https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00895.html
2017-09-13 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gimple-ssa-store-merging.c (sort_by_bitpos): Compare store order
when bitposition is the same.
diff --git a/gcc/gimple-ssa-store-merging.c b/gcc/gimple-ssa-store-merging.c
index c60d56a..3260c56 100644
--- a/gcc/gimple-ssa-store-merging.c
+++ b/gcc/gimple-ssa-store-merging.c
@@ -521,7 +521,9 @@ sort_by_bitpos (const void *x, const void *y)
else if ((*tmp)->bitpos > (*tmp2)->bitpos)
return 1;
else
- return 0;
+ /* If they are the same let's use the order which is guaranteed to
+ be different. */
+ return (*tmp)->order - (*tmp2)->order;
}
/* Sorting function for store_immediate_info objects.