Aggregate store/load optimization

Hi all,

One area where LLVM suck pretty badly is aggregate store and loads. clang do not use them so there are not seen as important, and aren’t handled nicely. Other frontends work around the issue as it is not handled properly and we ends up with some kind of chicken and egg issue.

I recently proposed a diff to be able to optimize load from aggregate stores in GVN without great success. Interest was unclear to some and alteration of GVN was a concern to many.

I’d like to improve the aggregate support. SROA is deaggregating from alloca. Would the same approach for other loads./store be preferable ? That would give a way to use the existing infrastructure while providing a good support for aggregate.

If yes, what would be the right place and way to do this ?

ping ?

Pardon my ignorance, but wouldn't that be a target-specific issue?

cheers,
--renato

I think in general, yes, this is probably the right way to optimize aggregate loads and stores. Most people agree that it is more canonical to use scalar loads and stores, so it’s reasonable to transform one to the other.

I’m not sure SROA is the right place to handle this, though. I believe it only operates on structures allocated on the stack. If you want to load and store to the heap, you’ll need a different pass.

It depends on the data layout, but the optimizer knows that.

Ok I can try to make something in a new pass.