[llvm-dev] Load combine pass
David Chisnall via llvm-dev
llvm-dev at lists.llvm.org
Wed Sep 28 08:54:55 PDT 2016
On 28 Sep 2016, at 16:50, Philip Reames via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> At this point, my general view is that widening transformations of any kind should be done very late. Ideally, this is something the backend would do, but doing it as a CGP like fixup pass over the IR is also reasonable.
I’m really glad to see that this is gone in GVN - it will reduce our diffs a lot when we do the next import. The GVN load widening is not sound in the presence of hardware-enforced spacial memory safety, so we ended up with the compiler inserting things that caused hardware bounds checks to fail and had to disable it in a few places.
If you’re reintroducing it, please can we have a backend option to specify whether it’s valid to widen loads beyond the extents (for example, for us it is not valid to widen an i16 load followed by an i8 load to an i32 load). Ideally, we’d also want the back end to supply some cost function: on MIPS, even when this is valid, the i32 load followed by the masks and shifts is a lot more expensive than the two loads (and increases register pressure, so has knock-on effects that mean that turning off this bit of GVN gave us *much* better code, even without any of the later optimisation opportunities being exploited).
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 3719 bytes
Desc: not available
More information about the llvm-dev