From ca4982c229fb010229e14478e45c86bd7e52cc97 Mon Sep 17 00:00:00 2001 From: ktkachov Date: Wed, 13 Sep 2017 13:49:50 +0000 Subject: [PATCH] [store-merging] Use store order as tie-breaker in sort_by_bitpos 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. [1] https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00895.html * gimple-ssa-store-merging.c (sort_by_bitpos): Compare store order when bitposition is the same. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@252084 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/gimple-ssa-store-merging.c | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ef793e4d8cc..0e0257d9675 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-09-13 Kyrylo Tkachov + + * gimple-ssa-store-merging.c (sort_by_bitpos): Compare store order + when bitposition is the same. + 2017-09-13 Richard Biener * dwarf2out.c (output_die_symbol): Remove. diff --git a/gcc/gimple-ssa-store-merging.c b/gcc/gimple-ssa-store-merging.c index a4a38b104bf..cb764032205 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. -- 2.11.4.GIT