Message ID | 59B92C58.6070204@foss.arm.com |
---|---|
State | New |
Headers | show |
Series | [store-merging] Use store order as tie-breaker in sort_by_bitpos | expand |
On Wed, Sep 13, 2017 at 3:02 PM, Kyrill Tkachov <kyrylo.tkachov@foss.arm.com> wrote: > 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? Ok. Richard. > 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.